-
DOTENV로 환경변수를 따로 관리하기Node.js 2024. 2. 1. 13:44
1. 환경변수란?
환경변수란 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임
1.1 환경변수가 필요한 이유1
어떤 기관의 대표 번호로 전화를 하고 내가 원하는 부서를 말하면 그에 맞게끔 전화가 연결되는 경험을 해봤을 것이다.
만약에 대표 번호가 없다면 어떻게 될까?
해당 기관의 모든 부서에 전화를 하며 내가 원하는 부서를 찾아야 할 것이다.
환경 변수가 필요한 이유 또한 이와 비슷하다.
환경 변수는 프로세스가 어떠한 작업을 할 때 필요로 하는 정보를 손쉽게 접근/처리할 수 있도록 해주는 것이다.
위의 전화 예시를 살펴보면, 대표 번호라는 환경 변수는 여러 부서에 대한 정보를 손쉽게 접근할 수 있도록 해주는 것이다.
출처 : https://gliver.tistory.com/43
1.2 환경변수가 필요한 이유2
데이터 베이스의 비밀번호나 서드파티 서비스의 API 키와 같이 민감한 인증정보를 (개발자도구, github 등에) 노출시키지 않기 위해.
출처 : https://www.daleseo.com/js-node-process-env/
2. dotenv 패키지
Node.js 라이브러리에는 환경변수를 관리하기 위한 패키지가 있다.
2.1 설치하기
npm install dotenv --save
배포 후에도 환경변수들을 사용할 수 있어야 하므로 --save 옵션으로 설치한다.
https://www.npmjs.com/package/dotenv
2.2 임포트
util 폴더에 dotenv.js 파일을 만들어 임포트했다. 따로 export할 필요는 없다.
// util/dotenv.js //es6의 경우 import dotenv from "dotenv/config"; //CommonJS의 경우(node default) require('dotenv').config()
index.js 파일에서 해당 모듈을 임포트.
// index.js 또는 앱이 구동되는 파일 import "./util/dotenv.js";
임포트는 가급적 다른 코드가 나타나기 전에 시행한다.
환경변수 세팅을 위한 설정인데, 임포트가 제대로 되기 전에 해당 변수를 사용하는 경우를 막기 위해서다.
ES6에서 dotenv.js 파일로 임포트 파일을 구분하는 이유도 같다.
(CommonJS의 경우 그냥 index.js에서 바로 임포트해도 되는듯하다. 확인은 안 해봄)
index.js에서 바로 임포트 하는 경우,
환경변수가 config를 통해 불러와지기 전에 다음 코드가 실행되는 경우가 발생하는 듯하다.
import문이 'import from "dotenv"에서 import from "dotenv/config"'로 변경되며 해결됐을 것 같지만,
확실하게 하기 위해 나도 파일을 분리했다.
출처 : https://www.daleseo.com/js-node-process-env/
2.3 .env파일 만들기
루트 폴더에 .env파일을 만들고 설정할 환경변수들을 입력해준다.
#.env 파일 # pocketbase PB_URL=서버 주소 PB_ADMIN_EMAIL=이메일 PB_ADMIN_PASSWORD=패스워드
포켓베이스를 진행 중인 프로젝트에 적용해보려고
포켓베이스가 실행되고 있는 주소와 관리자 정보를 환경변수로 숨겨두었다.
2.4 process.env로 환경변수 접근하기
process.env는 Node에서 기본 내장된 전역객체로 별도의 import없이 사용할 수 있다.
환경 변수에 접근할 때 사용한다.
const pb = new PocketBase(process.env.PB_URL); // 관리자 계정으로 로그인 export async function adminLogin() { const authData = await pb.admins .authWithPassword(process.env.PB_ADMIN_EMAIL, process.env.PB_ADMIN_PASSWORD) .then((result) => { console.log("Login Result:", result); }) .catch((err) => { console.log("Login error:", err); }); return authData; }
process.env를 통해 .env 파일에서 설정한 환경변수들에 접근해
포켓베이스 서버와 관리자 정보를 받아오는 코드를 작성했다.
'Node.js' 카테고리의 다른 글
스크랩|CommonJS/ES6 방식으로 Node.JS 모듈 다루기 (0) 2024.01.31 Express-Handlebars 템플릿 엔진 사용하기 (0) 2024.01.05 Pug로 HTML문서 작성하기 (0) 2023.12.18 Express.js] pug(jade)/ejs/handlebar 템플릿 설치 및 사용하기 (0) 2023.12.15 Express.js] 여러 정보를 한번에 export하는 라우터 만들기 (0) 2023.12.12