[NestJS] ConfigModule이란?

·2023년 1월 27일
0

🦁️ ConfigModule이 뭔데?


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의 종류로는 다음과 같은 것들이 있다.

옵션용도
cacheboolean액세스 가 느릴 수 있으므로 에 저장된 변수와 관련하여 메서드 의 성능을 향상시키기 위해 전달된 options 객체 process.env의 속성을 설정할 수 있다.
isGlobalboolean다른 곳에서도 환경 변수를 쉽게 불러와 사용하기 위해서 ConfigModule을 global module로 만들어준다.
ignoreEnvFilebooleanenv 파일을 사용하고 싶지 않을 때 설정
ignoreEnvVarsboolean
envFilePathstringstring[]
encodingstring
validate(config: Record<string, any>) => Record<string, any>                
validationSchema                                              any환경변수 유효성을 검사
validationOptionsRecord<string, any>options 객체를 전달하여 이러한 동작을 변경
loadArray
expandVariablesboolean환경 변수 확장을 활성화


참고자료
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

profile
뉴비는 문서화를 습관화 해보자

0개의 댓글