본문 바로가기

DevRoot

[Dotenv] dotenv를 이용한 환경 변수 구성

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