환경 변수, config파일 그리고 .env
환경변수 (Environment Variable)
환경 변수
는 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임입니다. (출처: 위키백과) 실행할 파일이 들어있는 폴더의 경로를 환경변수에 미리 설정해 놓음으로써 cmd
와 bash
등과 같은 환경에서 실행하려는 프로그램이 현재 작업 경로에 있지 않아도 어디서든 실행할 수 있습니다. 하지만 경로뿐만 아니라 node.js
등과 같은 서버 환경에서 필요한 설정들을 저장하는 용도로 사용될 수 있습니다.
config.json파일의 단점
아래와 같이 필요한 설정마다 config.json
같이 설정파일을 구성할 수도 있습니다.
1 | { |
config
파일은 절대적으로 github
와 같은 버전 관리 시스템에 commit
되지 않도록 신경 써주어야합니다. 문제는 여기서 발생합니다. 점점 mysql
, redis
등 과 같은 다양한 설정들이 필요해지면서 redis-config.json
이나 mysql-config.json
처럼 git
에 commit
되지 않도록 .gitignore
을 설정해주는 등 신경 써줘야하는 일이 많아지게 됩니다 .즉, 개발자가 실수할 가능성이 증가하기 때문입니다.
환경 변수를 이용하는 경우
환경 변수의 경우 전용 서버에 환경 변수 설정후 node.js
의 경우 process.env.NAME
과 같은 방법으로 접근할 수 있습니다. 이 경우 개발자가 git
에 commit
이 되지 않도록 신경 써줘야하는 부담감을 줄이고 실수할 가능성을 줄일 수 있습니다. Heroku
와 같이 클라우드 서비스에 배포하는 경우 배포과정에서 아래의 사진처럼 쉽게 웹사이트에서 환경변수를 설정할 수 있어, 설정이 바뀔때 마다 번거로운 배포 과정없이 간단한 설정을 통해 변경할 수 있는 장점이 있습니다.
.env 설정
node.js
에서 dotenv
를 통해 직접 환경 변수를 설정하지 않고도 .env
파일에서 설정 값을 불러와 process.env.NAME
의 형태로 환경변수로 사용할 수 있도록 할 수 있습니다. 물론 .env
파일도 config
파일과 마찬가지로 버전 관리 시스템에 공유되지 않도록 신경 써줘야하는 번거로움이 존재합니다. 하지만 dotenv
의 공식문서만 보더라도 다중 .env
파일을 가지는 않을것 을 강력히 권고하고 있듯이, .env
파일은 하나만 가지므로 한번만 .gitignore
에 추가해주면 됩니다.
1 | PORT=80 |
.env
파일은 위와 같이 구성할 수 있고 아래와 같이 간단한 설정을 통해 process.env.NAME
의 형태로 접근 할 수 있습니다.
자바스크립트를 사용하는 경우 :
1 | require('dotenv').config(); |
타입스크립트를 사용하는 경우 :
1 | import * as dotenv from 'dotenv'; |
위의 .env
를 불러오는 코드는 가능한 코드의 최상단의 위치시켜주는 것을 권장합니다. 그렇지 않고 .env
파일이 process.env
에 로드 되기 전에 접근하게 되면 undefined
가 됩니다.