[Node.js] dotenv와 config 파일로 환경변수 관리하기
![[Node.js] dotenv와 config 파일로 환경변수 관리하기](/content/images/size/w1920/2024/12/crossenv-1.jpg)
1. .env
파일과 config.js
의 역할
.env
파일: 환경 변수들이 정의된 파일이다. 일반적으로 각 개발 환경(개발, 테스트, 프로덕션)에 따라 환경 변수를 저장하여, 설정 값들을 코드에 하드코딩하는 것을 피하고 유연하게 환경을 관리할 수 있게 해준다.config.js
파일: 환경 변수들을 로드하고 사용하는 데 필요한 로직을 포함한 파일이다.config.js
파일을 통해.env
파일에 정의된 환경 변수를 쉽게 가져와서 사용할 수 있다.
2. .env
파일 설정
.env
파일에는 중요한 환경 변수들이 저장된다. 예를 들어 데이터베이스 접속 정보나 서버 포트 같은 정보를 담고 있다. 예시는 다음과 같다.
NODE_PORT=3000
DB_HOST=localhost
DB_PORT=3306
DB_NAME=mydatabase
DB_USERNAME=root
DB_PASSWORD=password123
이렇게 .env
파일에 환경 변수를 정의하면, 이 값들을 코드에서 사용할 수 있게 된다.
3. dotenv
로 환경 변수 로드하기
환경 변수를 Node.js 애플리케이션에서 사용할 수 있게 하려면, dotenv
모듈을 사용해야 한다. dotenv
는 .env
파일의 내용을 읽어와서 process.env
객체에 추가해주는 역할을 한다.
dotenv
설치
먼저 dotenv
를 설치해야 한다.
npm install dotenv
dotenv
를 설치한 후에, 애플리케이션 내에서 이를 사용하여 환경 변수를 로드할 수 있다.
4. config.js
파일: 환경 변수 관리
import dotenv from 'dotenv';
dotenv.config(); // .env 파일 로드
// 필수 값 확인 및 디폴트 값 처리 함수
function required(key, defaultValue = undefined) {
const value = process.env[key] || defaultValue;
if (value === undefined) {
throw new Error(`Key ${key} is undefined`);
}
return value;
}
export const config = {
host: {
port: parseInt(required("NODE_PORT", 8080)),
},
db: {
host: required("DB_HOST"),
port: parseInt(required("DB_PORT")),
database: required("DB_NAME"),
user: required("DB_USERNAME"),
password: required("DB_PASSWORD"),
charset: required("DB_CHARSET")
},
};
4.1. 코드 설명
dotenv.config()
:.env
파일을 읽어서 환경 변수들을process.env
객체에 로드한다.- 이를 통해
.env
파일에 정의된 값들을 코드에서 쉽게 참조할 수 있게 된다.
required(key, defaultValue)
함수:- 특정 환경 변수가 필수인지 여부를 확인하고, 해당 변수가 설정되어 있지 않으면 오류를 발생시킨다.
- 이 함수는 환경 변수가 존재하지 않는 경우 에러 메시지를 출력하며, 만약
defaultValue
가 제공되었다면 이를 대신 사용한다. - 예를 들어,
NODE_PORT
가 설정되어 있지 않다면 디폴트 값인8080
을 사용할 수 있도록 설정되어 있다.
- 환경 변수 구성 객체
config
:config.host.port
:NODE_PORT
환경 변수를 가져오며, 없을 경우 디폴트 값으로8080
을 사용한다.config.db
: 데이터베이스 관련 설정들로, 데이터베이스 연결을 위해 필요한 정보를 환경 변수로부터 로드한다.
4.2. required
함수의 중요성
required
함수는 환경 변수가 반드시 필요할 경우, 해당 변수가 설정되어 있지 않을 때 에러를 발생시키는 중요한 역할을 한다. 이를 통해 잘못된 설정으로 인해 애플리케이션이 실행 중 오류가 발생하는 것을 방지할 수 있다.
5. app.js
에서 환경 변수 사용하기
app.js
파일에서는 config.js
로부터 로드한 환경 변수를 사용하고 있다. 이를 통해 서버 포트 설정과 같은 중요한 설정을 코드에 직접 하드코딩하지 않고, 환경 변수를 통해 동적으로 설정할 수 있게 된다.
app.js
코드
import express from "express";
import dotenv from "dotenv";
import figlet from "figlet";
import { logger } from "#util/logger.js";
import { config } from "#config/config.js";
const app = express();
// dotenv를 통해 환경 변수 로드
dotenv.config();
// 서버 실행
app.listen(config.host.port, () => {
figlet("NYAONGLAB", (err, data) => {
if (err) {
logger.error(`Something wrong with figlet.. , ${err}`);
}
logger.info(`
${data}
Server is running on port ${config.host.port}`);
});
});
5.1. 코드 설명
dotenv.config()
:- 사실
config.js
에서 이미dotenv.config()
를 호출하여 환경 변수를 로드하고 있으므로app.js
에서 이 줄은 생략해도 무방하다. 그러나 중복 호출은 큰 문제가 되지는 않는다.
- 사실
config.host.port
:config
객체를 통해 포트를 가져와서 서버를 시작한다. 이를 통해.env
파일에 정의된 포트로 서버를 구동할 수 있게 된다.
- 서버 시작 시 메시지 출력:
figlet
을 사용하여 텍스트 아스키 아트를 출력하며, 서버가 성공적으로 실행되었음을 로그에 기록한다.config.host.port
를 사용하여 실행 중인 포트를 표시한다.
6. 마무리
Node.js에서 .env
파일과 config.js
파일을 사용하면 환경 변수들을 쉽게 관리하고, 코드의 가독성과 유지보수성을 높일 수 있다. .env
파일에 중요한 설정을 저장하고, dotenv
를 통해 이를 로드함으로써, 다양한 환경(개발, 테스트, 프로덕션)에서도 설정을 유연하게 관리할 수 있다.
또한, config.js
파일을 통해 이러한 환경 변수들을 잘 정의하고 관리하면, 코드를 보다 명확하게 유지할 수 있으며, 누락된 환경 변수에 대해 명시적으로 오류를 처리할 수 있게 된다.
댓글