일반적으로 외부에 유출되면 안되는 정보들을 하드코딩하지 않고 변수를 파일을 통해 보관하고 런타임 환경에서 가져다 쓰는 방식을 쓰기 위해 dotenv패키지를 사용한다.
또한 환경에 따라 다른 변수를 사용해야 할 때도 사용하기도 한다.
이 패키지를 NestJS에서 사용하고자 하는데, dotenv 패키지를 그대로 쓰는 방법도 있지만 NestJS에서 제공하는 패키지가 존재하기 때문에 그걸 써보도록 하자.
ConfigModule
npm i --save @nestjs/config
패키지를 명령어를 이용해 설치해준다.
// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule.forRoot()],
})
export class AppModule {}
ConfigModule을 불러와서 app.module.ts에 import한다.
// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule.forRoot({ isGlobal: true })],
})
export class AppModule {}
추가로, 모든 module에서 ConfigModule을 사용하고 싶다면 isGlobal: true 옵션을 사용해준다.
// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
@Module({
imports: [ConfigModule.forRoot({ isGlobal: true })],
provdiers: [ConfigService],
})
export class AppModule {}
ConfigService를 사용하게 되면
// app.service.ts
import { ConfigService } from '@nestjs/config';
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
constructor(private readonly configService: ConfigService) {}
getHello(): string {
return this.configService.get('PORT'); // process.env.PORT와 같은 역할
}
}
ConfigService 의존성 주입을 통해 환경변수를 불러올 수 있다.
참고링크: https://docs.nestjs.com/techniques/configuration#configuration