항해14기 본과정/항해14기 개발일지

[항해 14기] 개발일지20 (Sequelize, Migration)

스쿼트잘함 2023. 4. 25. 19:57

Node.js 숙련

 

1. Sequelize

1) 구성

- migration과 model

- migration은 Sequelie CLI를 이용하여 MySQL에 테이블을 생성하기 위해 사용

- model은 table과 column의 속성값을 설정하고  MySql과 Express를 연결 시킴

2) 사용 방식

- 테이블 모델 생성: npx sequelize model:generate --name Posts --attributes title:string,content:string,password:string

- model이 생성되고, model을 Sequelize시킨 migration 파일 생성(model의 시퀄라이즈 적용 결과 데이터)

- 이후 npx sequelize db:migrate를 진행하면 위의 사항들이 반영된 테이블 생성 완료

- db의 스키마가 변경되며 sequelize 명령어를 사용 가능

3) 자주 쓰는 Sequelize Method

- find, findOne, findAll, findByPk

- create, update, destroy

 

 

 

2. Migration

1) 상세

- MySQL 테이블을 정의 및 생성하기 위해 사용됨

2) 수정 가능

- 아직 데이터를 넣기 전이라면 undo로 취소 후 npx sequelize db:migrate 재적용

- 데이터를 보존하며 수정 시 (https://crispypotato.tistory.com/156)

- migration 없이 수정 시(해당 방식보다 migration을 사용 하는것이 유지 보수에 유리 - 서버를 항상 켜줘야하며, 상세 명령어 등록이 까다로움)

 

 

 

3. 타임스탬프 관련

1) 타임스탬프 버그

- 현재 MySQL의 경우 defaultValue를 현재 시간(CURRENT_TIMESTAMP)으로 등록하려 할 때, Seqeulize.NOW로 속성을 입력할 경우 정상적으로 반영이 되지 않는 문제가 있음

- 해당하는 문제를 해결하기위해 defaultValue: Sequelize.fn("now")로 설정 필요

2) 타임스탬프 비활성화

- 생성 날짜, 수정 날짜의 경우 테이블을 만들 때 자동으로 생성됨

- 이를 방지하려면 model의 sequelize부분에 timestamps:false 추가