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/
'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 |