NestJS에서 데이터베이스 스키마를 업데이트하려면 마이그레이션(migration) 작업을 수행해야 한다. TypeORM을 사용하는 경우, 마이그레이션을 자동으로 생성하고 실행하는 방법을 사용할 수 있다.
npm install -g typeorm
ormconfig.json 또는 ormconfig.js 파일을 사용하여 TypeORM 설정을 구성한다.{
"type": "mysql", // 사용 중인 데이터베이스 타입
"host": "localhost",
"port": 3306,
"username": "test",
"password": "test",
"database": "test",
"entities": ["dist/**/*.entity{.ts,.js}"],
"migrations": ["dist/migrations/**/*{.ts,.js}"],
"cli": {
"migrationsDir": "src/migrations"
}
}
새로운 스키마 변경 사항을 반영하기 위해 마이그레이션 파일을 생성한다.
typeorm migration:generate -n MigrationName
여기에서 MigrationName은 생성할 마이그레이션의 이름이다. 예를 들어, AddNewColumnToCompany와 같이 명명할수 있다.
생성된 마이그레이션 파일을 데이터베이스에 적용한다.
typeorm migration:run
NestJS 프로젝트에서 TypeORM을 사용하여 마이그레이션을 자동화하려면 typeorm 패키지를 사용하여 명령을 실행할 수 있다. NestJS에서 typeorm 패키지를 사용하여 마이그레이션을 자동화 하는 방법이다.
@nestjs/typeorm 패키지 설치먼저, @nestjs/typeorm 패키지를 설치한다.
npm install --save @nestjs/typeorm typeorm
TypeOrmModule 설정app.module.ts 파일에서 TypeOrmModule을 설정한다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { Company } from './company/company.entity';
import { WallpaperPrice } from './wallpaper-price/wallpaper-price.entity';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'test',
password: 'test',
database: 'test',
entities: [Company, WallpaperPrice],
synchronize: false, // 자동 동기화를 비활성화
migrations: ['dist/migrations/*.js'],
cli: {
migrationsDir: 'src/migrations',
},
}),
// 다른 모듈들...
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
마이그레이션 파일을 생성하고 실행하는 방법을 NestJS의 CLI 명령어를 통해서 수행할 수 있다.
npm run migration:generate -- -n MigrationName
npm run migration:run
migration:generate는 새로운 마이그레이션 파일을 생성하고, migration:run은 생성된 마이그레이션을 데이터베이스에 적용한다.
데이터베이스에 새로운 테이블을 추가하거나, 기존 테이블의 구조를 변경해야 할 때마다 마이그레이션을 사용한다.
새로운 엔티티를 추가하거나 기존 엔티티에 새로운 필드를 추가할 때
기존 테이블의 필드 유형을 변경하거나 제약 조건을 추가할 때
관계를 변경하거나 새로운 관계를 추가할 때
이러한 경우에는 데이터베이스 스키마를 변경하기 위해 SQL 명령을 직접 실행하거나, ORM 도구를 사용하여 이 변경 사항을 반영하는 마이그레이션 파일을 생성하고 실행한다.
마이그레이션은 데이터베이스 스키마의 버전 관리에 도움을 준다. 개발 중에는 여러 번의 스키마 변경이 필요할 수 있으며, 이러한 변경 사항을 마이그레이션 파일로 기록하여 팀원들과 공유하고, 버전 관리 시스템(Git 등)을 통해 관리할 수 있다.
마이그레이션을 통해 스키마 변경을 안정적으로 관리할 수 있다. 데이터베이스의 스키마가 변경되더라도 기존 데이터의 무결성을 보장하면서 변경 사항을 적용할 수 있다. ORM을 사용하면 데이터베이스 스키마 변경에 따른 코드 수정도 간편하게 처리할 수 있다.
프로덕션 환경에서도 마이그레이션을 사용하여 스키마 변경을 안전하게 적용할 수 있다. 배포 과정에서 새로운 마이그레이션을 실행하여 데이터베이스의 스키마를 최신 상태로 유지할 수 있다. 이는 시스템의 안정성과 호환성을 유지하는 데 중요하다.