Sequelize Migration

velgmzz·2022년 10월 10일
0
post-thumbnail

Sequelize와 Migration

Node.js의 대표적인 ORM(Object-Relation Mapping)인 Sequelize는 Schema를 쉽게 구성할 수 있고 MySQL 같은 많은 RDBMS 지원한다.
Model을 설정하고 나서 운영중인 서버에서 모델의 데이터 형식, 컬럼 추가, 제거, 테이블 추가, 테이블 제거와 같은 DB 변경 작업시에 Sequelize Migration을 사용한다.

이 글에선 MySQL과 함꼐 사용한다.

자세한 내용이 필요할 땐 Sequelize 공식문서

Migration

npx sequelize init

sequelize init 명령어를 실행하면 아래와 같이 몇개의 폴더가 생성된다.

|-- config
|-- migrations
|-- models
|-- seeders

migration 파일 생성

아래 명령어를 실행시켜 migration 파일을 생성 한다.

sequelize migration:create --name
// ./migrations/20221010-backup.js

타임스탬프와 설정해준 이름과 함께 파일이 만들어지고 기본 구조는

module.exports = {
  async up(queryInterface, Sequelize) {
    //Add altering commands
  },
  async down(queryInterface, Sequelize) {
    //Add reverting commands 
  }

up => 마이그레이션, down => 롤백 기능을 담당한다.
컬럼 추가, 테이블 생성등 마이그레이션 할 내용을 up에, 롤백할 내용을 down에 작성하면 된다.

// ./models/user.js
{
  email: {
    type: DataTypes.STRING(30),
    allowNull: false,
    unique: true,
}

email column이 있는 User Model에서 name 컬럼을 추가하고 싶다

module.exports = {
  async up(queryInterface, Sequelize) {
    return queryInterface.addColumn('users', 'name', {
      type: Sequelize.DataTypes.STRING(20),
      allowNull: false,
    })
  }
  async down(queryInterface, Sequelize){
    return queryInterface.removeColumn('users', 'name')
  }
}

다중 컬럼 추가

여러개의 컬럼을 한번에 추가하고싶을때 Promise.all()을 사용한다

async up(queryInterface, Sequelize) {
    return Promise.all([
    	queryInterface.addColumn('users', 'email', {
        	type: Sequelize.STRING(50),
          	allowNull: false,
        }),
      	queryInterface.addColumn('users', 'password', {
        	type: Sequelize.STRING(50),
          	allowNull: false,
        }),
      
    ])
  }

Migration 실행

변경적용

모델에 대한 설정이 끝나면 아래 명령어로 MySQL으로 이식 가능하다.

npx sequelize-cli db:migrate

롤백 (바로 전 작업으로)

npx sequelize-cli db:migrate:undo

롤백 (모든 이식을 롤백)

npx sequelize-cli db:migrate:undo:all
profile
정리하며 공부하는 블로그, React/Next를 공부합니다

0개의 댓글