💛Backend

Nest.js에서 TypeORM 0.3 migtation 하기

해서미 2023. 6. 25. 21:41

Migraion?

데이터베이스 스키마의 변경 사항을 추적하고 적용

 

TypeORM에서 synchronize: true 로 entity와 DB의 싱크를 맞출 수 있지만 자칫 데이터 유실이 있을 수 있기 때문에 production 레벨에서는 안전하지 않다. 

 

TypeORM 0.3에서 migration 진행하기

1. entity 생성

간단히 만들고 싶은 user entity를 생성했다.

2. package.json script에 아래 TypeORM 관련 스크립트 추가

각자 파일의 경로에 맞추어 스크립트 작성

"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --dataSource ./data-source.ts",
"migration:create": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:create ./src/db/migrations/Migration",
"migration:generate": "npm run typeorm migration:generate ./src/db/migrations/Migration",
"migration:run": "npm run typeorm  migration:run",
"migration:revert": "npm run typeorm migration:revert"

ts-node로 절대경로 인식시킴

 

3. migration 진행 할 data-source 코드 작성

data-source.ts

import { ConfigService } from '@nestjs/config';
import { config } from 'dotenv';
import { DataSource } from 'typeorm';

config();
const configService = new ConfigService();

export default new DataSource({
  type: 'postgres',
  host: configService.get('DB_HOST'),
  port: 5432,
  username: configService.get('DB_USERNAME'),
  password: configService.get('DB_PASSWORD'),
  database: configService.get('DB_DATABASE'),
  synchronize: false,
  entities: ['src/**/*.entity.ts'],
  migrations: ['src/db/migrations/*.ts'],
  migrationsTableName: 'migrations',
});

 

4. migration 하기

드디어 migraion 시작

npm run migration:generate

성공적!

그럼 이제 내가 설정해준 migration 경로에 migraion 파일이 생긴다. 나의 경우 src/db/migrations 폴더

 

 

이제 생성된 migration 파일로 db에 테이블을 생성해주자. 

npm run migration:run

쿼리 실행중

명령어 실행이 완료되면 이렇게 연결된 데이터베이스에 테이블이 추가되었다!

 

 

 

📎 참고

https://typeorm.io/using-cli

https://whyhard.tistory.com/59