Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- SWIFT
- swagger
- front-end
- Kotlin
- restful api
- react
- javascript
- kafka
- file upload
- 개발자
- state
- 반복문
- Sequelize
- AWS
- back-end
- Producer
- Nest.js
- 자바
- spring boot
- It
- 조건문
- props
- component
- 코틀린
- 상속
- 개발이 취미인 사람
- java
- node.js
- class
- vue
Archives
- Today
- Total
개발이 취미인 사람
[Node.js] Sequelize Migration 사용법 본문
반응형
- 지난 시간
안녕하세요. 지난 시간에는 Seeders를 사용해서 테스트 데이터를 추가하고 삭제하는 법에 대해 알아봤습니다.
혹시 놓치고 오신 분들은 아래 링크를 통해 학습하고 오시는 걸 추천드리겠습니다.
- 개요
이번 시간에는 DB 모델(테이블)을 수정하는 법에 대해 알아보겠습니다.
시퀄 라이즈에서는 마이그레이션을 지원합니다. 만약 우리가 운영 중인 서비스에 DB 상태를 변경하게 된다면, 여러 부분을 신경 습니다.
(잘못하면... 운영 중인 서비스에 큰 타격을 입게 된다... 조심...)
하지만 시퀄 라이즈에서 지원하는 마이그레이션을 사용한다면, 우리가 수정하고 싶은 모델을 소스코드에 작성해 수정할 수 있습니다.
- 마이그레이션 파일 생성
sequelize migration:create --name add // add라는 이름으로 파일이 생성된다.
마이그레이션 파일은 필요할 때마다 새롭게 생성해서 진행하는 것을 추천드립니다.
add.js 파일 구조
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
/**
* Add altering commands here.
*
* Example:
* await queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
},
down: async (queryInterface, Sequelize) => {
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
}
};
지난 시간에 우리는 Seeders를 사용해서 테스트 데이터를 만들었습니다. Seeders와 구조가 동일한 것을 알 수 있습니다. :)
- up 속성
- migration을 통해 수정할 모델 작성하는 소스코드 로직
- down 속성
- migration을 통해 되돌릴 때 수행되는 로직
- 모델 수정 및 되돌리기
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
/**
* Add altering commands here.
*
* Example:
* await queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
const transaction = await queryInterface.sequelize.transaction();
try {
await queryInterface.addColumn(
'Users',
'Number',
{
type: Sequelize.DataTypes.INTEGER,
},
{ transaction }
);
await transaction.commit();
} catch (err) {
await transaction.rollback();
throw err;
}
},
down: async (queryInterface, Sequelize) => {
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
return queryInterface.sequelize.transaction( transaction => {
return Promise.all([
queryInterface.removeColumn('Users', 'Number', {transaction: transaction})
])
})
}
};
소스코드를 확인하면 up: 부분에 addColumn과 down: 부분에 removeColumn을 확일 할 수 있습니다.
addColumn은 새로운 컬럼을 추가하며, removeColumn은 해당 컬럼을 삭제합니다.
마이그레이션 실행
sequelize db:migrate --env development
실행 결과
마이그레이션 되돌리기
sequelize db:migrate:undo --env development
실행 결과
실행 결과 컬럼이 추가되고 삭제되는 걸 확인할 수 있습니다.
'백앤드(Back-End) > Node.JS' 카테고리의 다른 글
[Node.js] PM2 사용법 - 서버를 무중단으로 사용하기 (0) | 2021.04.17 |
---|---|
[Node.js] babel 설정 (0) | 2021.04.16 |
[Node.js] Sequelize Seeders 사용법 (1) | 2021.02.13 |
[Node.js] Sequelize CRUD 사용법 (0) | 2021.02.12 |
[Node.js] Sequelize 관계성 정의 테이블간에 관계정의 (2) | 2021.02.11 |