Devhyun

메뉴

현재 화면 위치

데브현 메인 블로그 포스트

타이틀

NodeJS 환경 변수 설정

2020.01.04
핫한 길다란

애플리케이션을 다양한 환경에서 테스트를 하거나 배포를 합니다.
DB 커넥션, 외부 API 연동과 같은 정보들은 환경별로 다르기 때문에 매번 변경해줘야 하는 번거로움이 있습니다.

NodeJS에서는 시스템에 다양한 환경변수를 설정할 수 있는 데요,
이 환경변수에 따라 개발과 운영 환경을 구분하여 관리 할 수 있어요 😀

process.env

Node로 실행한 파일에는 process라는 변수에 다양한 정보가 담겨있습니다.

{ 
  ...
  LANG: 'ko_KR.UTF-8',
  LOCALAPPDATA: 'C:\\Users\\Administrator\\AppData\\Local',
  LOGONSERVER: '\\\\INTEL-I5',
  NODE: 'C:\\Program Files\\nodejs\\node.exe',
  NODE_EXE: 'C:\\Program Files\\nodejs\\\\node.exe',
  NPM_CLI_JS:
   'C:\\Program Files\\nodejs\\\\node_modules\\npm\\bin\\npm-cli.js',
  npm_config_access: '',
  ...
}

환경 변수에 특정한 값을 설정해 보겠습니다.

윈도우 / set NODE_ENV=test
리눅스 / export NODE_ENV=test

기존과 다르게 NODE_ENV라는 값이 새롭게 추가된것을 확인할수 있어요.
이 데이터를 코드 내부에서 언제든지 사용할 수 있습니다.

{ 
  ...
  LANG: 'ko_KR.UTF-8',
  LOCALAPPDATA: 'C:\\Users\\Administrator\\AppData\\Local',
  LOGONSERVER: '\\\\INTEL-I5',
  NODE: 'C:\\Program Files\\nodejs\\node.exe',
  NODE_ENV: 'test',
  ...
}

간단하게 express 서버를 만들어서 브라우저에서 확인해 봅시다.
아래와 같은 코드를 작성하면 set NODE_ENV의 데이터에 따라 화면이 다르게 랜더링 되는걸 확인할 수 있어요 🍀

import express from "express";

const app = express();
let env = "운영환경";

if (process.env.NODE_ENV === "test") {
  env = "테스트환경";
} else if (process.env.NODE_ENV === "dev") {
  env = "개발환경";
}

app.get("/", (req, res) => {
  res.send(env);
});

app.listen(3000);

res.png

dotenv

위에서 살펴보았던 환경변수를 활용하면 코드 내부에 IF문으로 다양한 정보를 유동적으로 처리할 수 있습니다.
하지만, 코드 내부에 외부와 연동되는 정보를 담다보면 민감한 정보를 여러개의 파일에서 산발적으로 관리해야한다는 문제점이 있습니다.

또한, 내 운영서버 정보를 Github에 업로드한다면 누구든지 쉽게 접근할 수 있는 서버가 되겠죠.. 🙉
때문에 별도의 파일로 각종 정보를 운영환경에 따라 별도의 파일로 관리해야할 필요가 있습니다.

dotenv를 사용하면 쉽게 환경 구축이 가능합니다 🌼

먼저 설치를 해주세요.

npm i dotenv --save

NODE_ENVproduction일 경우 운영환경이므로 .env파일을, 그 외 경우는 .env.dev파일에 있는 데이터를 환경변수에 담아 process.env로 접근해서 사용할 수 있습니다.

먼저, 프로젝트의 루트 폴더에 .env.dev파일과 .env파일을 생성해주세요.

📄 .env.dev

id=nodejs
password=hello

📄 .env

id=express
password=hi

이제 process.env.idprocess.env.passowrd를 사용할 수 있습니다.
애플리케이션에서 사용해 보겠습니다.

📄 app.js

import express from "express";
import dotenv from "dotenv";
import path from "path";

const app = express();

dotenv.config({
  path: path.resolve(
    process.cwd(),
    process.env.NODE_ENV == "production" ? ".env" : ".env.dev"
  )
});

app.get("/", (req, res) => {
  res.send(`아이디:${process.env.id} 비밀번호: ${process.env.password}`);
});

app.listen(3000);

dotenv.config의 옵션으로 path에 어떤 파일을 사용할건지 적어주면되는데, 각 환경에 따라 사용하는 파일을 다르게 지정하였습니다. 더 다양한 환경을 사용하는 경우 별도의 함수로 작성해주셔도 됩니다.

환경변수가 production이 아닌 경우

윈도우 / set NODE_ENV=devlopment
리눅스 / export NODE_ENV=devlopment

image.png

환경변수가 production인 경우

윈도우 / set NODE_ENV=production
리눅스 / export NODE_ENV=production

image.png

app.js의 코드는 수정하지 않았지만 환경변수에 따라 값이 다르게 적용되는걸 확인하실수 있습니다 !

gitignore

깃허브를 사용하고 계신다면 실제 운영환경에서 돌아가는 정보는 업로드 되지 않게 해야겠죠?
.gitignore 파일에 .env파일을 추가해주면 간단합니다

📄 .gitignore

# Logs
logs
*.log
npm-debug.log*

# dotenv environment variables file
.env

# Dependency directories
node_modules/

마치며

NodeJS에서 환경변수 설정과 Dotenv 사용에 대해 간단하게 정리해 보았습니다.
만약에, Spring을 사용하신다면 profile에 대해 알아보세요 👍

0개의 댓글

로그인을 하시면 댓글을 작성할 수 있어요 !

연관 포스트 (5건)

목록으로 가기