-
Notifications
You must be signed in to change notification settings - Fork 0
TypeORM config 설정 ( typeorm‐naming‐strategies)
cdj2073 edited this page Dec 14, 2023
·
1 revision
npm i @nestjs/typeorm typeorm mysql2
- app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
- synchronize
- 엔티티를 통해 오버라이드되며 테이블이 생성됨
- 개발 과정에서는 스키마의 용이한 수정을 위해
true
로 사용하지만 - 배포 버전에서는 반드시
false
여야 한다.- 누군가가 엔티티를 수정하면 테이블이 변경됨!
- logging
- 쿼리를 로그에 찍어준다.
- autoLoadEntities
위처럼 모듈에 DB 정보가 노출된다.
이전에는 dotenv
패키지를 사용했는데 Nest에서는 @nestjs/config
를 대신 사용한다.
npm i @nestjs/config
- app.module.ts
@Module({
imports: [
ConfigModule.forRoot({isGlobal: true})
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: 'mysql',
host: configService.get<string>('DB_HOST'),
port: configService.get<number>('DB_PORT'),
username: configService.get<string>('DB_USER'),
password: configService.get<string>('DB_PASSWORD'),
database: configService.get<string>('DB_DATABASE'),
entities: [EventEntity],
synchronize: false,
logging: true,
}),
}),
// module 추가
],
...
})
- forRoot -> forRootAsync
- Nest 웹 어플리케이션이 bootstraping될 때 DB의 동적 구성을 허용할 수 있어야 하는데 TypeOrmConfigService가 동적 구성되지 않고 타이밍을 못맞춰 설정이 안될 경우가 있으므로 Async 사용
@Entity()
export class EventEntity extends commonEntity {
@Column('varchar', { length: 64 })
title: string;
@Column()
startDate: Date;
@Column()
endDate: Date;
@Column()
isJoinable: boolean;
@Column('varchar', { length: 255 })
announcement: string;
}
Nest에서는 camelCase를, MySQL에서는 snake_case를 사용한다.
=> typeorm-naming-strategies
패키지를 이용해 쉽게 변환할 수 있다.
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
type: 'mysql',
host: configService.get<string>('DB_HOST'),
port: configService.get<number>('DB_PORT'),
username: configService.get<string>('DB_USER'),
password: configService.get<string>('DB_PASSWORD'),
database: configService.get<string>('DB_DATABASE'),
entities: [Event],
synchronize: true,
logging: true,
namingStrategy: new SnakeNamingStrategy(),
}),
}),
- Week1 - Day01
- Week1 - Day02
- Week1 - Day03
- Week1 - Day04
- Week2 - Day01
- Week2 - Day02
- Week2 - Day03
- Week2 - Day04
- Week3 - Day01
- Week3 - Day02
- Week3 - Day03
- Week3 - Day04
- Week4 - Day01
- Week4 - Day02
- Week4 - Day03
- Week4 - Day04
- Week4 - Day05
- Week5 - Day01
- Week5 - Day02
- Week5 - Day03
- Week5 - Day04
- Week6 - Day01
- Week6 - Day02