개발 공부/NestJS

Configuration

2023. 3. 12. 22:06
목차
  1. 개요
  2. 설치
  3. 시작하기
  4. 사용자 지정 파일 경로 설정
  5. 전역에서 모듈 사용하기
  6. ConfigService 사용하기
  7. 스키마 유효성 검증

개요

어플리케이션은 종종 다른 환경에서 실행된다. 그리고 환경에 따라 다른 구성을 사용해야 하는 경우가 있다.

Node.js 애플리케이션에서는 각 키가 특정 값을 나타내는 키-값 쌍을 포함하는 파일(.env)을 사용하여 각 환경을 나타내는 것이 일반적이다.

 

Nest에서 이 기술을 사용하는 좋은 방법은 적절한 파일을 로드하는 ConfigModule을 사용하는 것이다. 편의를 위해 Nest에서는 내부적으로 dotenv를 사용하는 기본 패키지를 제공한다.

설치

$ npm i --save @nestjs/config

 

시작하기

설치가 완료되면 ConfigModule을 가져올 수 있게 된다. 일반적으로 어플리케이션의 최상위 레벨 모듈인 AppModule에 임포트하고 forRoot() 메소드를 통해 환경 변수를 읽어올 수 있도록 하는 ConfigService 공급자를 등록한다.

사용자 지정 파일 경로 설정

기본적으로 ConfigModule 패키지는 애플리케이션의 루트 디렉터리에서 .env 파일을 찾는다. 파일의 다른 경로를 지정하려면 forRoot()에 전달하는 옵션 객체의 envFilePath 속성을 설정한다.

ConfigModule.forRoot({
  envFilePath: '.development.env',
});

 

또는 다음과 같이 여러 파일의 경로를 설정해줄 수도 있다.

ConfigModule.forRoot({
  envFilePath: ['.env.development.local', '.env.development'],
});

전역에서 모듈 사용하기

다른 모듈에서 ConfigModule을 사용하려면 모든 Nest 모듈의 표준처럼 ConfigModule을 임포트해야 한다.

또는 아래와 같이 옵션 객체의 isGlobal 속성을 true로 설정하여 전역 모듈로 선언할 수도 있다. 이 경우 루트 모듈(예: AppModule)에 로드된 후에는 다른 모듈에서 ConfigModule을 임포트할 필요가 없다.

ConfigModule.forRoot({
  isGlobal: true,
});

ConfigService 사용하기

ConfigService는 @nestjs/config 패키지에서 가져온다.

 

ConfigService에서 구성 값에 접근하려면 먼저 ConfigService를 주입해야 한다.

다른 제공자와 마찬가지로 해당 제공자를 포함하는 모듈인 ConfigModule을 사용할 모듈로 임포트해야 한다.

 

그런 다음 생성자 주입을 사용하여 주입할 수 있다.

constructor(private configService: ConfigService) {}

스키마 유효성 검증

필수 환경 변수가 제공되지 않았거나 특정 유효성 검사 규칙을 충족하지 않는 경우 어플리케이션을 시작하는 동안 예외를 발생시키는 것이 표준 관행이다. nestjs/config 패키지를 사용하면 두 가지 방법으로 이를 수행할 수 있는데, 필자는 편리한 방법인 Joi를 사용한다.

 

Joi를 사용하기 위해선 우선 설치가 필요하다.

$ npm install --save joi

 

이제 아래와 같이 forRoot() 메서드 옵션 객체의 validationSchema 속성을 통해 유효성 검사 스키마를 정의할 수 있다.

import * as Joi from 'joi';

@Module({
  imports: [
    ConfigModule.forRoot({
      validationSchema: Joi.object({
        NODE_ENV: Joi.string()
          .valid('development', 'production', 'test', 'provision')
          .default('development'),
        PORT: Joi.number().default(3000),
      }),
    }),
  ],
})
export class AppModule {}

 

Joi의 required() 메서드를 사용하여 환경(env 파일 또는 프로세스 환경)에 값이 정의되어 있어야 함을 요구할 수 있다.

이 경우 유효성 검사 단계는 환경에 변수를 제공하지 않으면 예외를 발생시킨다. 

주의할 점

더보기

키가 런타임 환경에 환경 변수로 존재하고, env 파일에 모두 존재할 때엔 런타임 환경 변수가 우선시 된다.

https://docs.nestjs.com/techniques/configuration#configuration

'개발 공부 > NestJS' 카테고리의 다른 글

Serialize 직렬화  (0) 2023.03.23
인터셉터 Interceptor  (0) 2023.03.19
파이프 Pipe  (0) 2023.03.19
예외 필터 Exception filter  (0) 2023.03.19
미들웨어 Middleware  (0) 2023.03.19
  1. 개요
  2. 설치
  3. 시작하기
  4. 사용자 지정 파일 경로 설정
  5. 전역에서 모듈 사용하기
  6. ConfigService 사용하기
  7. 스키마 유효성 검증
'개발 공부/NestJS' 카테고리의 다른 글
  • 인터셉터 Interceptor
  • 파이프 Pipe
  • 예외 필터 Exception filter
  • 미들웨어 Middleware
게으른 제이
게으른 제이
개발 관련 지식 및 다양한 정보들
게으른 제이
제이의 정보 블로그
게으른 제이
전체
오늘
어제
  • 분류 전체보기 (25)
    • 개발 공부 (22)
      • Node.js (1)
      • NestJS (10)
      • Docker (4)
      • 기타 (1)
      • Rust (1)
      • CS (4)
      • Flutter (1)
    • 기록 (2)
    • 정보 (1)
      • 일반 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • flutter
  • Cache
  • CS
  • redis
  • NestJS
  • LLM
  • Docker
  • Tool
  • error
  • Obsidian
  • DART

최근 댓글

최근 글

hELLO · Designed By 정상우.
게으른 제이
Configuration
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.