Nest에서 제공하는 Config 패키지 라는게 있다. 이게 무엇이냐면 Nest에서 dotenv(환경변수)를 내부적으로 활용하는 패키지를 제공하는데, 이를 통해 ConfigModule을 동적으로 생성해 볼 수 있다고 한다.
요컨데 ConfigModule을 사용해 미리 env를 설정해두면 다른 모듈에서도 process.env를 통해 접근이 가능하게 되는 것이다!
우선 패키지부터 설치해보도록 하자.
$ npm i --save @nestjs/config
그 후에 app.module.ts의 @Module({ imports: [] })에 삽입하면 된다
@Module({
imports: [
///////////////////////////////////////////////////////////////////////////
// Enviroment Config // ✨ env 설정 부분
ConfigModule.forRoot({
/** env 파일 등록 */
envFilePath: '.env',
isGlobal: true,
}),
//////////////////////////////////////////////////////////////////////////
// TypeORM // ✨ env를 사용한 부분
TypeOrmModule.forRoot({
type: 'mysql',
host: `${process.env.MYSQL_HOST}`,
port: 3306,
username: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
entities: [
__dirname + '/apis/**/*.entity.*', //
],
synchronize: true,
logging: true,
}),
///////////////////////////////////////////////////////////////////////////
// Modules //
*Module
],
})
export class AppModule {}
공식문서에 따르면 정적 모듈을 가져올때와는 다르게 ConfigModule.forRoot() 메소드를 호출하는데, 이 메소드는 DynamicModule을 리턴하는 정적 메소드라고 한다.
forRoot()의 인자로 ConfigModuleOptions를 받는다는데, 이는 ConfigModule이 원하는 옵션값을 전달하여 원하는 대로 동적으로 ConfigModule을 생성하기 위함이라고 한다.
ConfigModuleOptions
의 종류로는 다음과 같은 것들이 있다.
옵션 | 값 | 용도 |
---|---|---|
cache | boolean | 액세스 가 느릴 수 있으므로 에 저장된 변수와 관련하여 메서드 의 성능을 향상시키기 위해 전달된 options 객체 process.env의 속성을 설정할 수 있다. |
isGlobal | boolean | 다른 곳에서도 환경 변수를 쉽게 불러와 사용하기 위해서 ConfigModule을 global module로 만들어준다. |
ignoreEnvFile | boolean | env 파일을 사용하고 싶지 않을 때 설정 |
ignoreEnvVars | boolean | |
envFilePath | string | string[] |
encoding | string | |
validate | (config: Record<string, any>) => Record<string, any> | |
validationSchema | any | 환경변수 유효성을 검사 |
validationOptions | Record<string, any> | options 객체를 전달하여 이러한 동작을 변경 |
load | Array | |
expandVariables | boolean | 환경 변수 확장을 활성화 |
참고자료
https://velog.io/@kakasoo/Nest%EC%97%90%EC%84%9C-ConfigModule-TypeORM-%EC%93%B0%EA%B8%B0
https://wikidocs.net/158584
https://docs.nestjs.com/fundamentals/dynamic-modules#config-module-example
https://darrengwon.tistory.com/965