.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