먼저 Sequelize과 mysql2라이브러리를 설치한다.
Sequelize 설치 : $ npm install --save sequelize
Sequelize CLI 설치 : $ npm install --save-dev sequelize-cli
cli를 통해 ORM을 잘 사용할 수 있도록 bootstraping(프로젝트 초기 단계를 자동으로 설정할 수 있도록 도와주는 일)을 해줘야 한다.
$ npx sequelize-cli init
bootstraping을 하면 아래의 폴더가 자동으로 생성된다.
config/config.json
models/
migrations/
seeders/
테이블을 생성할 데이터베이스를 미리 만들어 준다.
이제 cli설정을 해준다. config폴더의 config.json을 설정해준다.
기본적으로 development, test, production 환경중 development로 설정이 되어 있다.
{
"development": {
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
설정환경은 코드하는 환경에 따라 변경을 해줄 수 있다. 설정파일은 중요한 개인정보가 들어있어서 gitignore에 등록을 해줘야한다. 설정파일을 git의 관리를 받게하는 대신 환경변수로 사용하는 방법이 있다. dotenv를 다운받아서 사용을 하면 가능하다. (자세한 내용은 이 블로그를 참고)
모델은 스키마와 비슷하다. 모델생성은 터미널을 이용해서 코드로 만든다.
모델 정의 : $ npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
User라는 이름의 모델을 정의하고 모델의 속성을 작성한다. 타입은 문자열인 경우 string, 숫자인 경우 integer등이 있다. 속성의 다른 정보는 여기서 확인이 가능하다.
이 작업을 하면 models폴더에 users라는 폴더가 자동으로 생성된다. 그리고 migrations폴더에도 생성날짜가 파일명인 파일이 생성된다. 여기까지는 아직 모델을 생성한 것은 아니다. 생성하기 전 모델을 정의만 한것이다. 여기서 migrations 디렉터리에 있는 create-user.js 파일을 보면 up과 down으로 구분되어 각각 createTable과 dropTable을 해주는 코드를 볼 수 있다.
정의된 모델을 생성하는 것을 마이그레이션이라고 부른다.
마이그레이션 : $ npx sequelize-cli db:migrate
마이그레이션 취소 : $ npx sequelize-cli db:migrate:undo
마이그레이션을 하고 생성된 모델안에 데이터를 추가해야하는데 Creating the first Seed : 를 이용해서 추가할 수 있다.
Seed 생성 : $ npx sequelize-cli seed:generate --name demo-user
seeders 디렉터리에 파일이 생긴것을 볼 수 있다. 파일을 확인해보면 마이그레이션 파일과 같은 포맷으로 up과 down으로 구분이 되어있는것을 확인 할 수 있다. 시드를 할때는 up에 있는 코드가 실행되고 시드를 취소할때는 down에 있는 코드가 실행된다.
예를들어 아래와 같이 코드를 작성해준다.
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.bulkInsert('Users', [{
firstName: 'John',
lastName: 'Doe',
email: 'example@example.com',
createdAt: new Date(),
updatedAt: new Date()
}]);
},
down: (queryInterface, Sequelize) => {
return queryInterface.bulkDelete('Users', null, {});
}
};
Seed 실행 : $ npx sequelize-cli db:seed:all
Seed 삭제 : $ npx sequelize-cli db:seed:undo
테이블에 데이터가 생성된 것을 확인 할 수 있다.
공식문서를 보고 작성했습니다.