TypeORM 사용중 migration 기능을 대충 본것 같아 관련한 기능을 정리해봤다.
모델 변경사항을 데이터 베이스에 동기화해야한다.
일반적으로 데이터베이스에서 데이터를 가져오면
프로덕션에서 스키마를 동기화할 때 사용하는 synchronize: true 는 안전하지 않다.
마이그레이션은 데이터베이스 스키마를 업데이트하고 기존 데이터베이스에 새로운 변경사항을 적용하기 위해
SQL 쿼리가 포함된 단일 파일이다.
import { Entity, Column, PrimaryGeneratedColum } from "typeorm"
@Entity()
export class Post {
@PrimaryGeneratedColum()
id: number;
@Column()
title: string;
@Column()
text: string
}
새로운 릴리즈가 만들어짐에 따라 sql query를 수정해야할 일이 생겼다고 가정해보자.
ALTER TABLE "post" ALTER COLUMN "title" RENAME TO "name";
이 SQL 쿼리를 실행하면 데이터베이스 스키마가 새 코드베이스와 함께 작동할 준비가 된다.
TypeORM은 이러한 SQL 쿼리를 작성하고 필요할 때 실행할 수 있는 'migration'을 제공한다.
새로운 마이그레이션 생성
새 마이그레이션을 작성하기 전에 연결 옵션을 설정하자.
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "test",
"password": "test",
"database": "test",
"entities": ["entity/*.js"],
"migrations": ["migration/*.js"],
"cli": {
"migrationsDir": "migration"
}
}
"migrations" : typeorm이 지정된 "migration" 디렉토리에서 마이그레이션을 로드할 수 있도록 지정
"cli": { "migrationsDir": "migration" } : "migration" 디렉토리 안에 새 마이그레이션을 생성하도록 지정
연결옵션을 설정하면 CLI를 사용하여 새 마이그레이션을 만들 수 있다.typeorm migration:create -n PostRefactoring
명령은 호출하면 타임스템프 + -n 뒤 명시한 이름으로 파일이 생성될 것이다.
import {MigrationInterface, QueryRunner} from "typeorm"; export class PostRefactoringTIMESTAMP implements MigrationInterface { async up(queryRunner: QueryRunner): Promise<any> { } async down(queryRunner: QueryRunner): Promise<any> { } }
up 메서드에서는 마이그레이션을 수행하는 데 필요한 코드가 포함되어야한다.
down 메서드에서는 마지막 마이그레이션을 되돌리는데 사용된다.
QueryRunner 객체를 통해 데이터베이스 작업을 실행한다.async up(queryRunner: QueryRunner): Promise<any> { await queryRunner.query(`ALTER TABLE "post" RENAME COLUMN "title" TO "name"`); } async down(queryRunner: QueryRunner): Promise<any> { await queryRunner.query(`ALTER TABLE "post" RENAME COLUMN "name" TO "title"`); // reverts things made in "up" method }
마이그레이션 실행 및 되돌리기
마이그레이션을 실행해보자
typeorm migration:run
migration:create와 migration:generate 는 .ts 파일을 생성한다.
migration:run과 migration:revert는 .js 파일에서만 동작한다.
따라서 명령을 실행하기 전에 typescript 파일을 컴파일 해야한다.
보통 typeorm과 함께 ts-node를 사용하여 .ts 파일을 실행한다.ts-node ./node_modules/typeorm/cli.js migration:run
해당 명령은 타임스템프 순서대로 모든 마이그레이션을 실행한다.
(생성된 마이그레이션의 up 메서드로 작성된 모든 SQL 쿼리가 실행된다.)
만약 되돌리고 싶다면, rever 커멘드를 사용하면 된다.
typeorm migration:revert
마이그레이션 생성
TypeORM은 스키마 변경 사항으로 마이그레이션 파일을 자동으로 생성할 수 있다.
typeorm migration:generate -n PostRefactoring
직접 쿼리를 작성할 필요가 없다.
마이그레이션 API를 사용하여 마이그레이션 하기
API를 사용하여 데이터베이스 스키마를 변경하기 위해 QueryRunner를 사용할 수 있다.
using migration api to wrtie migration
'삽질의 현장 > - TypeScript' 카테고리의 다른 글
TypeScript로 개발 할 때 유용한 라이브러리 (0) | 2019.10.12 |
---|---|
Angular 를 통해 바라본 의존성 주입 이해 (0) | 2019.10.12 |
TypeScript로 DI 구현해보기 (0) | 2019.10.12 |
의존성 주입이란 무엇인가? (0) | 2019.10.12 |
@Decorator에 대하여 알아보자 (0) | 2019.10.12 |