package.json 스크립트에서 환경 변수(environment variables)를 설정하는 방법

By | 9월 8, 2025
package.json 스크립트에서 환경 변수(environment variables)를 설정하는 방법

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 파일을 함께 사용하는 것을 강력히 추천합니다. 이는 보안과 코드 관리에 큰 이점을 제공합니다.
  • 프로젝트의 특성과 팀의 상황에 맞춰 적절한 방법을 선택하는 것이 중요합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다