Nodejs


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을 사용하지 말 것

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

당나귀 귀 치레 , 어울리지 않는 곳을 쓸데없이 꾸민다는 말.

댓글 ( 0)

댓글 남기기

작성