Node.js 운영/개발 환경별 프로퍼티 설정하기

어떻게 하면 운영환경과 개발환경 환경변수를 깔꼼하게 관리할 수 있을까? 하는 고민을 하면서 이것저것 찾아보다가 env-cmd 를 사용하는 것이 내가 바라는 방식에 가장 잘 맞을 것 같아서 한번 정리해 보았다.

설치

npm i -D env-cmd

환경변수 설정

프로젝트 루트 경로에 .env-cmdrc 파일 생성하고 환경변수를 각각 개발/운영환경에 맞게 작성한다.

{
    "common": {
        "ENV_PROP1": "값1",
        "ENV_PROP2": "값2"
    },
    "dev": {
        "db_url": "mariadb://127.0.0.1:3306/dbname",
        "dp_user": "test",
        "dp_psssword": "test"
    },
    "prod": {
        "db_url": "mariadb://xxx.xxx.xxx.xxx:3306/dbname",
        "dp_user": "test1",
        "dp_psssword": "test2"
    }
}

js 파일로 프로퍼티를 관리할수도 있다. 파일명은 .env-cmdrc.js 로 하면 된다.

module.exports = Promise.resolve({
    common: {
        ENV_PROP1: '값1',
        ENV_PROP2: '값2'
    },
    dev: {
        db_url: 'mariadb://127.0.0.1:3306/dbname',
        dp_user: 'test',
        dp_psssword: 'test'
    },
    prod: {
        db_url: 'mariadb://xxx.xxx.xxx.xxx:3306/dbname',
        dp_user: 'test1',
        dp_psssword: 'test2'
    }
});

package.json scripts 부분에 적용하기

요런식으로 node 실행전에 env-cmd 로드하고자 하는 환경변수를 추가해 주면 된다.

"scripts": {
    "start": "env-cmd -e common,prod node index.js",
    "start:dev": "env-cmd -e common,dev nodemon index.js"
}

테스트 index.js

console.log(`env ENV_PROP1 : ${process.env.ENV_PROP1}`); // 값1
console.log(`env db_url : ${process.env.db_url}`); // prod, dev 에 따라 값 변경됨