개발 초기에는 데이터베이스 주소, Auth 토큰값 등 환경 설정파일을 직접 로직에 대입해서 사용한다. 점점 코드가 많아지고 환경설정 값을 사용하는 부분이 많으면 이를 config.js 파일로 분리해서 사용한다. 문제는 테스트/배포시 마다 config.js의 내용을 수정해야 한다는 것이다.

NodeJS에서는 development mode와 production mode를 각 각 지원한다. 이를 이용해 각 실행 모드별로 config.js를 로딩하여 테스트환경을 구성할 수 있다.

config 폴더에 환경 설정 정보를 저장하자.

/config
|- config.js
|- env
  |- all.js
  |- development.js
  |- production.js

all.js에는 development / productions mode에서 공통으로 사용하는 환경 설정 정보를 저장하고 development.js와 production.js 파일에는 각 모드에 의존적인 정보를 기록한다. config/config.js 에서는 이 두 파일을 합쳐서 전체 환경설정 정보를 만든다. 사용자는 config/config.js 파일을 로딩해서 환경설정 정보를 가져올 수 있다.

var _ = require('lodash');
 
module.exports = _.merge(
  require('./env/all.js'),
  require('./env/' + process.env.NODE_ENV + '.js') || {});
  // NodeJS 실행모드에 따라 각 각의 환경설정파일을 로딩한다.

Mocha 테스트 시 config.js 파일을 로딩하면 ./env/undefined/undefined.js 파일을 로딩할수 없다는 로그가 발생한다. 유닛테스트시 노드 실행없이 진행해서 그런 것 같으나 정확히는 모르겠다. 아무튼 ./env/*.js 로딩전에 실행모드를 체크하고 deveopment모드로 설정해 주면 문제없이 진행할 수 있다.

var _ = require('lodash');
 
if (!process.env.NODE_ENV) {
  process.env.NODE_ENV = 'development';
}
 
module.exports = _.merge(
  require('./env/all.js'),
  require('./env/' + process.env.NODE_ENV + '.js') || {});

결론은 환경설정 파일 수정없이 프로그램을 테스트하고 배포할 수 있다.

참고: https://github.com/DaftMonk/generator-angularfullstack/tree/master/templates/express/config