node.js

실행 환경에 따른 .env 파일 분리 하는 방법

hoazzinews 2024. 12. 13. 13:24

node.js에서 .env 파일은 환경 변수를 저장하는 파일로, 주로 애플리케이션의 설정 정보나 민감한 데이터를 관리하는 데 사용됩니다. .env 파일을 사용하여 코드에서 하드코딩하지 않고, 환경별로 설정을 구분하거나 보안을 강화할 수 있습니다.

 

1. .env 파일 만들기

.env 파일은 프로젝트 루트에 만들어야 합니다.

.env 파일을 생성합니다.

 

2. 환경 변수 선언

.env 파일에 필요한 환경 변수를 선언합니다.

MEMBER_PROFILE_PATH=C:\\member\\profile\\
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=1234
DB_DATABASE=DB_MEMBER1004
DB_DATESTRINGS=true

 

3. 'dotenv' 모듈 설치

dotenv 모듈은 Node.js 환경에서 .env 파일에 저장된 환경 변수를 쉽게 로드하고 사용할 수 있게 해주는 라이브러리입니다. 주로 애플리케이션에서 환경 설정, 데이터베이스 연결 정보, API 키 등 민감한 정보를 코드에서 하드코딩하지 않고 .env 파일을 통해 관리할 때 사용됩니다.

> npm install dotenv 

 

4. .env 파일 사용하기

dotenv 패키지에서 제공하는 dotenv.config() 함수로, .env 파일에 정의된 환경 변수를 process.env 객체에 자동으로 로드합니다. 실행 파일(main.js)에 다음과 같이 코딩 합니다

const dotenv = require('dotenv');

dotenv.config();

console.log('MEMBER_PROFILE_PATH: ', process.env.MEMBER_PROFILE_PATH);
console.log('DB_HOST: ', process.env.DB_HOST);
console.log('DB_PORT: ', process.env.DB_PORT);
console.log('DB_USER: ', process.env.DB_USER);
console.log('DB_PASSWORD: ', process.env.DB_PASSWORD);
console.log('DB_DATABASE: ', process.env.DB_DATABASE);
console.log('DB_DATESTRINGS: ', process.env.DB_DATESTRINGS);

 

5. 애플리케이션 실행

애플리케이션을 실행하고 로그를 확인합니다.

> node main.js 

.env에 선언한 환경 변수가 출력됩니다.

 

.env 파일을 사용하기 위한 기본 방법에 대해서 살펴봤습니다. 이제 '로컬(local)', '개발서버(dev)', '실행서버(prod)'로 .env 파일을 분리하겠습니다.

 

6. .env 파일 추가 하기

개발서버에서 샤용되는 '.env.dev' 파일과 실행서버에서 사용되는 '.env.prod' 파일을 만듭니다.

 

'.env.dev' 파일에 개발서버 환경 변수를 선언합니다.

MEMBER_PROFILE_PATH=/member/profile/
DB_HOST=192.168.56.101
DB_PORT=3306
DB_USER=root
DB_PASSWORD=1234
DB_DATABASE=DB_MEMBER1004
DB_DATESTRINGS=true

 

'.env.prod' 파일에 실행서버 환경 변수를 선언합니다.

MEMBER_PROFILE_PATH=/member/profile/
DB_HOST=52.79.134.125
DB_PORT=3306
DB_USER=root
DB_PASSWORD=1234
DB_DATABASE=DB_MEMBER1004
DB_DATESTRINGS=true

 

6. 'cross-env' 모듈 설치

cross-env 모듈은 운영 체제에 관계없이 동일한 방식으로 환경 변수를 설정할 수 있게 해주는 도구입니다. node.js 애플리케이션에서 환경 변수를 설정할 때, 운영 체제마다 환경 변수를 설정하는 방식이 다릅니다. cross-env는 이러한 문제를 해결하고, 환경 변수를 설정하는 명령어를 OS에 관계없이 일관되게 처리할 수 있게 도와줍니다.

> npm install cross-env --save-dev 

 

7. npm에서 실행할 수 있는 커스텀 명령어 정의

 package.json 파일을 open해서 "scripts"에 명령어를 추가합니다.

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1", 
    "start:local": "cross-env NODE_ENV=local node main.js",
    "start:dev": "cross-env NODE_ENV=dev node main.js",
    "start:prod": "cross-env NODE_ENV=prod node main.js"
  },

 - start:local: 로컬 환경을 설정하고 애플리케이션을 실행하는 명령어

 - start:dev: 개발 환경을 설정하고 애플리케이션을 실행하는 명령어

 - start:prod: 실행(프로덕션) 환경을 설정하고 애플리케이션을 실행하는 명령어

 

8. 환경( NODE_ENV)에 따른 .env 파일 로드 하기

애플리케이션에서 환경 변수를 설정하고, 실행 중인 환경(NODE_ENV)에 따라 적절한 .env 파일을 로드하도록 main.js를 수정합니다.

// dotenv.config();

// console.log('MEMBER_PROFILE_PATH: ', process.env.MEMBER_PROFILE_PATH);
// console.log('DB_HOST: ', process.env.DB_HOST);
// console.log('DB_PORT: ', process.env.DB_PORT);
// console.log('DB_USER: ', process.env.DB_USER);
// console.log('DB_PASSWORD: ', process.env.DB_PASSWORD);
// console.log('DB_DATABASE: ', process.env.DB_DATABASE);
// console.log('DB_DATESTRINGS: ', process.env.DB_DATESTRINGS);

if (process.env.NODE_ENV === 'local') {
    console.log('LOCAL ENV!!');
    dotenv.config();

} else if (process.env.NODE_ENV === 'dev') {
    console.log('DEV ENV!!');
    dotenv.config({ path: path.resolve(__dirname, '.env.dev') });

} else {
    console.log('PROD ENV!!');
    dotenv.config({ path: path.resolve(__dirname, '.env.prod') });
    
}

 

9. 실행 환경에 따른 애플리케이션 실행

 - 로컬: > npm run start:local 

 - 개발서버: > npm run start:dev 

 - 실행서버: > npm run start:prod 

 

이번 시간에는 .env 파일을 실행 환경에 따라서 구분하는 방법에 대해서 살펴봤습니다.

전체 소스 첨부합니다.

nodedeploy.zip
2.07MB

'node.js' 카테고리의 다른 글

Docker를 이용한 node.js app 배포하기  (4) 2024.12.14