Process.env 와 dotenv 라이브러리

싱클베어·2022년 2월 14일
1

Process.env 와 dotenv 라이브러리

2주 전에 진행했던 미니 블로그 만들기 프로젝트에서 공통적으로 지적받은 사항이 아래와 같은 내용이었다.

...위와같이 db정보가 public repository에 노출되면 좋지 않습니다. 이 경우 환경변수로 관리해주는것이 보안상으로 더 좋습니다.

혹은,

민감한 정보는 .env 파일로 분리하여 별도로 관리하는것이 좋을 것 같습니다.

로그인에 사용되는 jwt 를 sign 하고, verify 하는 키를 모두 일반 string 으로 지정하여 사용하고 있다. 데이터베이스 주소, 계정 정보, 포트 모두 string 값이다. 이러한 민감한 정보들을 가려주기 위해 dotenv 라이브러리를 추천받았다.

Process.env

먼저 위와같은 정보들을 저장하는 방법으로 별도 파일로 빼는 방법도 있지만, 실제 서비스가 돌아가고 있는 OS에 환경 변수로 저장할 수 있다.
node를 열고 내장 자바스크립트 객체 process.env를 실행해보면, Windows 환경 기준 아래와 같은 목록이 표시된다.

> process.env
{
  ALLUSERSPROFILE: 'C:\\ProgramData',
  APPDATA: 'C:\\Users\\shjin\\AppData\\Roaming',
  CHROME_CRASHPAD_PIPE_NAME: '\\\\.\\pipe\\crashpad_33872_ULSZAQIJPXMNQZNG',
  
  ...
  
  OS: 'Windows_NT',
  Path: 'C:\\Python310\\Scripts\\;C:\\Python310\\;C:\\Users\\shjin\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\shjin\\AppData\\Roaming\\npm',
  PATHEXT: '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW;.CPL',
  PROCESSOR_ARCHITECTURE: 'AMD64',
  PROCESSOR_IDENTIFIER: 'Intel64 Family 6 Model 158 Stepping 10, GenuineIntel',
  PROCESSOR_LEVEL: '6',
  PROCESSOR_REVISION: '9e0a',
  ProgramData: 'C:\\ProgramData',
  ProgramFiles: 'C:\\Program Files',
  'ProgramFiles(x86)': 'C:\\Program Files (x86)',
  ProgramW6432: 'C:\\Program Files',

  ...

  VSCODE_GIT_IPC_HANDLE: '\\\\.\\pipe\\vscode-git-a5cb7bb0da-sock',
  GIT_ASKPASS: 'c:\\Users\\shjin\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass.sh',
  VSCODE_GIT_ASKPASS_NODE: 'C:\\Users\\shjin\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe',
  VSCODE_GIT_ASKPASS_EXTRA_ARGS: '--ms-enable-electron-run-as-node',
  VSCODE_GIT_ASKPASS_MAIN: 'c:\\Users\\shjin\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass-main.js'

어디서 많이 본 내용이다 했는데, 알고보니 [제어판 > 시스템 > 시스템 속성 > 고급 탭 > 환경 변수...] 선택시 보이는 페이지이다. 별도 파일에 저장하는 것은 여전히 유출의 위험이 있기때문에, OS레벨에 숨겨두는 것으로 생각된다.

dotenv 사용하기

환경 변수를 파일에 저장할 수 있는 라이브러리이다. dotenv 라이브러리는 디폴트로 현재 디렉토리에 위치한 .env 파일로부터 환경 변수를 읽는다. 필요한 환경 변수를, 아래와 같은 key=value 형태로 나열하여 저장해두면 된다.

// config.env
DB_HOST = localhost
DB_USER = root
DB_PASS = Pas$w0rd

node 커맨드를 이용하여, 애플리케이션 구동 시 dotenv/config 값을 넘겨 곧바로 환경 변수로 사용할 수 있다.

node -r dotenv/config index.js

외부로 노출되서는 안되는 값들을 좀 더 안전하게 사용해보자.


참고 URL

Node.js에서 환경 변수 다루기 - process.env

dotenv로 환경 변수 관리하기

profile
안녕하세요.

0개의 댓글