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)
댓글 남기기