NodeJS 환경 변수 설정 및 cross-env 사용법

NodeJS 환경 변수 설정 및 cross-env 사용법

NodeJS API 테스트 과정에서 morgan 모듈에 대한 정보가 나오지 않도록 환경 변수를 변경하고 싶었습니다. 그래서 package.json 파일에 다음과 같은 코드를 추가했습니다.

"scripts":{
	"test":"NODE_ENV=test mocha test/users.spec.js"
}

다음으로 넘어가기 전에 환경 변수 설정에 대해 알아보겠습니다.

환경 변수 설정

보통 NodeJS를 실행할 때 NODE_ENV 값을 이용해서 실행하게 됩니다. 배포(production) 모드와 개발(development) 모드로 나눌 수 있습니다.

배포 모드 일 때에는 파일 캐싱, 에러 메세지 감추기 등 배포에 적합한 환경 설정을 합니다. 개발 모드 일 때에는 파일 캐싱 방지, 디버그를 위한 상세한 에러 메세지 보이기 등 개발에 필요한 환경 설정을 합니다.

 

이외에도 개발자가 추가로 환경변수를 설정할 수 있습니다. 저의 경우 NODE_ENV=test로 설정하여 morgan 모듈이 있는 app.js에 if문을 추가하여 test가 아닌경우 morgan 모듈에 대한 정보가 나오지 않도록 했습니다.

if (process.env.NODE_ENV !== 'test') {
    app.use(morgan('dev'));
}

이때 process.env는 LANG, NODE, NODE_EXE 등 변수에 다양한 정보가 담겨져있습니다.

위 코드로 설정하면 NODE_ENV를 찾을 수 없다는 에러가 발생했습니다. 구글링으로 해결했는데 cross-env 모듈을 사용하라는 것이었습니다.

cross-env 모듈 사용법

cross-env 모듈은 프로젝트 참여자 각각이 MacOS, Windows, Linux 등 다양한 OS 마다 환경변수를 설정하는 방법이 다르기 때문에 이것에 대한 대책을 마련한 모듈입니다.

설정은 다음과 같습니다.

//package.js
"scripts":{
	"test":"cross-env NODE_ENV=test mocha test/users.spec.js"
}

 

이렇게 설정하면 위에서 if문을 사용하여 1개의 진입점으로도 상황에 맞게 환경변수를 사용할 수 있습니다. 하지만, 환경변수같은 것은 github 등 공개적을 노출하면 보안적으로 여러 문제가 발생할 수 있습니다. 따라서, 환경변수를 관리할 수 있는 파일을 하나 만들고 그 파일은 gitignore로 숨기면 좋지 않을까 싶습니다.

환경변수 관리

저는 configs.js라는 파일을 만들어 다음과 같이 환경변수를 만들어 내보낼 수 있도록 설정했습니다.

//configs.js
const test = process.env.NODE_ENV || 'test'
module.exports = {
    test
}

//app.js
const config = require('./configs');
if (configs.test !== 'test') {
    app.use(logger('dev'));
}

이렇게 만들고 gitignore에 configs.js를 추가하면 github에는 커밋되지 않을 것입니다. 

 

 

이 글을 공유하기

댓글

Designed by JB FACTORY