개발을 하다보면 DB 테이블 구조가 바뀌는 경우가 있다. 이럴 때 ORM을 통해서 변경된 구조를 어떻게 DB에 적용해줄 수 있을까? TypeORM을 기준으로 설명해보겠다.
DB 수정을 위해선 마이그레이션 파일을 생성해야 한다. 이 마이그레이션 파일을 통해 변경사항을 DB에 적용해준다. 그러기 위해 우선 package.json
에 다음 스크립트를 추가하자.
"scripts": {
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js"
}
프로젝트 루트 디렉토리에 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