Typeorm 마이그레이션
npm i -g typeorm
typeorm migration:create .\src\database\migrations\init
typeorm migration:generate .\src\database\migrations\init -d .\dist\database\data-source.js
typeorm migration:run .\src\database\migrations\init -d .\dist\database\data-source.js
npm run
typeorm migration:generate .\src\database\migrations\nexflex
data-source.ts
//import * as dotenv from 'dotenv'; import { DataSource } from 'typeorm'; //dotenv.config(); export default new DataSource({ type: process.env.DB_TYPE as 'postgres', host: process.env.DB_HOST, port: parseInt(process.env.DB_PORT || '5432'), username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE, synchronize: false, logging: false, entities:[ 'src/**/*.entity.ts' ], migrations: [ 'src/database/migrations/*.ts' ], ...(process.env.ENV === 'prod' && { ssl: { rejectUnauthorized: false, } }) });
# TypeORM 마이그레이션 작성 및 테스트 전체 워크플로우 # 1. 마이그레이션을 위한 설정 파일 (ormconfig.js 또는 data-source.ts) 준비 # 예시: data-source.ts 또는 ormconfig.ts 에서 마이그레이션 설정 포함 // ormconfig.ts 또는 data-source.ts export const AppDataSource = new DataSource({ type: 'postgres', host: 'localhost', port: 5432, username: 'postgres', password: 'postgres', database: 'mydb', entities: ['src/**/*.entity.ts'], migrations: ['src/migrations/*.ts'], synchronize: false, // 반드시 false }); # 2. 마이그레이션 생성 npx typeorm migration:create src/migrations/CreateUsersTable # 또는 자동 생성 npx typeorm migration:generate src/migrations/AutoGeneratedMigration --dataSource=src/data-source.ts # 3. 마이그레이션 적용 npx typeorm migration:run --dataSource=src/data-source.ts # 4. 마이그레이션 롤백 (마지막 마이그레이션만 취소) npx typeorm migration:revert --dataSource=src/data-source.ts # 5. 마이그레이션 상태 확인 npx typeorm migration:show --dataSource=src/data-source.ts # 6. 테스트를 위한 DB 초기화 (주의: 데이터 삭제됨) npx typeorm schema:drop --dataSource=src/data-source.ts npx typeorm migration:run --dataSource=src/data-source.ts # 7. 마이그레이션에서 기존 데이터 보존을 원할 경우 schema:drop은 사용하지 않음 # 8. 환경 분리 예시 (.env.development, .env.production) 및 ConfigService와 함께 설정 # 9. NestJS의 TypeORM 연결 시에는 TypeOrmModule.forRootAsync로 환경별 설정 적용 # 주의사항: # - synchronize는 반드시 false로 설정 (마이그레이션 전략 사용 시) # - 자동 마이그레이션 생성 시 entity 경로 및 설정이 정확해야 함 # - 운영 환경에서는 절대 schema:drop을 사용하지 말 것
댓글 ( 0)
댓글 남기기