TypeORM에서 Entity의 수정 사항을 데이터베이스에 적용하기

웅로그·2023년 5월 15일
0
post-custom-banner

개발을 하다보면 DB 테이블 구조가 바뀌는 경우가 있다. 이럴 때 ORM을 통해서 변경된 구조를 어떻게 DB에 적용해줄 수 있을까? TypeORM을 기준으로 설명해보겠다.

package.json 수정

DB 수정을 위해선 마이그레이션 파일을 생성해야 한다. 이 마이그레이션 파일을 통해 변경사항을 DB에 적용해준다. 그러기 위해 우선 package.json에 다음 스크립트를 추가하자.

"scripts": {
  "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js"
}

ormconfig.json 파일 생성

프로젝트 루트 디렉토리에 ormconfig.json 파일을 생성한다. 해당 파일은 typeORM이 데이터베이스에 접근할 수 있도록 해주는 설정 파일이다.

{
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "your_username",
  "password": "your_password",
  "database": "your_database",
  "entities": ["dist/**/*.entity{.ts,.js}"],
  "migrations": ["dist/migrations/*{.ts,.js}"],
  "cli": {
    "migrationsDir": "src/migrations"
  }
}

위 예시에서 your_username, your_password, your_database를 실제 데이터베이스 연결 정보로 대체해야 한다.

마이그레이션 파일 생성 및 실행

마이그레이션을 해줄 마이그레이션 파일을 생성한다.
npm run typeorm migration:generate -- -n <migration_name>
migration_name에 원하는 파일명을 입력하자.
생성된 마이그레이션 파일은 src 폴더의 migration 폴더 안에 있다. (migration 폴더는 자동으로 생성됨)

생성된 마이그레이션 파일 예시

import {MigrationInterface, QueryRunner} from "typeorm";

export class updateDB11684164312232 implements MigrationInterface {
    name = 'updateDB11684164312232'

    public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`CREATE TABLE \`tent\` (\`tent_id\` varchar(36) NOT NULL, \`camping_type\` varchar(255) NOT NULL, \`residual_quantity\` int NOT NULL, \`weekday_prices\` int NOT NULL, \`weekend_prices\` int NOT NULL, \`campground_id\` varchar(255) NOT NULL, \`campgroundIdCampgroundId\` varchar(36) NULL, PRIMARY KEY (\`tent_id\`)) ENGINE=InnoDB`);
        await queryRunner.query(`ALTER TABLE \`tent\` ADD CONSTRAINT \`FK_7766209273a5724cd3530f98921\` FOREIGN KEY (\`campgroundIdCampgroundId\`) REFERENCES \`campground\`(\`campground_id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`);
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`ALTER TABLE \`tent\` DROP FOREIGN KEY \`FK_7766209273a5724cd3530f98921\``);
        await queryRunner.query(`DROP TABLE \`tent\``);
    }

}

up 메서드가 데이트베이스를 업데이트하는 메서드이고 down 메서드가 변경사항을 다시 롤백하는 메서드이다.

데이터베이스를 업데이트하려면 다음 명령어를 실행한다.
npm run typeorm migration:run

데이터베이스를 이전 상태로 되될리려면 다음 명령어를 실행한다.
npm run typeorm migration:revert

profile
프론트엔드 개발자입니다.
post-custom-banner

0개의 댓글