마이그레이션

ClassBinu·2024년 5월 21일

F-lab

목록 보기
30/65

프로덕션 레벨에서 동기화는 위험함.
그래서 마이그레이션을 씀.

마이그레이션은 데이터베이스 스키마 업데이트를 위한 단일 파일이다.
그리고 스키마 변화가 생기면 이미 존재하는 데이터베이스 구조를 업데이트 할 수 있다.

마이그레이션

마이그레이션을 생성한다.

typeorm migration:create ./path-to-migrations-dir/PostRefactoring

생성된 마이그레이션

import { MigrationInterface, QueryRunner } from "typeorm"

export class PostRefactoringTIMESTAMP implements MigrationInterface {
    async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(
            `ALTER TABLE "post" RENAME COLUMN "title" TO "name"`,
        )
    }

    async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(
            `ALTER TABLE "post" RENAME COLUMN "name" TO "title"`,
        ) // reverts things made in "up" method
    }
}

각 마이그레이션 파일에는 두 가지 메소드가 포함되어 있습니다:

up(queryRunner: QueryRunner): 이 메소드에는 마이그레이션을 수행하는 데 필요한 SQL 쿼리 또는 작업이 포함되어야 합니다.
down(queryRunner: QueryRunner): 이 메소드에는 up 메소드에서 변경한 내용을 취소하는 SQL 쿼리 또는 작업이 포함되어야 합니다. 필요할 때 마지막 마이그레이션을 되돌릴 수 있습니다

마이그레이션 실행

typeorm migration:run -- -d path-to-datasource-config

여기서 -d 옵션은 --dataSource

페이크 마이그레이션 & 롤백

typeorm migration:run --fake

typeorm migration:revert --fake

create는 자동으로 엔터티를 감지하지 않는다.

typeorm migration:generate PostRefactoring -d path-to-datasource-config

generate를 통해 차이를 자동으로 인지하고 마이그레이션을 생성한다. {TIMESTAMP}-PostRefactoring.ts

0개의 댓글