데이터베이스, ORM/TypeORM

[TypeORM] 데이터베이스 마이그레이션

SparkIT 2025. 5. 25. 12:56

타입스크립트 사용 시 TypeORM 공식 문서에 따른 명령어는 에러가 발생하여 사용하지 못한다.

 

Migrations | typeorm

Once you get into production you'll need to synchronize model changes into the database. Typically, it is unsafe to use synchronize: true for schema synchronization on production once you get data in your database. Here is where migrations come to help. A

orkhan.gitbook.io

 

공식문서 상 명령어

npx typeorm-ts-node-esm migration:generate ./src/migrations/update-post-table -d ./src/data-source.ts

 

 

 

수정한 명령어

npm install --save-dev ts-node

npm install --save-dev typescript @types/node
npx ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:generate src/migrations/migration -d src/data-source.ts

이때 migration:generate 뒤에 오는 파라미터는 경로라고 나오는데 이상한게 마지막 경로는 이름에 넣어짐.

ex) src/migrations/migration

--> 마이그레이션된 파일이 src/migrations/ 하위에 생기고 '숫자-migration'이런 식으로 이름 뒤에 하이픈 migration이렇게 들어감. 즉 마지막 경로는 파일명 뒤에 하이픈과 추가되는 것임.

 

반영

 npx ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js migration:run -d ./src/data-source.ts

 

 

데이터소스 예시

// src/data-source.ts

import { DataSource } from 'typeorm';
import * as dotenv from 'dotenv';
import 'reflect-metadata';

dotenv.config({ path: `.env.${process.env.NODE_ENV}` });

export default new DataSource({
	type: 'mysql',
	host: process.env.MYSQL_HOST,
	port: Number(process.env.MYSQL_PORT),
	username: process.env.MYSQL_USERNAME,
	password: process.env.MYSQL_PASSWORD,
	database: process.env.MYSQL_DATABASE,
	entities: ['src/**/*.entity.ts'],
	migrations: ['src/migrations/*.ts'],
	logging: true,
});