데이터베이스 스키마 변경을 관리하고, 실제 프로덕션 환경에서의 스키마 변경을 안전하게 수행할 수 있습니다.
→ DB 전체를 날릴 필요가 없다.
TypeOrm에서는 Entity의 변화를 감지하여 자동으로 Migration을 진행해준다. (장점이지만, 단점으로는 갑자기 데이터가 날아가는 버그 등이 존재하여, 많이 사용하는 것은 금지)
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);
"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의 절대 경로를 설정해준다.
(이거 없으면 경로를 못 찾는 경우가 많다.)