프로그래밍 공부 일지/TIL 그리고 WIL

#TIL 항해 19일차 심화 주특기 주간 3주차 강의

엘리허 2021. 10. 1. 21:54

배울 것 

도커를 이용해서 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을 사용하게 된거임 

=> 데이터 베이스는 단순히 정보를 저장하는 부분이다! => 도구에 얽매이기 보다 비지니스 로직에 집중을 하는것이 좋다!