Migration의 장점

데이터베이스 스키마 변경을 관리하고, 실제 프로덕션 환경에서의 스키마 변경을 안전하게 수행할 수 있습니다.

→ DB 전체를 날릴 필요가 없다.

TypeOrm에서는 Entity의 변화를 감지하여 자동으로 Migration을 진행해준다. (장점이지만, 단점으로는 갑자기 데이터가 날아가는 버그 등이 존재하여, 많이 사용하는 것은 금지)

Migration을 하기 위한 설정

  1. data-source.ts 파일 생성
import { DataSource, DataSourceOptions } from 'typeorm';
import { config } from 'dotenv';
import { SeederOptions } from 'typeorm-extension';

config({ path: '.env' });

const options: DataSourceOptions = {
  type: 'postgres',
  host: process.env.DB_HOST,
  port: parseInt(process.env.DB_PORT),
  username: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
  entities: ['src/**/*.entity{.ts,.js}'],
  migrations: ['src/database/migrations/*.ts'],
  migrationsTableName: 'migrations',
  ssl: {
    rejectUnauthorized: false,
  }
};

export const dataSource = new DataSource(options);
  1. script 설정
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --dataSource ./src/database/data-source.ts",
    "migration:create": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:create ./src/database/migrations/Migration",
    "migration:generate": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:create ./src/database/migrations/Migration -d ./src/database/data-source.ts",
    "migration:run": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:run",
    "migration:revert": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:revert",

typeORM CLI를 구동시키기 위해 Script를 설정한다.

-r tsconfig-paths/register : TypeScript typeORM CLI Module의 절대 경로를 설정해준다.

(이거 없으면 경로를 못 찾는 경우가 많다.)