프로덕션 레벨에서 DB의 변경사항이 있을 수 있다. 모델의 변경사항이 생긴다면 데이터베이스와 동기화를 해야한다. Dev 레벨에선 {syncronize: true}
옵션을 추가하여 모델의 변경 사항을 바로 적용한다. 하지만 프로덕션 레벨에선 사용하면 안되는데, 기존의 데이터들을 전부 날릴 수 있기 때문이다.
Migration 기능을 사용하면, 현재 모델과 기존 DB를 비교해 변경된 사항에 대해 SQL 쿼리문을 날려준다. 기존의 데이터를 안전하게 보관하면서도 빠르게 변경사항을 적용할 수 있다. 또, migration 기능을 통해 적용한 내용은 DB에 기록되기 때문에 버전관리 또한 가능하다.
실무에서는 로컬 변경사항에 대해서는 {syncronize: true} 옵션을 사용하고, 내부 테스트용 Dev 버전에선 테스트 데이터들을 보존하기 위해 migration 기능을 사용하고있다.
프로젝트에 typeorm CLI 설치
npm install ts-node --save-dev
npm i -g typeorm
package.json파일에 script 작성
"scripts": {
...
"typeorm": "typeorm-ts-node-esm -d ${ormConfig.ts PATH}"
}
ormconfig.ts 파일 작성. DB에 접속하기 위한 데이터를 정리해두는 파일이다. 파일 위치는 꼭 저 위치가 아니어도된다.
// src/ormconfig.ts
import { DataSource } from 'typeorm';
const ormConfig = new DataSource({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: '00-service',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: false,
migrationsRun: false,
migrationsTableName: 'migrations',
migrations: [__dirname + '/**/migrations/*.ts'],
});
export default ormConfig;
**${migration-file-name}**엔 버전관리에 사용될 마이그레이션 명을 입력한다. 앞에 임의의 값이 붙어 중복되는 이름을 작성해도 되지만 최대한 어떤 변경 사항이 있었는지 표현할 수 있는 단어로 작성해 두는 편.
npm run typeorm migration:generate /src/migrations/${migration-file-name}
migration 파일에 작성된 SQL문을 실행. 알아서 가장 최신의 변경사항 파일을 실행시켜준다.
npm run typeorm migration:run