1. 해당 경로에 config 폴더와 파일을 생성
entities 폴더 생성 및 각각 Entity 작성한다. 그리고 migration:generate시에 생성되는 파일을 담기위해 폴더 생성한다.
typeorm-cli.config.ts에 내용 작성
import { DataSource } from 'typeorm';
import { ConfigService } from '@nestjs/config';
import { config } from 'dotenv';
config();
const configService = new ConfigService();
export default new DataSource({
type: 'mysql',
host: configService.get<string>('DB_HOST'),
port: configService.get<number>('DB_PORT'),
username: configService.get<string>('DB_USERNAME'),
password: configService.get<string>('DB_PASSWORD'),
database: configService.get<string>('DB_NAME'),
entities: ['src/entities/*.ts'],
migrations: ['src/migrations/*.ts'], // generate한 파일을 직접 지정해 줘도 된다
migrationsTableName: 'migrations',
});
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { Users } from './entities/Users';
import { ConfigModule, ConfigService } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: 'mysql',
host: configService.get<string>('DB_HOST'),
port: configService.get<number>('DB_PORT'),
username: configService.get<string>('DB_USERNAME'),
password: configService.get<string>('DB_PASSWORD'),
database: configService.get<string>('DB_NAME'),
entities: [Users],
synchronize: false,
// !!! synchronize는 비어있는 데이터 베이스에 데이터 입력시
// ture로 사용해서 데이터 베이스 테이블을 생성하고
// 다시 false로 돌려놓는다. !!!
}),
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
npm run start:dev
{
...
"scripts": {
...
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --dataSource ./src/config/typeorm-cli.config.ts",
"migration:generate": "npm run typeorm migration:generate ./src/migrations/migrations",
"migration:run": "npm run typeorm migration:run",
...
}
...
}
처음에 설정했던 config 폴더의 typeorm-cli.config.ts위치가 다르다면 "typeorm"의 --dataSource ./src/config/typeorm-cli.config.ts" 위치를 수정하면 된다.
만들었던 migrations폴더위치가 다르면 "migration:generate"의 ./src/migrations/migrations 코드를 바꿔주면 된다. 현재 폴더의 위치는 ./src/migrations다
변경 사항이 존재하는 entitiy를 수정한다.
변경사항이 존재해야만 migration:generate이 정상적으로 실행된다.
npm run migration:generate
npm run migration:run
* 변경사항이 존재하지 않으면 migration:generate 실행되지 않음
* synchronize 옵션은 항상 신경쓰자
* npm run migration:run 시에 충돌이 발생할 수 있으므로 Migrations 파일의 충돌하는 부분을 수정하자