본문으로 건너뛰기
AZ Tools

.env 파일 파서

단일·이중 따옴표, 멀티라인 값, 인라인 주석을 정확히 처리하는 .env 파서. JSON·YAML·shell·Dockerfile ENV·Netlify TOML로 내보내기.

.env 파일 내용
파싱 결과 (10 개)
키값인라인 주석
DATABASE_URL
postgres://user:pass@localhost:5432/mydb
DB_POOL_SIZE
10
APP_NAME
My App
APP_VERSION
1.0.0
APP_DEBUG
true
OAUTH_PRIVATE_KEY
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAxYz...
-----END RSA PRIVATE KEY-----
ROOT_DIR
/opt/app
LOG_DIR
${ROOT_DIR}/logs
EMPTY
∅
PORT
3000
default port
내보내기 형식:
출력
{
  "DATABASE_URL": "postgres://user:pass@localhost:5432/mydb",
  "DB_POOL_SIZE": "10",
  "APP_NAME": "My App",
  "APP_VERSION": "1.0.0",
  "APP_DEBUG": "true",
  "OAUTH_PRIVATE_KEY": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAxYz...\n-----END RSA PRIVATE KEY-----",
  "ROOT_DIR": "/opt/app",
  "LOG_DIR": "${ROOT_DIR}/logs",
  "EMPTY": "",
  "PORT": "3000"
}

변수 확장(${VAR})은 리터럴로 유지됩니다 — 해석되지 않음. 필요하면 런타임 확장기를 추가하세요.

사용법

  1. .env 파일 붙여넣기 (또는 '예시 불러오기'로 지원 문법 확인).
  2. 파싱된 키/값/주석 테이블 검토.
  3. 내보내기 형식을 선택해 복사. 멀티라인 값은 그대로 유지(YAML은 |, Docker는 JSON 이스케이프).

자세한 설명

펼치기

실제 .env 파일에 들어 있는 경우들을 제대로 다루는 파서입니다. 작은따옴표와 큰따옴표, RSA 개인키처럼 여러 줄에 걸친 값, 값 뒤에 붙은 # 주석, 셸 스크립트에서 넘어온 export 접두어, 등호 뒤에 아무것도 없는 키까지 처리합니다. 파싱이 끝나면 표에 모든 키와 값, 그리고 뒤에 붙은 주석이 나오고, 결과는 테스트 픽스처용 JSON, Helm 차트용 YAML, 셸용 export 줄, Dockerfile용 ENV 지시문, Netlify 환경 컨텍스트용 TOML 블록으로 내보낼 수 있습니다.

제대로 짚어 둘 부분은 따옴표입니다. 두 종류의 따옴표가 하는 일이 다르기 때문입니다. 큰따옴표 안에서는 이스케이프 시퀀스가 해석됩니다. \n은 실제 줄바꿈이 되고 \t는 탭, \"는 따옴표 문자가 됩니다. 작은따옴표 안에서는 아무것도 해석되지 않고 값이 적힌 그대로 쓰입니다. 역슬래시가 들어간 비밀번호에 필요한 동작이 바로 이것입니다. 따옴표 없는 값은 양끝이 잘리고, 그 뒤의 #부터는 주석이 시작됩니다. 그러므로 해시 문자가 들어간 값에는 따옴표가 필요합니다. 그러지 않으면 값의 절반이 사라집니다.

${OTHER_VAR} 참조는 치환하지 않고 적힌 그대로 남깁니다. 이것이 확장되는지 여부는 전적으로 그 파일을 읽는 쪽에 달려 있기 때문입니다. Node의 dotenv는 확장하고, Docker Compose는 위치에 따라 확장하며, 셸에서 그냥 source .env를 하면 셸 변수로 확장되는 것은 물론 셸 문법처럼 생긴 다른 모든 것도 함께 해석됩니다. 여기서 미리 치환해 버리면 그중 한 환경에는 맞고 나머지에는 조용히 틀린 파일이 나옵니다.

여기서 .env가 INI와 공유하는 문제가 드러납니다. 규격이 없다는 것입니다. Node, 파이썬, 루비, Docker Compose, 그리고 source는 세부에서 모두 엇갈립니다. 따옴표를 벗기는지, export를 허용하는지, 여러 줄 값이라는 개념이 존재하기는 하는지가 각각 다릅니다. 한쪽에서 동작하는 파일이 다음 쪽에서도 동작하리라는 보장은 없으므로, 여기서 가져간 결과물은 실제로 그것을 읽을 환경에서 시험해 보세요. 파싱은 전적으로 브라우저 안에서 일어나는데, 정의상 비밀의 더미인 파일에 대해서는 바로 그 점이 중요합니다.

자주 묻는 질문

단일·이중 따옴표의 차이는?

이중 따옴표 내부에서는 \n, \t, \" 등 이스케이프가 해석됩니다. 단일 따옴표 내부에서는 리터럴로 처리되어, FOO='line1\nline2'는 백슬래시-n을 그대로 유지합니다. npm의 dotenv, Python의 python-dotenv와 동일한 표준 동작입니다.

${VAR} 참조를 확장하나요?

아니요 — 변수 확장은 dotenv 구현마다 다르고, 파서 출력은 파일에 쓰인 그대로 충실히 표현해야 합니다. 필요하면 dotenv-expand 같은 도구를 import 후에 사용하세요.

데이터가 어디론가 전송되나요?

아니요. 파싱은 전적으로 브라우저 안에서 일어납니다. .env 내용이 기기 밖으로 나가지 않습니다.

같은 파일이 도커와 셸과 프레임워크에서 다르게 동작하는 이유는?

dotenv는 표준이 아니라 관례이고, 구현마다 따옴표 처리와 이스케이프, 여러 줄 값, 줄 끝 주석, 나중 줄이 앞 줄을 덮는지 여부를 제각기 정했기 때문이다. 특히 도커의 env-file은 라이브러리처럼 따옴표를 해석하지 않는다. 여러 곳에서 읽히는 파일이라면 값을 단순하게 두고 따옴표는 의도적으로 써라.

줄바꿈이나 따옴표가 든 값은 어떻게 써야 하나?

이스케이프가 해석되는 큰따옴표에 넣고, 글자 그대로 살아남아야 하는 값에는 작은따옴표를 써라. 역슬래시가 든 비밀번호는 작은따옴표가 안전하다. 반복해서 문제가 되는 것은 실제 줄바꿈이 들어간 긴 키다. 여러 줄 값을 따옴표로 감싼 형태를 받아주는 리더도 있고 아닌 것도 있어서, 키를 base64로 한 줄에 담으면 질문 자체가 사라진다.

관련 도구