
Node.js 프로젝트의 package.json 스크립트에서 환경 변수를 설정하는 방법은 크게 세 가지가 있습니다. 운영체제마다 환경 변수 설정 문법이 다르기 때문에, 이를 통합하여 관리하는 cross-env 패키지 사용이 가장 널리 권장됩니다. 또한, 보안과 관리를 위해 .env 파일을 활용하는 방법도 자주 사용됩니다.
1. cross-env를 이용한 환경 변수 설정 (가장 추천)
cross-env는 윈도우, macOS, 리눅스 등 모든 운영체제에서 동일한 명령어로 환경 변수를 설정할 수 있게 해주는 패키지입니다. 이 도구를 사용하면 팀원들이 각기 다른 운영체제를 사용하더라도 스크립트 실행에 문제가 없습니다.
설치
먼저 프로젝트에 cross-env 패키지를 개발 의존성으로 추가합니다.
npm install --save-dev cross-env
# 또는
yarn add --dev cross-env
package.json 스크립트 예시
package.json 파일의 scripts 섹션에 cross-env를 사용하여 환경 변수를 정의합니다. 여러 변수를 설정할 때는 공백으로 구분합니다.
{
"name": "my-app",
"version": "1.0.0",
"scripts": {
"start": "cross-env NODE_ENV=production PORT=8080 node app.js",
"dev": "cross-env NODE_ENV=development PORT=3000 node app.js",
"test": "cross-env NODE_ENV=test CUSTOM_VAR=testValue jest"
},
"devDependencies": {
"cross-env": "^7.0.3"
}
}
사용 방법
정의된 스크립트를 실행하면 cross-env가 운영체제에 맞게 환경 변수를 적용합니다.
npm run start
# 또는
npm run dev
애플리케이션 내에서 환경 변수 접근
Node.js 애플리케이션에서는 process.env 객체를 통해 설정된 환경 변수 값에 접근할 수 있습니다.
// app.js
console.log('현재 환경:', process.env.NODE_ENV);
console.log('서버 포트:', process.env.PORT);
console.log('사용자 정의 변수:', process.env.CUSTOM_VAR);
2. 운영체제별 직접 설정 (비추천)
cross-env
를 사용하지 않고 각 운영체제에 맞는 문법으로 직접 환경 변수를 설정할 수도 있습니다. 하지만 이 방법은 운영체제 간 호환성 문제 때문에 권장되지 않습니다.
macOS / 리눅스
VAR_NAME=value 형식으로 변수를 설정합니다.
{
"scripts": {
"start": "NODE_ENV=production PORT=8080 node app.js"
}
}
윈도우 (CMD)
set VAR_NAME=value 형식으로 변수를 설정하며, 여러 변수를 설정할 때는 &&를 사용해 명령어를 연결합니다.
{
"scripts": {
"start": "set NODE_ENV=production&& set PORT=8080&& node app.js"
}
}
3. .env 파일을 활용한 환경 변수 관리
민감한 정보(예: API 키, 비밀번호)나 다수의 환경 변수를 체계적으로 관리하고 싶다면 .env 파일을 사용하는 것이 좋습니다. 이 방법은 dotenv 패키지와 함께 사용됩니다.
설치
dotenv 패키지를 개발 의존성으로 설치합니다.
npm install --save-dev dotenv
# 또는
yarn add --dev dotenv
.env 파일 생성 및 관리
프로젝트의 최상위 경로에 .env 파일을 생성하고 환경 변수를 KEY=VALUE 형태로 작성합니다.
NODE_ENV=development
PORT=3000
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=mysecretpassword
package.json 스크립트 예시
이 방법에서는 스크립트 자체에 변수를 직접 설정하지 않고, dotenv가 .env 파일의 변수를 process.env에 로드하도록 합니다.
{
"scripts": {
"start": "node app.js"
}
}
애플리케이션에서 환경 변수 사용
진입점 파일(예: app.js)의 가장 상단에 require(‘dotenv’).config()를 추가하여 .env 파일의 내용을 불러옵니다.
// app.js
require('dotenv').config();
console.log('현재 환경:', process.env.NODE_ENV);
console.log('서버 포트:', process.env.PORT);
console.log('데이터베이스 호스트:', process.env.DB_HOST);
이 방법을 사용하면 코드와 설정이 분리되어 유지보수가 용이하고, .gitignore
파일에 .env
를 추가하여 민감한 정보가 Git 저장소에 노출되는 것을 방지할 수 있습니다.
결론 및 추천
- 가장 좋은 방법은 cross-env를 사용하는 것입니다. 운영체제 호환성을 보장해 팀 프로젝트에 특히 유용합니다.
- 민감한 데이터나 많은 변수를 관리할 경우, dotenv와 .env 파일을 함께 사용하는 것을 강력히 추천합니다. 이는 보안과 코드 관리에 큰 이점을 제공합니다.
- 프로젝트의 특성과 팀의 상황에 맞춰 적절한 방법을 선택하는 것이 중요합니다.