본문 바로가기

[NestJS] ConfigModule이란?

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

옵션 용도
cache boolean 액세스 가 느릴 수 있으므로 에 저장된 변수와 관련하여 메서드 의 성능을 향상시키기 위해 전달된 options 객체 process.env의 속성을 설정할 수 있다.
isGlobal boolean 다른 곳에서도 환경 변수를 쉽게 불러와 사용하기 위해서 ConfigModule을 global module로 만들어준다.
ignoreEnvFile boolean env 파일을 사용하고 싶지 않을 때 설정
ignoreEnvVars boolean  
envFilePath string | string[] 기본적으로 패키지는 응용 프로그램의 루트 디렉터리에서  .env 파일을 찾는다.
encoding string  
validate (config: Record<string, any>) => Record<string, any>  
validationSchema any 환경변수 유효성을 검사
validationOptions Record<string, any> options 객체를 전달하여 이러한 동작을 변경
load Array<ConfigFactory>  
expandVariables boolean 환경 변수 확장을 활성화

 


참조 : https://velog.io/@kakasoo/Nest%EC%97%90%EC%84%9C-ConfigModule-TypeORM-%EC%93%B0%EA%B8%B0

 

Nest.js에 ConfigModule 설정

이번 글은 짧은 내용을 다룬다. 아마 dotenv를 사용하다가 Nestjs와 ConfigModule을 사용하려던 사람들은 시행착오를 많이 겪을 것이다. 사실 TypeORM을 써서 발생하는 문제는 아닌데, 이런 상황을 주로

velog.io

참조 : https://wikidocs.net/158584

 

6.3 Nest에서 제공하는 Config 패키지

앞 절에서는 dotenv 패키지를 직접 사용하는 방법을 살펴보았습니다. 그런데 Nest는 dotenv를 내부적으로 활용하는 @nestjs/config 패키지를 제공합니다. ...

wikidocs.net

참조 : https://docs.nestjs.com/fundamentals/dynamic-modules#config-module-example

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac

docs.nestjs.com

참조 : https://darrengwon.tistory.com/965

 

dotenv 대신 @nestjs/config을 사용해야하는 이유 + 활용

docs.nestjs.com/techniques/configuration Documentation | NestJS - A progressive Node.js framework Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progr..

darrengwon.tistory.com

'📖 TIL > NestJS & TypeScript' 카테고리의 다른 글

[TS] 타입스크립트(TypeScript)  (0) 2022.05.24
[NestJS] MVC 디자인 패턴  (0) 2022.04.01
[TypeScript] TypeORM  (0) 2022.02.10
[NestJS] NestJS와 폴더구조  (0) 2022.02.09