Post

dotenv로 환경 변수 관리하기

환경 변수란?

  • 어느 환경에 배포하느냐에 따라서 다르게 설정해야 하는 항목은 보통 운영 체제 레벨에서 환경 변수를 통해 관리

  • DB password나 API key와 같은 인증 정보는 공개된 코드 저장소에 올리면 안 되기 때문에 환경 변수로 저장해놓고 사용하는 것이 일반적이다.

환경 변수 접근

Node.js에서 환경 변수에 접근할 때는 process.env라는 내장 자바스크립트 객체를 사용

1
2
3
4
5
6
7
8
9
10
11
$ node
Welcome to Node.js v14.15.0.
Type ".help" for more information.
> process.env.USER
'dale'
> process.env.HOME
'/Users/dale'
> process.env.LANG
'en_US.UTF-8'
> process.env.API_KEY
undefined

환경 변수 설정

node 명령어 앞에 환경 변수를 키=값 형태로 명시

1
2
3
4
5
6
7
$ API_KEY=abc DB_PASSWORD=1234 node
Welcome to Node.js v14.15.0.
Type ".help" for more information.
> process.env.API_KEY
'abc'
> process.env.DB_PASSWORD
'1234'

이렇게 Node.js 프로세스 레벨에서 설정해준 환경 변수는 해당 프로세스가 살아있는 동안에만 유효하며 프로세스를 종료하면 사라진다.

export 키=값, Windows에서는 SET 키=값를 이용해서 환경 변수를 설정

1
2
3
4
5
6
7
8
9
$ export API_KEY=abc
$ export DB_PASSWORD=1234
$ node
Welcome to Node.js v14.15.0.
Type ".help" for more information.
> process.env.API_KEY
'abc'
> process.env.DB_PASSWORD
'1234'

터미널 세션 레벨에서 설정한 환경 변수는 Node.js 프로세스를 종료하고 새로운 프로세스를 실행하더라도 동일한 환경 변수 값을 얻을 수 있다.

dotenv 설치

1
npm i dotenv

파일 형식

1
2
3
DB_HOST = localhost;
DB_USER = root;
DB_PASS = s1mpl3;

디렉토리에 위치한 .env 파일로부터 환경 변수를 읽어낼 수 있다.

환경 변수는 키=값의 형식으로 작성한다.

이렇게 .env 파일에 저장해놓은 환경 변수들을 dotenv 라이브러리를 이용하여 process.env에 설정할 수 있다.

사용

1
2
3
require("dotenv").config();

console.log(process.env.MONGODB_ACCOUNT);


.env 파일로부터 값을 가져올 경우 dotenv를 불러온 뒤 process.env.키 로 사용한다.


1
2
3
4
const dotenv = require("dotenv");
dotenv.config({ path: ".env.domain" });

console.log(process.env.PROXY_DOMAIN);

env.이름 파일에서 값을 가져와야 하는 경우 dotenv를 불러온 뒤 path를 설정하여 경로를 지정한다.

.env.local

HOST address IP를 적용해야 하는 경우라면 .env.local 파일을 생성하고 HOST=[대충 ip주소] 를 입력하면 npm run start 시 자동 적용된다.

node 단에서는 dotenv 라이브러리를 사용하지 않아도 .env.local 값을 잘 가져온다.

Next.js 환경에서는 앱 렌더링 전 호출되는 getStaticProps() 함수 안에서 함수로서 호출할 때 .env.local 값을 잘 가져온다.

getStaticProps() 함수를 통해 콘솔을 찍어보면 앱 컴파일 후 node 단에서 이너 함수가 호출되는 듯하다.

리액트에서 환경 변수를 사용하려면

리액트 앱에서 환경 변수를 사용하려면 마찬가지로 process.env를 사용하면 된다.

대신 .env 파일에서 변수명 앞에 REACT_APP_를 붙여줘야 리액트 내부에서 인식할 수 있다.

환경 변수는 앱을 빌드할 때 적용된다.

즉 환경 변수를 수정했다면 런타임 환경에서는 바로 적용할 수 없고 실행 중인 서버를 다시 시작해야 한다.

참고사이트

Node.js에서 환경 변수 다루기 (process.env)
dotenv로 환경 변수 관리하기
NodeJS 환경 변수 설정
사용자 지정 환경 변수 추가

This post is licensed under CC BY 4.0 by the author.