NestJS에서 환경변수를 사용하는 방법

gclee·2024년 11월 1일
0

NestJS

목록 보기
4/4
post-thumbnail

NestJS에서는 ConfigService를 사용해 환경 변수를 효율적으로 관리할 수 있습니다. 이를 통해 개발, 테스트, 프로덕션 등 다양한 환경에서 일관된 설정을 유지할 수 있습니다.

@nestjs/config 모듈 설치

먼저 @nestjs/config 모듈을 설치합니다. 이 모듈은 .env 파일을 자동으로 로드하며, dotenv 기능을 포함하고 있어 별도로 dotenv 패키지를 설치하지 않아도 됩니다.

npm install @nestjs/config

app.module.ts에 ConfigModule 등록하기

모듈을 설치한 후에는 app.module.ts 파일에 ConfigModule을 등록해주어야 합니다. 이를 통해 애플리케이션에서 ConfigModule을 사용할 수 있게 됩니다.

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: '.env'
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

사용한 옵션 설명

  • isGlobal: true로 설정하면 ConfigService를 애플리케이션 전역에서 사용할 수 있습니다. 만약 isGlobal을 설정하지 않으면 각 모듈에서 별도로 ConfigModule을 임포트 해야합니다.
  • envFilePath: 환경 변수 파일의 경로를 지정합니다. 기본값은 .env이며, 다른 파일 경로를 지정하고 싶을 때는 이 옵션을 활용합니다. 예를 들어, 테스트 환경과 프로덕션 환경에 대해 각각 .env.test.env.prod 파일을 사용할 수 있습니다.

자주 사용되는 옵션들

  • isGlobal: 전역으로 설정하여 모든 모듈에서 ConfigService를 사용할 수 있도록 합니다. 전역으로 설정하지 않으면 모듈마다 별도로 ConfigModule을 임포트해야 하기 때문에 유지보수가 어려울 수 있습니다.
  • envFilePath: 다양한 환경에 맞는 설정 파일을 적용하기 위해 경로를 지정할 때 사용됩니다. 예를 들어, 개발 환경에서는 .env.dev, 프로덕션에서는 .env.prod와 같이 다르게 설정할 수 있습니다.
  • validationSchema: 환경 변수의 유효성을 검사하기 위해 Joi 스키마를 사용합니다. 이는 필수 환경 변수가 누락되거나 잘못된 값으로 설정되는 것을 방지하는 데 유용합니다.

Joi 설치

유효성 검증을 위해 Joi를 사용하려면 다음과 같이 Joi를 설치해야 합니다.

npm install joi

설치 후 ConfigModule에서 validationSchema 옵션을 활용하여 설정 파일의 값을 검증할 수 있습니다.

import * as Joi from 'joi';

ConfigModule.forRoot({
  validationSchema: Joi.object({
    PORT: Joi.number().default(3000),
    DATABASE_URL: Joi.string().required(),
  }),
});

이와 같이 설정 파일의 값을 검증하면 환경 변수와 관련된 오류를 미리 방지할 수 있습니다.

ConfigService 사용 예시

ConfigService는 애플리케이션 코드에서 환경 변수에 접근하기 위해 사용됩니다. 예를 들어, 데이터베이스 연결 설정을 관리할 때 ConfigService를 활용할 수 있습니다.

import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class DatabaseService {
  constructor(private configService: ConfigService) {
    const dbUrl = this.configService.get<string>('DATABASE_URL');
    console.log(`Database URL: ${dbUrl}`);
  }
}

위 코드에서 ConfigService를 통해 DATABASE_URL 환경 변수를 가져와 데이터베이스 설정에 사용할 수 있습니다.

0개의 댓글