2주 전에 진행했던 미니 블로그 만들기 프로젝트에서 공통적으로 지적받은 사항이 아래와 같은 내용이었다.
...위와같이 db정보가 public repository에 노출되면 좋지 않습니다. 이 경우 환경변수로 관리해주는것이 보안상으로 더 좋습니다.
혹은,
민감한 정보는 .env 파일로 분리하여 별도로 관리하는것이 좋을 것 같습니다.
로그인에 사용되는 jwt 를 sign 하고, verify 하는 키를 모두 일반 string 으로 지정하여 사용하고 있다. 데이터베이스 주소, 계정 정보, 포트 모두 string 값이다. 이러한 민감한 정보들을 가려주기 위해 dotenv
라이브러리를 추천받았다.
먼저 위와같은 정보들을 저장하는 방법으로 별도 파일로 빼는 방법도 있지만, 실제 서비스가 돌아가고 있는 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 라이브러리는 디폴트로 현재 디렉토리에 위치한 .env 파일로부터 환경 변수를 읽는다. 필요한 환경 변수를, 아래와 같은 key=value
형태로 나열하여 저장해두면 된다.
// config.env
DB_HOST = localhost
DB_USER = root
DB_PASS = Pas$w0rd
node 커맨드를 이용하여, 애플리케이션 구동 시 dotenv/config
값을 넘겨 곧바로 환경 변수로 사용할 수 있다.
node -r dotenv/config index.js
외부로 노출되서는 안되는 값들을 좀 더 안전하게 사용해보자.