NestJS에서는 ConfigService를 사용해 환경 변수를 효율적으로 관리할 수 있습니다. 이를 통해 개발, 테스트, 프로덕션 등 다양한 환경에서 일관된 설정을 유지할 수 있습니다.
먼저 @nestjs/config 모듈을 설치합니다. 이 모듈은 .env 파일을 자동으로 로드하며, dotenv 기능을 포함하고 있어 별도로 dotenv 패키지를 설치하지 않아도 됩니다.
npm install @nestjs/config
모듈을 설치한 후에는 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를 설치해야 합니다.
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를 활용할 수 있습니다.
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 환경 변수를 가져와 데이터베이스 설정에 사용할 수 있습니다.