애플리케이션은 보통 서로 다른 환경에서 작동하며, 환경에 따라 다른 설정을 사용합니다. 예를 들어, 개발자의 로컬 환경과 개발된 기능을 사용자에게 배포하기 전에 테스트하는 스테이지 환경, 마지막으로 실제 운용하는 프로덕션 환경이 있을 것입니다. 각 환경에 따라 데이터베이스를 포함한 다른 설정이 사용될 수 있습니다. 이를 관리하는 좋은 방법은 설정 변수를 환경에 저장하는 것입니다.
Node.js 애플리케이션에서는 보통 .env
파일을 사용합니다. 이는 키-값 페어로 구성되며 각 키는 해당 환경의 특정 값을 나타냅니다. 서로 다른 환경에서 앱을 실행하려면 해당하는 .env
파일로 변경하면 됩니다. 예를 들면, .dev.env
, .stage.env
, .production.env
가 될 수 있을 것입니다.
Nest에서 사용되는 가장 좋은 방법은 ConfigModule
을 사용하여 적절한 .env
파일을 로드하는 것입니다. 다음과 같은 명령어를 통해 이를 설치할 수 있습니다.
$ npm i --save @nestjs/config
환경 변수 설정하기
패키지 설치가 완료됐다면 ConfigModule
을 불러올 수 있습니다. 보통 이를 루트 AppModule
로 불러온다음 .forRoot()
정적 메소드를 사용하여 제어합니다. 이를 통해 환경 변수 키/값 페어가 파싱되어 resolved됩니다.
// app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot(),
TypeOrmModule.forRoot({
type: 'mysql',
host: process.env.host,
port : Number(process.env.DB_PORT),
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
entities: [User],
synchronize: true,
})],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
위 코드는 프로젝트의 루트 디렉토리에서 .env
를 불러오며 환경 변수를 process.env
에 할당합니다.
.env
파일은 다음과 같이 구성할 수 있습니다.
// .env
DB_HOST = '127.0.0.1'
DB_PORT = 3306
DB_USERNAME = 'root'
DB_PASSWORD = 'password'
DB_DATABASE = 'database'
.env
파일에는 시크릿 키와 같이 민감한 정보가 함께 저장되는 경우가 많으므로 이를 .gitignore
파일에 추가해줘야 합니다.
커스텀 환경 변수 경로 설정
기본적으로 패키지는 .env
애플리케이션의 루트 디렉토리를 탐색합니다. 다른 환경 변수 파일 경로를 설정하려면 다음과 같이 envFilePath
를 사용할 수 있습니다.
ConfigModule.forRoot({
envFilePath: '.development.env',
});
또한 여러 .env
파일의 경로들을 설정할 수도 있습니다. 이를 동적으로 구성하는 자세한 방법은 여기를 참조해보시기 바랍니다.
ConfigModule.forRoot({
envFilePath: ['.env.development.local', '.env.development'],
});
글로벌 모드
ConfigModule
을 다른 모듈에서도 사용하고자 원한다면 이를 임포트해야 할 것입니다. 또는 다음과 같이 글로벌 모듈로 설정하여 임포트 없이 사용할 수 있습니다.
ConfigModule.forRoot({
isGlobal: true,
})
참고 자료
'개발 > NestJS' 카테고리의 다른 글
NestJS 기초 (8) 미들웨어 (0) | 2022.10.07 |
---|---|
NestJS 기초 (6) 모듈 (0) | 2022.10.04 |
NestJS 기초 (5) 프로바이더 (0) | 2022.10.04 |