#TIL 항해 19일차 심화 주특기 주간 3주차 강의
배울 것
도커를 이용해서 MySQL 서버를 켜는 법
Mongodb : 비관계형 데이터 베이스
MySQL : 관계형 데이터 베이스; 데이터 베이스가 달라도, 잘 저장됨!
2번째
몽고디비 -> 마이에스큐엘로 옮기기
터미널에서 Mysql 실행하기
MySQL 실행 명령어
host : 127.0.01
user: root
password:1234 (복잡하게 구성할 것!)
MySQL 확장 extension 인스톨 하기! -> reload까지
MySQL 확장 플러그인 플러스 버튼 클릭 -> 호스트 입력 -> user 입력 -> password 입력 -> 4개가 떠있을꺼임 -> 각각 하나가 도커로 실행한 MySQL 데이터 베이스이다!
=> 테이블을 만들어야 하는데 씨퀄라이즈라는 도구를 사용해서 해보자!
3번째
저장하고 읽어 올수 있는 Sequelize 라는 라이브러리를 사용하자!
Sequelize 로 구현하기! (다른종류의 데이터 베이스더 같은 인터페이스로 사용할수 있도록 구현을 해놓은 라이브러리)
1) 모듈 3가지 설치하기 하고 나면 확인 -> 모델 폴더에 인덱스.js 생성 ( 보지 않아도 됨) (모델을 편하게 쓰게 해주는 도구) -> 씨더스 폴더; 특정 역할을 하는 폴더 (데이터베이스를 세팅하고 초깃값을 -> 마이그레이션 폴더 모델을 생성할때 같이 생성되는 폴더 이다!
=> config.json;씨컬라이즈가 데이터베이스를 연결하기 위해 사용하는 정보!
=> 씨컬라이즈라는 도구가 데이터 베이스까지 다 만들어 줌 (실제로 알고 써야 하니까 공부를 하자! 방대해서 공부할 양이 많음 )
=> 개발자 비번 1234로 바꾸기
=> 데이터 베이스를 생성할것 (간단하게 config.json을 읽어들어서 자동으로 만들어줌) ; npx sequelize db:create
=> 리프레쉬 해줘야지 생성이 된다!
=> 씨컬라이즈 모델을 만들어서 데이터를 기반을 완성하고 api를 수정 할 것!
4번째 써컬라이즈로 구현하는 모델!(사용자) => 자동으로 사용자 테이블을 만들것임
데이터 베이스 안에는 여러 테이블이 존재 한다!
각자의 스키마 틀이 존재 할수 있음 => 데이터 베이스 언더바 디벨롭먼트라는 데이터를 만들었음 그 안에 user라는 테이블을 만들 것임
=> 씨컬라이즈 모델을 만들어서 자동으로 테이블이 생성되도록 할 것이다 => 테이블이 잇어야 데이터를 저장할 공간이 생김 => model/user.js 파일 제거하기(앞으로 만들 모델이랑 겹침) => 씨컬라이즈 모델 생성 할것임
=> 파일 삭제 => 사용자 모델 생성하기 => npx sequelize model:generate --name User (마음대로 지정 가능)--attributes(어떤 속성?) email:string,nickname:string,password:string 터미널 창에 붙여넣기를 한다(user 모델 생성 명령어) => 모델안에 user안에 생성 그리고 migration 안에도 파일이 생성(시간에 따라 파일 명이 바뀐다) => user.js모델은 index.js 파일을 통해서 로딩이 될것이다!
=>마이그레이션 파일 (데이터베이스에 mysql 테이블로 만들어질 코드) => 우리는 id를 userId로 썼음 => 이번에도 변경 => 씨컬라이즈 경우 기본적으로 id를 id로 적용해서 씀(통일해서) 기본키로 사용하고 있음 (primary key) => /user.js 파일에서 => User.init 안에 userId: {
type: DataTypes.INTEGER,
primarKey :True //유저 아이디를 id 라는 값을 사용함
} => 저장 => migration file 에는 id가 있음 왜? ) 코드를 읽어 들여서 데이터베이스 직접 생성 하지만 모델같은경우는 씨퀄라이즈가 기본으로 모델을 구성할때. Id가 기본적으로 존재하도록, 구성되어 있음 그래서 primary키를 따로 지정하지 않으면 id라는 이름으로 기본키가 있다고 생성을 함 => 그래서 지정을 해줌 // 마이그레이션 Id 적혀 있는걸 -> UserId로 수정해줌 => 테이블을 생성하는 방법 => 전에 테이블이 존재하는지 생성하는지 데이터 베이스(MySQL) 확인 하고 => 명령어 npx... 입력할 것! => 씨퀄라이즈 메타는 (메타데이터; 실질적으로 조회하거나, 다루는일은 없다!) => 서버를 끄면 => 써버를 켜서 => 데이터 베이스 다시 생성 (명령어) -> npx sequelize db.migrate
5번째 API 수정
1. 회원가입
2. 로그인
3. 사용자 인증 미들웨어
4. 내정보 조회 api (3번 수정하면서 자동적으로 동작 할 것임)
1.회원 가입 기능 수정 => 모델 불러오는 방법을 const { User } = require("./models") => 인덱스는 생략이 가능하다! => 회원가입 api 수정(router.post) =>찾기 find -> findAll => 조건은 where 을 둬야함 [Op] => Op 참조 하기 위에서 [Op.or] = [{nickname}, {email}] => 조건문 다시한번 더 보기!(조건 하나라도 맞으면 가져와!라는 뜻) => 생성 하는 부분도 수정을 해야함 (코드 참고)
2. 로그인 API
post{"/auth"} findOne => findOne 쓰이나 where {email,password}
이거 하나!
3. 사용자 인증 미들웨어!
모델 참조 ) const {User} = require("../models")
findById => findByPk
excute (생략하기) 씨컬라이즈는 기본적으로 프로미스를 반환해서 then을 붙인다.
=> 서버 실행 => 접속해서 -> 회원 가입 잘되는지 확인 해보기! => 상품은 몽고디비에 저장이 그대로 되어 있음 => 로그인 사용자 정보만 MySQL을 사용하게 된거임
=> 데이터 베이스는 단순히 정보를 저장하는 부분이다! => 도구에 얽매이기 보다 비지니스 로직에 집중을 하는것이 좋다!