Search

dotenv 환경변수 설정

.env 환경변수 설정시 node.js 코딩 방식에 따라 다소 차이가 존재함

.env 설정

일반적으로 node_modules폴더가 위치한 root 폴더에 존재하며 키=값 형태로 설정값을 저장함
DB_HOST=localhost DB_USER=user DB_PASSWORD=!y8745 DB_DATABASE=dbname
Bash
복사

CommonJS

app.js
// CommonJS Import 방식 const express = require("express"); const app = express(); // dotenv 호출 const dotenv = require("dotenv"); dotenv.config(); // dotenv.config({ path: "/path/.env" });
TypeScript
복사
보통 위와 같이 코드가 작성 되며 dotenv.config(); 선언 하기 전에
.env에서 설정한 proccess.env.[환경변수명] 호출하게 되면 안되므로 유의 필요

ES Module

require대신 import 이용하는 방식에서는 약간의 차이가 발생함
우선 ES모듈 방식으로 전환하는 방법은 아래와 같음
package.json
{ ... "type": "module", ... }
JSON
복사
위와 같이 타입을 추가해주면 되며 node가 v13 이상이어야 함.
ES모듈 형태로 전환시 유의해야 할 점은 내부 .js파일을 .mjs로 변경해주어야 됨
app.mjs
import express from 'express'; import dotenv from 'dotenv'; // express app const app = express(); // dotenv dotenv.config();
TypeScript
복사
이렇게 하면 바로 될 줄 알았지만.. 아니었음.. ㅠㅠ
db연결을 하는 부분이 먼저 로드가 되었기에 아래와 같이 값이 비어 있는걸 확인할 수 있었다
console.log({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE }); // 결과값 host: undefined user: undefined password: undefined database: undefined
TypeScript
복사
그래서 dotenv 불러오는 부분을 별도의 파일로 저장하여 import하여 해결하였음
env.mjs
import dotenv from 'dotenv'; dotenv.config();
TypeScript
복사
config/db.mjs
import '../env.mjs'; import mysql from 'mysql'; const db = mysql.createConnection({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE, }); db.connect(); export default db;
TypeScript
복사
ⓒ VeriCras 2024
vericras@gmail.com