Node.js 환경변수 관리와 dotenv-expand 도입기

문제 상황

프로젝트 규모가 커지면서 환경변수가 30개 이상으로 늘어났다. 특히 AWS 리소스 URL들이 환경별로 달라지면서 .env.development, .env.staging, .env.production 파일마다 비슷한 패턴의 변수들이 반복됐다.

# .env.development
AWS_REGION=ap-northeast-2
AWS_S3_BUCKET=my-dev-bucket
AWS_S3_URL=https://my-dev-bucket.s3.ap-northeast-2.amazonaws.com
AWS_CLOUDFRONT_URL=https://d1234abcd.cloudfront.net

환경이 추가될 때마다 동일한 구조를 복사하다 보니 실수가 잦았고, 변경사항 반영도 번거로웠다.

dotenv-expand 도입

dotenv-expand를 사용하면 환경변수 내에서 다른 변수를 참조할 수 있다.

const dotenv = require('dotenv');
const dotenvExpand = require('dotenv-expand');

const myEnv = dotenv.config();
dotenvExpand.expand(myEnv);

이제 .env 파일에서 변수 참조가 가능하다.

# .env.development
ENV=dev
AWS_REGION=ap-northeast-2
AWS_S3_BUCKET=my-${ENV}-bucket
AWS_S3_URL=https://${AWS_S3_BUCKET}.s3.${AWS_REGION}.amazonaws.com
API_ENDPOINT=${AWS_S3_URL}/api

결과

환경별로 달라지는 부분은 ENV 변수 하나로 제어하고, 나머지는 조합 규칙으로 관리하게 됐다. 새 환경 추가 시 변경 포인트가 명확해지고, 오타로 인한 장애도 줄었다.

다만 너무 복잡한 참조 체인은 디버깅을 어렵게 만들 수 있어서, 2단계 이상 중첩은 지양하기로 했다.

Node.js 환경변수 관리와 dotenv-expand 도입기