node js 환경의 CLI 도구는 .env.local 을 읽지 못한다.

eeensu·2025년 8월 20일
0

Javascript

목록 보기
40/41

개요

drizzle-kit 라이브러리를 통해 neon db의 config를 구현하면서 DATABASE_KEY를 .env.local 에 저장하여 데이터베이스를 연결하고자 했다. 그런데 .env.local 에 저장한 DATABASE_KEY 를 읽지 못했다. 그래서 .env.local.env로 바꿨더니 그제서야 읽어서 연결이 되었다. 왜 이러는지 궁금해져서 한번 알아보고자 한다.




원인

사실 원인 자체는 알고 있던 내용이다. Node.js는 node환경에서 실행되는 CLI 도구 (예, npm, drizzle-kit, prisma, tsx 등)들은 .env.local을 자동으로 읽는 기능이 내장되어 있지 않다. 이러한 파일을 읽기 위해선 dotenv 라이브러리 같은 외부 도구가 필요했다. 알고 있던 내용이긴 했지만 나의 문제가 이것이 원인이었던 줄은 몰랐다.



CLI 도구는 .env 파일만을 읽는 경우가 많다.

CLI 도구는 Node.js 위에서 돌아가는 프로그램이지만, 보통 자체적으로 dotenv를 내장하거나, 또는 .env 경로를 정해진 룰로만 읽는다고 한다.

예를 들어

  • drizzle-kit은 .env만 읽는다.
  • dotenv-flow 같은 걸 쓰면 .env.local도 조건부로 읽지만, 기본 설정까진 아니다.


.env.local 은 next, vite 등의 프레임워크에서만 지원해주는 친구다!

말그대로다. 대부분의 node js cli 나 다른 프레임워크에서는 처리되지 않는다고 한다.

next.js 를 예로 들면, 아래의 env 파일 로딩 순서를 제공한다. 내부적으로 dotenv 를 여러번 불러서 .env.local -> .env 순으로 병합한다.

하지만 일반적인 CLI 나 node 스크립트는 이런 처리를 하지 않는다! 애초에 프레임워크가 아니기 때문이다.

.env.local     
.env.development
.env.production
.env


해결법?

사실 매우 간단하다. local 을 뺴고 그냥 .env로 바꾸면 된다.
혹은, dotenv 로딩을 직접 추가하면 된다.

import dotenv from 'dotenv'
dotenv.config({ path: '.env.local' })

console.log(process.env.DB_API_KEY)
profile
안녕하세요! 프론트엔드 개발자입니다! (2024/03 ~)

0개의 댓글