src/.env
DB_HOST= 'localhost'
DB_PORT= '5432'
DB_USER= 'USERNAME'
DB_PASSWORD= 'PASSWORD'
DB_NAME= 'DATABASE'
npm install --save @nestjs/config
@nestjs/config 패키지 설치 후
src/config/orm.config.ts
import { registerAs } from '@nestjs/config';
import { Event } from 'src/events/event.entity';
import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
export default registerAs(
'orm.config',
(): PostgresConnectionOptions => ({
type: 'postgres',
host: process.env.DB_HOST,
port: Number(process.env.DB_PORT),
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
entities: [Event],
synchronize: true,
}),
);
src/config/orm.config.prod.ts
import { registerAs } from '@nestjs/config';
import { Event } from 'src/events/event.entity';
import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
export default registerAs(
'orm.config',
(): PostgresConnectionOptions => ({
type: 'postgres',
host: process.env.DB_HOST,
port: Number(process.env.DB_PORT),
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
entities: [Event],
synchronize: false,
}),
);
src/app/module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { EventsController } from './events/events.controller';
import { Event } from './events/event.entity';
import { EventsModule } from './events/events.module';
import { AppDummy } from './app.dummy';
import { AppJapanService } from './app.japan.service';
import ormConfig from './config/orm.config';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [ormConfig],
expandVariables: true,
}),
TypeOrmModule.forRootAsync({
useFactory:
process.env.NODE_ENV !== 'production' ? ormConfig : ormConfigProd,
}),
...
})
export class AppModule {}
ConfigModule에 isGlobal옵션 값을 true로 주게 되면, 애플리케이션 전체에서 config 환경 변수에 접근할 수 있게 된다.
주의할 점은, .env 환경변수는 isGlobal옵션과 상관 없이 globaly하게 접근 가능하다는 것
위에서 config 폴더 안에 작성한 파일은 load 옵션의 배열 안에 작성해서 import해준다.
그 아래 기존에 작성했던 TypeOrmModule.forRoot() 는 TypeOrmModule.forRootAsync()로 변경하면 이 옵션을 통해 모듈을 비동기식으로 구성할 수 있다.
useFactory프로퍼티에 삼항연산자를 통해 개발단계와 배포단계의 환경변수를 경우에 따라 적용하도록 한다.
잘 읽었습니다.