728x90
dotenv 라이브러리를 이용한
환경 변수 구성에 대한 공부 기록이다.
개요
일반적으로 서비스를 개발할 때 로컬 또는 개발 환경에서 개발하고,
개발한 코드를 스테이지 서버(테스트 환경)에서 테스트한 후 배포하여 통합 테스트를 진행한다.
문제가 없다면 프로덕션 서버로 배포하는 과정을 거친다.
이렇게 다른 환경에서 프로젝트를 실행하기 때문에
실행 환경에 따라 달라지는 변수들을 지정할 필요가 있다.
이때 사용되는 변수가 환경 변수이고,
이 환경 변수를 설정해주는 역할을 하는 라이브러리가 dotenv이다.
이제 각 환경에서 dotenv를 이용해 환경변수를 설정해 보자.
dotenv
설치
$npm i -D dotenv
$npm i -D @types/dotenv
env 파일 생성
각 환경에 맞는 env 파일과 각 파일에 변수를 생성해 보자.
//.development.env
DATABASE_HOST=development
//.stage.env
DATABASE_HOST=stage
//.production.env
DATABASE_HOST=production
Node.js는 NODE_ENV라는 환경 변수를 활용하여 서버의 환경을 구분한다.
NODE_ENV는 명령어로 설정하거나 OS가 구동될 때 변수를 설정해야 한다.
윈도우 : set NODE_ENV=development
리눅스 또는 macOS : export NODE_ENV=development
package.json파일을 수정해서
npm run start:dev 명령이 수행될 때 변수를 설정할 수 있다.
"scripts":{
"start:dev" : "npm run prebuild && NODE_ENV=development nest start --watch",
}
이제 .env 파일을 NODE_ENV에 따라 읽도록 해보자.
dotenv config
Nest JS에서 dotenv를 사용해 보자.
import * as dotenv from 'dotenv';
import * as path from 'path';
dotenv.config({
path: path.resolve(
process.env.NODE_ENV === 'production'
? '.production.env'
: process.env.NODE_ENV === 'stage'
? '.stage.env'
: '.development.env',
),
});
main.ts 파일에 위의 코드를 추가해 주고,
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello() {
return process.env.DATABASE_HOST;
}
}
App Controller에서 환경 변수를 반환해 보면
정상적으로 반환된 것을 볼 수 있다.
728x90
'DevRoot' 카테고리의 다른 글
[npm] npm version(sementic versioning) (0) | 2022.12.25 |
---|---|
[npm]npm package.json (0) | 2022.10.31 |