SMALL
안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
Sequelize Migration
- 운영 단계에서 데이터베이스 스키마 변경이 편리
- 직접적인 스키마 변경을 할 순 있지만 번거롭고, 위험도가 높음
Sequelize Migration 방법
Migration 생성
$ sequelize migration:create 파일명
위 명령어를 작성하면, "타임스탬프-파일명.js" 파일이 생성됩니다.
Migration 파일
"use strict";
/** @type {import('sequelize-cli').Migration} */
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');
*/
},
};
up() 함수에는 마이그레이션 하는 코드, down() 함수에는 롤백하는 코드를 작성해주어 진행해줍니다.
users 테이블에 age 컬럼을 추가하는 코드를 작성해보겠습니다.
"use strict";
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up(queryInterface, Sequelize) {
/**
* Add altering commands here.
*
* Example:
* await queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
const tableDefinition = await queryInterface.describeTable("users");
const promises = [];
return queryInterface.sequelize.transaction((t) => {
if (!tableDefinition) {
promises.push(
queryInterface.addColumn("users", {
age: {
type: Sequelize.INTEGER(),
allowNull: false,
},
})
);
}
return Promise.all(promises);
});
},
async down(queryInterface, Sequelize) {
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
const tableDefinition = await queryInterface.describeTable("users");
const promises = [];
return queryInterface.sequelize.transaction((t) => {
if (tableDefinition) {
promises.push(queryInterface.removeColumn("users"));
}
return Promise.all(promises);
});
},
};
다중 마이그레이션 시 위 코드처럼 배열에 담아 한 번에 처리해줄 수 있고, 단일 마이그레이션 시 배열에 담지 않고 처리해줄 수도 있다.
(일부로 배열에 담음)
Migration 진행
$ sequelize db:migrate --env development
--env 옵션을 통해 데이터베이스를 선택할 수 있습니다.
마이그레이션을 실행하면, DB에 SequelizeMeta 테이블이 생성되고, 히스토리가 기록되는 것을 확인할 수 있습니다.
실행된 마이그레이션 파일을 저장해두고,
추후 마이그레이션 요청이 들어왔을 때 SequelizeMeta 테이블에 존재하는 마이그레이션인지 확인 후 존재한다면 건너뛰고, 존재하지 않는다면 실행해 줍니다.
따라서, 마이그레이션 파일이 많아도 신규 마이그레이션만 진행됩니다.
Migration 취소
$ sequelize db:migrate:undo --env development
롤백이 실행되며, SequelizeMeta 테이블에서 해당 마이그레이션 로우는 삭제됩니다.
✅ 참고한 사이트
https://jeonghwan-kim.github.io/sequelize-migration/
LIST
'JavaScript > Node.js' 카테고리의 다른 글
Node) API 사용량 제한하기 (express-rate-limit) (0) | 2023.08.28 |
---|---|
Node) 노드버드 SNS 만들기 - 게시글, 이미지 업로드 하기 (0) | 2023.07.31 |
Node) 사용자 인증 정보 확인 후 다음 미들웨어에게 해당 정보 넘겨주기 (0) | 2023.02.03 |
Node) 부모 라우터의 req.params를 자식 라우터에게 넘기기 - 중첩라우터 (0) | 2023.02.02 |
Node) React + Node로 infinity scroll 페이징 처리 (observer) (0) | 2023.01.25 |