Node.js에서 dotenv 라이브러리를 활용한 환경 변수 설정하는 방법
Node.js 애플리케이션 개발 시, 환경 변수를 효과적으로 관리하는 것은 보안과 설정의 유연성을 유지하는 데 중요합니다. `dotenv` 라이브러리는 이러한 환경 변수를 쉽게 관리할 수 있도록 도와줍니다. 이 글에서는 `dotenv`를 사용하여 환경 변수를 설정하는 방법에 대해 알아보겠습니다.
dotenv 설치
먼저, `dotenv` 라이브러리를 프로젝트에 추가해야 합니다. 터미널을 열고 다음 명령어를 실행하세요.
npm install dotenv
.env 파일 생성
프로젝트의 루트 디렉터리에 `.env` 파일을 생성합니다. 이 파일에 환경 변수를 KEY=VALUE 형식으로 추가합니다. 예를 들어, 데이터베이스 연결 정보를 설정할 수 있습니다.
DB_HOST=localhost
DB_USER=myuser
DB_PASSWORD=mypassword
DB_NAME=mydatabase
환경 변수 로드
애플리케이션의 진입점 파일(예: app.js)에서 `dotenv`를 요구하고, `.config()` 메소드를 호출하여 `.env` 파일의 환경 변수를 로드합니다.
require('dotenv').config();
이제 `process.env` 객체를 통해 환경 변수에 접근할 수 있습니다. 예를 들어, 데이터베이스 호스트 이름에 접근하는 방법은 다음과 같습니다.
const dbHost = process.env.DB_HOST;
사용 예제
데이터베이스 연결 정보를 직접 코드에 삽입한 경우
아래 코드는 데이터베이스 연결 정보를 직접 애플리케이션 코드에 포함시킨 예시입니다. 이 방법은 개발 초기 단계나 작은 프로젝트에서는 간편할 수 있지만, 보안 및 설정 관리 측면에서는 권장되지 않습니다.
// Express와 MariaDB 모듈을 불러옵니다.
const express = require('express');
const mariadb = require('mariadb');
// Express 애플리케이션을 생성합니다.
const app = express();
const port = 3000;
// MariaDB 연결 풀을 생성합니다. 이는 데이터베이스 연결을 관리하는 데 사용됩니다.
const pool = mariadb.createPool({
host: 'localhost', // 데이터베이스 서버의 호스트 이름
user: 'blueshare', // 데이터베이스 사용자 이름
password: '1111', // 사용자 비밀번호
database: 'study', // 사용할 데이터베이스 이름
port: 3307, // 데이터베이스 서버의 포트 번호 (기본 포트 3306인 경우에는 생략 가능)
connectionLimit: 5 // 연결 풀에서 유지할 최대 연결 수
});
// 루트 URL ('/')에 대한 GET 요청을 처리합니다.
app.get('/', async (req, res) => {
let conn;
try {
conn = await pool.getConnection();
const rows = await conn.query("SELECT EMP_NO, NAME FROM EMP WHERE EMP_NO = 'A0001'");
res.send(`조회 결과: ${JSON.stringify(rows)}`);
} catch (err) {
console.error('오류 발생:', err);
res.status(500).send(`오류 발생: ${err.message}`);
} finally {
if (conn) conn.end();
}
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
dotenv 활용한 외부에서 설정
실제 애플리케이션에서는 데이터베이스 연결 정보 같은 민감한 정보를 외부에서 설정하고 관리하는 것이 보안상 바람직합니다. `.env` 파일과 `dotenv` 라이브러리를 사용하면, 이 정보들을 애플리케이션 코드로부터 분리하여 보다 안전하게 관리할 수 있습니다. 아래는 `dotenv`를 활용하여 환경 변수를 설정하고 사용하는 방법을 보여주는 예시입니다.
// Express와 MariaDB 모듈을 불러옵니다.
const express = require('express');
const mariadb = require('mariadb');
// Express 애플리케이션을 생성합니다.
const app = express();
const port = 3000;
// .env 파일에 정의된 환경 변수 로드
require('dotenv').config();
// MariaDB 연결 풀을 생성합니다. 환경 변수 사용
const pool = mariadb.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
port: 3307,
connectionLimit: 5
});
// 루트 URL ('/')에 대한 GET 요청을 처리합니다.
app.get('/', async (req, res) => {
let conn;
try {
conn = await pool.getConnection();
const rows = await conn.query("SELECT EMP_NO, NAME FROM EMP WHERE EMP_NO = 'A0001'");
res.send(`조회 결과: ${JSON.stringify(rows)}`);
} catch (err) {
console.error('오류 발생:', err);
res.status(500).send(`오류 발생: ${err.message}`);
} finally {
if (conn) conn.end();
}
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
이 방식을 사용하면, 개발 환경과 프로덕션 환경 등 다양한 환경에서 애플리케이션을 유연하게 설정하고 배포할 수 있습니다. 또한, `.env` 파일은 `.gitignore`에 추가하여 소스 코드 저장소에 포함되지 않도록 하는 것이 좋습니다. 이렇게 함으로써, 민감한 정보를 보호할 수 있습니다.
참고 사이트
`dotenv` 라이브러리를 사용하면 Node.js 애플리케이션의 환경 변수 관리가 훨씬 쉬워집니다. 개발, 테스팅, 프로덕션 등 다양한 환경에서 애플리케이션을 운영할 때 환경에 따라 유연하게 설정을 변경할 수 있게 도와줍니다.
관련 이전 게시글
- Node.js 서버 생성 및 실행하는 방법
- Node.js 파일 읽기, 쓰기 방법: 동기식 vs 비동기식
- Node.js 패키지 관리자 NPM 사용법과 package.json 파일 역할
- Express에서 에러 처리하는 방법: 404와 500 에러 등
- Express 애플리케이션 보안 강화: Helmet 미들웨어 적용하기
이 글이 도움이 되셨다면 공유 부탁 드립니다.