마이그레이션을 사용하면 데이터베이스 스키마 변경을 제어하고 추적할 수 있습니다.
이를 통해 어떤 변경 사항이 적용되었는지 명확히 알 수 있으며, 실수나 문제 발생 시 쉽게 문제를 추적하고 수정할 수 있습니다.
마이그레이션은 일반적으로 변경 사항을 되돌릴 수 있는 기능을 제공합니다.
이를 통해 잘못된 변경이 있을 경우 쉽게 롤백하여 이전 상태로 복구할 수 있습니다.
데이터베이스 스키마 변경 사항을 버전으로 관리할 수 있습니다.
이를 통해 다양한 버전의 스키마를 유지하고 필요에 따라 특정 버전으로 되돌릴 수 있습니다.
마이그레이션은 여러 개발 환경(개발, 스테이징, 프로덕션 등)에서 일관된 스키마를 유지하도록 도와줍니다.
모든 환경에서 동일한 마이그레이션 파일을 적용함으로써 데이터베이스 구조가 일관되게 유지됩니다.
데이터베이스 구조를 복잡하게 변경해야 할 때, 마이그레이션 도구를 사용하면 복잡한 SQL 문을 안전하게 적용할 수 있습니다.
예를 들어, 테이블 구조를 변경하거나 인덱스를 추가하는 작업을 안전하게 수행할 수 있습니다.
TypeORM을 사용하여 PostgreSQL 데이터베이스 마이그레이션을 적용하는 방법을 설명하겠습니다.
TypeORM은 데이터베이스 마이그레이션을 지원하며, 이를 통해 스키마 변경을 쉽게 관리할 수 있습니다.
먼저 TypeORM과 PostgreSQL 드라이버를 설치합니다.
npm install @nestjs/typeorm typeorm pg
Nest.js 애플리케이션에서 TypeORM을 설정하려면,
app.module.ts 파일에 TypeORM 모듈을 추가합니다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { YourEntity } from './your.entity';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'yourusername',
password: 'yourpassword',
database: 'yourdatabase',
entities: [YourEntity],
synchronize: false, // true로 설정하면 자동으로 동기화됩니다. 마이그레이션 사용 시 false로 설정
}),
// 다른 모듈들
],
})
export class AppModule {}
TypeORM CLI를 사용하여 마이그레이션 파일을 생성합니다.
TypeORM CLI를 설치하고 마이그레이션 파일을 생성할 수 있습니다.
npm install typeorm -g
마이그레이션 파일을 생성하려면 다음 명령어를 사용합니다.
typeorm migration:create -n MigrationName
위 명령어는 src/migration 폴더에 MigrationName이라는 이름의 마이그레이션 파일을 생성합니다.
생성된 마이그레이션 파일을 열어 데이터베이스 변경 사항을 작성합니다.
예를 들어, 테이블을 생성하는 마이그레이션 파일은 다음과 같습니다.
import { MigrationInterface, QueryRunner, Table } from 'typeorm';
export class CreateUserTable1618220978495 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(
new Table({
name: 'user',
columns: [
{
name: 'id',
type: 'int',
isPrimary: true,
isGenerated: true,
generationStrategy: 'increment',
},
{
name: 'name',
type: 'varchar',
},
{
name: 'email',
type: 'varchar',
isUnique: true,
},
{
name: 'password',
type: 'varchar',
},
],
}),
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable('user');
}
}
위 파일에서는 up 메서드에서 테이블을 생성하고, down 메서드에서 테이블을 삭제합니다.
마이그레이션 파일을 작성한 후, 마이그레이션을 실행하여 데이터베이스에 변경 사항을 적용합니다.
typeorm migration:run
이 명령어는 up 메서드의 내용에 따라 데이터베이스에 변경 사항을 적용합니다.
마이그레이션을 롤백하려면, 다음 명령어를 사용하여 마지막 마이그레이션을 되돌립니다.
typeorm migration:revert
이 명령어는 down 메서드를 실행하여 데이터베이스 변경 사항을 롤백합니다.
이 과정을 통해 Nest.js 애플리케이션에서 PostgreSQL 데이터베이스의 마이그레이션을
안전하게 관리하고 적용할 수 있습니다.