[Node] 개발 및 배포용 환경변수 관리하기

1 minute read


서버사이드 어플리케이션을 개발할때에는 데이터베이스 접속 사용자 계정정보, 비밀키 등 노출되서는 안되는 비밀정보나 실행에 필요한 파일들의 경로, 접속 주소같은 배포환경과는 다른 정보들을 관리해야한다. 이것들을 코드에 하드코딩해서 관리하는 것은 절대로 올바른 방법이 아니다. 개발이 완료된 후 배포시마다 코드를 일일이 변경해줘야 하는 번거로움이 생길뿐더러 Github같은 원격저장소에 코드가 올라가는 경우 더더욱 그렇다. Node를 이용한 개발환경에서 환경변수를 관리하는 방법 중 .env파일을 통한 방법을 알아보자.


.env파일을 통한 환경변수 관리

실행에 필요한 환경변수를 .env파일로 만들어서 관리할 수 있다. .env파일을 만들고 다음과 같이 관리할 환경변수들의 내용을 작성한다. 이 때 이 .env파일은 .gitignore에 추가되어 있어야 한다.

.env

PORT=8080
DB_USER="user01"
DB_PASSWORD="mypassword00"

이 환경변수들을 편리하게 이용하기 위해서 dotenv라는 npm 모듈을 설치한다. npm 홈페이지에서 자세한 내용을 확인할 수 있다. (dotenv)

$ npm install dotenv

이제 dotenv모듈을 이용해서 환경설정을 불러오고 사용할 수 있다.

const dotenv = require('dotenv')

dotenv.config()

console.log(process.env.PORT)         //80
console.log(process.env.DB_USER)      //user01
console.log(process.env.DB_PASSWORD)  //mypassword00


다음과 같이 환경변수를 관리하는 모듈을 따로 만들어서 필요한 곳에서 모듈을 로드해서 사용하는 방법이 가장 깔끔하다.

./src/config/index.js

const dotenv = require('dotenv')
dotenv.config()

module.exports = {
    port: process.env.PORT || 8080,
    db: {
        user: process.env.DB_USER || "user01",
        password: process.env.DB_PASSWORD || "mypassword00"
    }
}

./src/app.js

const config = require('./config')

const port = config.port              //80
const dbUser = config.db.user         //user01
const dbPasswrd = config.db.password  //mypassword00


개발, 배포용 환경변수

어플리케이션을 개발할 때와 배포할 때는 어플리케이션에 필요한 환경변수가 다를 것이다. 이 때 이것을 npm 명령어를 이용해서 편하게 관리할 수 있는 방법이 있다.

먼저 .env.dev 파일과 .env.prod파일을 만들어서 개발용 환경변수, 배포용 환경변수를 따로 관리한다. 그리고 npm script에 다음과 같이 개발용 어플리케이션 실행 명령어와 배포용 실행 명령어를 정의한다.

...

"scripts": {
  "start": "cp ./.env.dev ./.env && nodemon app.js",
  "start:production": "cp ./.env.prod ./.env && node app.js",
  "test": "echo \"Error: no test specified\" && exit 1"
},

...

start 스크립트를 실행했을 때는 .env.dev 파일의 내용을 .env파일로 복사해서 어플리케이션을 실행하고 start:production 스크립트를 실행했을 때는 .env.prod 파일의 내용을 .env파일로 복사해서 어플리케이션을 실행할 수 있다. 필요에 따라서 여러가지 .env파일을 만들어서 관리하고 명령어도 해당하는 단계별로 만들어서 관리할 수 있다.


References

https://engineering.huiseoul.com/react-prod-staging-dev-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-8eb6bbccddfe

Categories:

Updated: