나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2025-10-24 15:56:19

.env

dotenv에서 넘어옴


<rowcolor=#ffffff,#dddddd> 데이터 직렬화 형식과 설정 파일
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#4d5767,#4d5767><colcolor=#ffffff,#dddddd> 데이터 직렬화 형식 <colbgcolor=#4d5767,#4d5767><colcolor=#ffffff,#dddddd> 텍스트 CSV · JSON(NDJSON/JSON Lines) · XML
바이너리 flatbuffers · protobuf
설정 파일 텍스트 JSON(YAML · JSON5 · JSONC) · XML · INI(dotenv · EditorConfig · TOML) }}}}}}}}}


1. 개요2. 역사3. 원리4. 특징
4.1. 장점4.2. 단점
5. 지원
5.1. 내장 지원5.2. 라이브러리5.3. 로더
6. 파생 소프트웨어7. 기타8. 관련 문서

1. 개요

dotenv

응용 프로그램에 삽입될 환경변수(environment variable)를 담아 놓은 설정 파일. 주로 비대칭 서명키, 데이터베이스 접근 비밀번호 등 버전 관리 시스템에 커밋되면 안 되는 인증 정보를 설정하는 용도로 쓰이나, 네트워크 포트 번호, 로깅 레벨 등 정보의 민감성과 무관하게 서비스의 여러 설정을 담는 용도로도 사용할 수 있다.

Ruby 생태계의 라이브러리로 시작했으나, 현재는 언어나 분야에 무관하게 널리 받아들여져 대부분의 환경에서 범용적으로 사용할 수 있다.

2. 역사

.env 및 환경변수 설정 방법론(methodology)은 2011년 Heroku에서 발표한 The Twelve-Factor Manifesto의 III, 'Store config in the environment' 원칙에 기반한다.

2011년 David Dollarforeman#@에서 .env 파일에서 환경변수를 읽어오는 방식의 구현을 처음으로 선보였고,## 이에 영감을 받아 Brandon Keepers가 2012년 독립적인 Ruby 라이브러리를 만들게 된다.[1]

2013년 Scott Motte@npm 패키지 dotenv를 구현하며# 유명해졌다. 2014 JS.LA 컨퍼런스 발표

3. 원리

실행 가능한(빌드된) 응용 프로그램을 실행할 때, CWD(현재 디렉토리)에 .env라는 이름의 파일을 만든다. 파일명이 .으로 시작하는 이유는 Unix 환경에서 숨김 파일로 처리되기 때문이다. 개발/프로덕션 등 환경마다 다른 설정을 사용하기 위한 경우, .env가 아닌 다른 파일명을 사용하기도 한다.

해당 파일은 다음과 같이 <환경변수명>=<값> 형태의 설정을 담게 된다. 문법은 구현체마다 조금씩 다른데, 문자열 보간을 지원하는 경우도 있고 그렇지 않은 경우도 있다. 환경변수는 기본적으로 문자열만을 담을 수 있기에 정수 리터럴이나 따옴표 등은 일반적으로 필요하지 않다.
#!syntax sh
USERNAME=sephiroth
PASSWORD=1q2w3e4r

해당 응용 프로그램이 실행되었을 때, .env 파일을 읽어들여 각각의 환경변수명을 파일에 저장된 <값>으로 등록하며, 이 과정에서 이미 존재하는 환경변수가 있다면 덮어씌우지 않고 실제 프로세스에 설정된 값을 우선한다. 경우에 따라, 파일에 저장된 값으로 덮어쓰는 구현도 존재한다.

4. 특징

파일:상세 내용 아이콘.svg   환경변수로 응용 프로그램을 설정하는 방식 자체의 장단점에 대한 자세한 내용은 환경변수 문서
#!if (문단 == null) == (앵커 == null)
를
#!if 문단 != null & 앵커 == null
의 [[환경변수#s-|]]번 문단을
#!if 문단 == null & 앵커 != null
의 [[환경변수#환경변수 설정|환경변수 설정]] 부분을
참고하십시오.
.env의 기본적인 역할은 설정할 환경변수를 파일에 저장해 손쉽게 읽고 수정하기 위한 것으로, 기존의 애플리케이션이 이미 환경변수를 통한 설정 관리 방식을 채택하고 있다고 가정한다. 즉, 일반적인 설정 파일등을 사용하는 경우와 1:1로 비교하기는 어렵다. 만약 환경변수를 사용하는 방식의 장점이 필요가 없는 상황이라면, 구태여 .env를 사용할 당위성이 떨어지며, JSON이나 다른 설정 파일 포맷을 사용해도 상관이 없다. 특히 환경변수는 그 특성상 flat하기 때문에 여러 depth를 가진 복잡한 설정이 필요한 도메인에 애초에 적합하지 않다.

.env 파일은 근본적으로 환경변수에 의존하기 때문에 환경변수 자체에서 기인하는 보안적 문제 등을 근본적으로 해결할 능력은 없다. 이 경우 .env 이전에 환경변수로 시크릿을 전달하는 것 자체를 그만두고 프로덕션 수준의 secret manager 구현체 도입을 고려하는 것이 합리적이다.

4.1. 장점

4.2. 단점

5. 지원

5.1. 내장 지원

5.2. 라이브러리

5.3. 로더

6. 파생 소프트웨어

7. 기타

8. 관련 문서


[1] Foreman provides this handy feature of loading variables from .env, which works great for anything that you want to put in your Procfile. ##@[2] An analysis by the Cybernews research discovered a million publicly exposed secrets from over 58 thousand websites’ exposed environment (.env) files. (...) The analysis of the most up-to-date indexes of environment files resulted in a dataset of 1,141,004 secrets cumulatively exposed from 58,364 unique websites. #@