re오늘은 Sequelize에서 컬럼 추가 수정 삭제 테이블 추가 등등 DDL의 테이블 정의 부분과 흡사합니다.

 

이제 migration 파일을 생성하는 방법을 알아보겠습니다.

 

npx sequelize migration:create --name 원하는 이름

다음과 같이 명령어를 넣어주면 생성이 되고 저는 customer 테이블을 수정할것이기 때문에 customer이라고

넣겠습니다.

 

그럼 다음과 같이 파일이 생성이 될것입니다.

타임스탬프 + 정했던 이름이 나오게 됩니다, 그래서 20220428123848-customer.js이라는 이름으로 파일이 생성되었습니다.

 

타임 + 이름 이런 방식으로 파일이 생성되는 이유는 migration을 할 때마다 파일을 새로 만들어줘야 하기 때문입니다.

 

현재 customer 테이블 구조를 확인하자면 이런 식으로 되어있습니다.

 

이제 테이블을 수정해보겠습니다.

 

isAdmin이라는 컬럼을 추가하고 id 값의 Type을 varchar에서 int로 바꿔보겠습니다.

 

'use strict';

module.exports = {
  async up(queryInterface, Sequelize) {
    /**
     * Add altering commands here.
     *
     * Example:
     * await queryInterface.createTable('users', { id: Sequelize.INTEGER });
     */
  },

  async down(queryInterface, Sequelize) {
    /**
     * Add reverting commands here.
     *
     * Example:
     * await queryInterface.dropTable('users');
     */
  },
};

migration 파일을 생성 후 확인해보면 다음과 같이 스켈레톤 Skeleton 코드가 짜여있을 것입니다.

 

함수 명 함수 설명
addColumn(테이블 이름, 컬럼 명, 옵션) 컬럼 생성
changeColumn(테이블 이름, 컬럼 명, 옵션) 컬럼 옵션 변경
renameColumn(테이블 이름, 변경 전 컬럼 명, 변경 후 컬럼 명) 컬럼 이름 변경
removeColumn(테이블 이름, 컬럼 명) 컬럼 삭제

migration 함수들을 한번 보겠습니다.

 

migration에서

up 부분 데이터베이스 변경, ( Migration )

  sequelize db:migrate 명령어 실행 시, up에 정의된 코드 실행

down 부분 up이 실행되기 전의 상태로 데이터 베이스를 복원, ( Rollback )

  sequelize db:migrate:undo 명령어 실행 시, down에 정의된 코드 실행합니다.

 

up 부분 코드를 정의해보겠습니다.

  async up(queryInterface, Sequelize) {
    await queryInterface.addColumn('customer', 'isAdmin', {
      type: Sequelize.BOOLEAN,
      defaultValue: false,
    });

    await queryInterface.changeColumn('customer', 'id', {
      type: Sequelize.INTEGER,
    });
  },

원래는 promise를 이용하기도 하는데 기본적으로 제공하는 건 async await 방식입니다.

 

customer 테이블에 isAdmin 컬럼을 생성하며 Boolean 데이터 타입을 넣으며 기본 값을 false로 준다는 내용입니다.

 

  async down(queryInterface, Sequelize) {
    await queryInterface.removeColumn('customer', 'isAdmin');
    await queryInterface.changeColumn('customer', 'id', {
      type: Sequelize.STRING,
    });
  },

 

up부분을 만들었으니 down부분도 만들어 보겠습니다.

down은 말 그대로 Rollback을 하기 위함이기 때문에 up 정의들의 반대로 만들어 주면 됩니다.

 

sequelize db:migrate

이제 migration을 실행시켜보겠습니다.

 

실행을 시키면 밑에 0.312s 이런 식으로 실행시간이 나오게 됩니다.

DESC로 테이블을 확인해보면 id의 type이 int로 변경이 되었고 isAdmin 컬럼이 추가된 것을 확인할 수 있습니다.

 

npx sequelize db:migrate:undo

이제 down을 하여 롤백하여보겠습니다.

 

에러 없이 진행이 된다면 다음과 같이 나올 것입니다.

 

이제 다시 DESC를 이용하여 테이블을 확인해보겠습니다.

 

이렇게 migration이 잘 되는 것을 확인할 수 있습니다.

그리고 새로 migration을 할 때마다 파일을 새로 생성해서 해야 됩니다.

지금까지 NodeJS ORM Sequelize Migration에 대해 정리해보았습니다.

감사합니당

 

Reference

https://sequelize.org/v3/docs/migrations/

https://victorydntmd.tistory.com/27

https://guiyomi.tistory.com/87

https://sequelize.org/docs/v6/other-topics/migrations/ 

https://crispypotato.tistory.com/156

https://any-ting.tistory.com/54

'BackEnd > Node.js' 카테고리의 다른 글

[GCP VM 인스턴스] Node.js 설치 및 실행  (0) 2022.07.24
[ GCP VM 인스턴스 ] 기본 셋팅  (0) 2022.07.23
[ ORM ] Sequelize - Seeders  (0) 2022.04.26
[ ORM ] Sequelize - 2  (0) 2022.04.25
[ ORM ] Sequelize - 1  (0) 2022.04.25

+ Recent posts