Search
▪️

MySQL과 시퀄라이즈

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 참고하자.