Sequelize & MySQL
•
CLI에서도 편하게 Sequelize를 이용하도록 Global하게 아래 Package를 설치한다.
npm install -g sequelize-cli
•
CLI에서 Sequelize를 이용할 수 있기 때문에, 프로젝트 폴더에서 sequelize init을 통해서 초기 세팅을 할 수 있다. 이를 통해 만들어지는 것들은 seeders, models, migrations, config.json이다.
Workbench & Sequelize로 데이터베이스 만들기
•
아래 명령어들이 많이 쓰인다.
sequelize db:create // DB 생성
sequelize db:migrate // DB Table Migrate
sequelize db:seed:all // DB Table 초기 값 지정
•
데이터베이스에서의 Table을 Sequelize에서는 Model이라고 부르는데, 이런 Model들도 Module로 만들어 사용하게 된다. (module.exports)
•
일반적으로 Model들을 정의하기 위해서 다른 Script에서 작업한 것을 Module로 Export한다고 했는데 이렇게 Export된 Module들은 index라는 Model에서 모두 Import하여 관리하게 된다.
db.$modelName = require('./$modelName.js')(sequelize, Sequelize)
** sequelize db:create --charset=utf8mb4 --env=development
Sequelize Table 정의하기
•
MySQL의 경우 Camel Case 보다는 Snake Case를 많이 쓴다. 따라서 timestamps 옵션과 함께 underscored라는 Option을 줄 수 있는데, 이 Option을 True, False로 설정할 수 있다.
•
DataTypes는 STRING(글자 수), INTEGER, FLOAT, TEXT, DATE, BOOLEAN 등을 줄 수 있다.
•
Attribute의 Option으로는 allowNull, defaultValue, unique, comment, primaryKey를 줄 수 있다.
•
DATE의 경우 defaultValue를 주는 것이 일반적인데 Sequelize에게 현재 시간을 찾아서 넣어라 라는 것이 가능하다. sequelize.literal('now()')로 사용하면 된다.
Sequelize Relation 정의하기
•
두 Model간 Relation에 대해서 정의를 할 수 있다. Relation에 대해서 정의하면서 서로 참조할 수 있는 Foreign Key를 Option으로 지정할 수 있다. Foreign Key로 들어가는 값은 Model의 Primary Key 값이다. 단, Foreign Key를 지정할 때, 각 Model의 Source Key, Target Key를 역할에 맞게 분배해야 한다.
•
자세한 사항은 Code를 참고하자.
◦
1 : 1 → hasOne, belongsTo
◦
1 : 다 → hasMany, belongsTo
◦
다: 다 → belongsToMany
** "Work Bench"부터 "Relation 정의하기"까지 Model을 Module로 만들어서, index라는 File에서 Module을 Call하여 Model을 Instantiate를 해줬고, 데이터베이스의 설정 값인 Sequelize도 Instantiate를 해줬었다. 이런 index라는 File도 app.js에 연결하여 실행될 수 있도록 (실행되어 Model, 데이터베이스 Instantiate할 수 있도록) 해야 한다. 방법은 다음과 같다. index.js의 파일로 부터 sequelize를 Destructuring을 하고, sequelize.sync()를 호출한다. 이렇듯 sequelize가 필요하기 때문에 Export 객체에 sequelize와 Sequelize등을 담게 되는 것이다.
** 모든 폴더에 대해서 require할 시, index라는 Script 이름은 생략이 가능하다.
** Deprecated 및 Logging을 끄고 싶다면, config.json에서 operatorsAliases: false, logging: false를 준다.
Sequelize Query 이용하기
•
include → Model간의 Relation 연결
•
model → 어떤 Model인지 지정
•
where → Query 조건 설정
•
Code 참고하자.