.env ↔ JSON 변환기

.env 파일을 JSON으로, JSON을 .env로 변환합니다. docker-compose·쿠버네티스 ConfigMap/Secret·shell export 형식도 함께 뽑습니다.

📁 .env 파일을 끌어다 놓거나 클릭해서 선택
파일은 브라우저에서만 읽습니다 · 업로드되지 않습니다 · 최대 8MB
결과

🔒 .env에는 비밀키가 들어갑니다. 이 도구는 입력 내용을 브라우저에 저장하지 않습니다(자동저장 기능 없음). 변환은 전부 이 페이지 안에서만 실행되며 서버로 전송되지 않고, 탭을 닫으면 사라집니다.
☸️ 쿠버네티스로 옮길 때는 포트·모드 같은 일반 설정만 ConfigMap에, API 키·비밀번호·토큰은 Secret에 넣는 것이 원칙입니다. Secret 출력은 base64 인코딩이 필요 없는 stringData 형식이라 값을 그대로 붙여 쓰면 됩니다.
📌 파싱 규칙: export 접두어 허용 · 이중 따옴표 안의 \n \t \r \\ \" 는 실제 문자로 해석 · 단일 따옴표는 글자 그대로 · 따옴표 없는 값은 공백 뒤 #부터 주석 · 값 안의 = 와 여러 줄 값 지원 · 중복 키는 마지막 값이 이깁니다.

.env ↔ JSON 변환기란?

환경변수는 같은 값을 형식만 바꿔 여기저기 옮겨 적는 일이 잦습니다. 로컬 .env에 있던 값을 docker-compose의 environment 블록에 넣고, 다시 쿠버네티스 ConfigMap YAML로 옮기고, 서버에서 확인하려고 export 구문으로 바꾸는 식입니다. 손으로 옮기다 보면 따옴표 처리나 줄바꿈이 들어간 값에서 반드시 사고가 납니다. 이 도구는 .env 문법을 dotenv 규칙 그대로 파싱합니다. export 접두어, 단일·이중 따옴표, 이중 따옴표 안의 \n 이스케이프, 값 안의 = 기호, 여러 줄 값, 주석, 빈 값을 모두 구분해 읽습니다. 파싱한 키와 값은 JSON, .env, docker-compose, ConfigMap, Secret, shell export 중 원하는 형식으로 다시 출력하며, 특수문자가 섞인 값은 각 형식에 맞게 알아서 인용 처리합니다.

사용 방법

  1. .env 내용이나 JSON 객체를 입력창에 붙여넣습니다(형식은 자동으로 감지합니다).
  2. .env 파일을 끌어다 놓아도 됩니다.
  3. 출력 형식에서 JSON·.env·docker-compose·ConfigMap·Secret·shell 중 하나를 고릅니다.
  4. compose 서비스명이나 ConfigMap 이름이 필요하면 이름 칸에서 바꿉니다.
  5. 결과를 복사하거나 파일로 저장합니다.

.env ↔ JSON 변환기 사용 가이드

실제 작업에서 이 도구를 어떻게 쓰는지, 무엇을 조심해야 하는지 정리했습니다.

이 도구는 비밀키를 다룹니다

.env 안에 들어 있는 것은 대개 DB 비밀번호, API 키, 결제 시크릿, JWT 서명키입니다. 그래서 이 도구는 다른 도구와 다르게 만들었습니다 — 입력 자동저장(localStorage 보관)을 의도적으로 넣지 않았습니다. 다른 변환 도구들은 실수로 탭을 닫아도 내용이 남지만, 여기서는 탭을 닫으면 사라집니다.

변환은 전부 이 페이지 안에서 실행되고 서버로 아무것도 전송되지 않습니다. 다만 브라우저 밖에서 새는 경로는 여전히 남아 있으니 기본은 지키세요.

  • 화면 공유·녹화 중에는 열지 마세요. 스크린샷에 찍힌 키가 사고로 이어진 사례는 많습니다.
  • 복사 버튼을 쓰면 값이 클립보드에 남습니다. 클립보드 히스토리를 켜 둔 환경(윈도우 Win+V, 각종 런처)에서는 나중에도 조회됩니다.
  • 공용 PC나 남의 노트북에서는 아예 열지 마세요.
  • 키가 노출됐다고 의심되면 마스킹이나 파일 삭제가 아니라 폐기 후 재발급이 유일한 조치입니다.

.env 를 커밋하면 벌어지는 일

.gitignore 에 .env 를 넣는 것은 상식이지만, 사고는 대개 "처음 한 번"에 일어납니다. 프로젝트 초기에 .env 를 먼저 커밋하고 나중에 .gitignore 를 추가하는 순서로요. 이미 추적 중인 파일은 .gitignore 를 나중에 넣어도 계속 추적됩니다.

더 중요한 것 — git 에서 파일을 지우는 커밋을 해도 이전 커밋 안에 원본이 그대로 남습니다. git log -p 로 누구나 읽을 수 있습니다. 히스토리에서 완전히 지우려면 filter-repo 같은 도구로 히스토리를 다시 쓰고 강제 푸시해야 하는데, 이미 클론해 간 사람의 로컬에는 여전히 남습니다.

공개 저장소라면 시간 여유도 없습니다. 공개 GitHub 저장소에 올라온 클라우드 키가 몇 분 만에 자동 스캐너에 발견돼 악용된 사례가 여러 차례 보고됐습니다. 그래서 유출을 알아챈 순간의 1순위는 히스토리 정리가 아니라 키 폐기·재발급입니다. 정리는 그다음입니다.

bash
# 이미 커밋해 버린 .env 를 추적에서만 빼기 (히스토리에는 남습니다)
git rm --cached .env
echo ".env" >> .gitignore
git commit -m "chore: stop tracking .env"

# 유출됐다면 이 순서로
# 1) 키·비밀번호를 즉시 폐기하고 새로 발급
# 2) 접근 로그에서 오용 흔적 확인
# 3) 그다음에 히스토리 정리 (git filter-repo 등)
순서를 거꾸로 하지 마세요. 히스토리를 지우는 동안에도 유출된 키는 살아 있습니다.

.env.example 관례

저장소에 커밋하는 것은 .env 가 아니라 .env.example 입니다. 키 목록과 형식만 남기고 값은 비우거나 더미로 채운 파일입니다. 새로 합류한 사람이 이 파일을 복사해 시작할 수 있고, 어떤 환경변수가 필요한지가 코드 리뷰에 드러납니다.

이 도구로 만들기 — .env 를 붙여넣고 출력 형식을 .env 로 둔 채 "키 정렬"을 켜면 정렬된 목록이 나옵니다. 여기서 값만 지우고 커밋하세요. 통계의 "키 개수"로 .env 와 .env.example 의 항목 수를 대조하면, 누가 새 변수를 추가하고 example 에 반영하지 않은 것을 잡아낼 수 있습니다.

bash
# .env.example — 값 없이 형식만
DB_HOST=127.0.0.1
DB_PORT=3306
DB_PASSWORD=
JWT_SECRET=
SLACK_WEBHOOK_URL=
NODE_ENV=development

# 주석으로 발급처를 남겨 두면 온보딩이 빨라집니다
# TOSS_SECRET_KEY=   # 토스페이먼츠 개발자센터에서 발급
통계의 "중복 키"와 "빈 값"도 봐 두세요. 중복 키는 마지막 값이 이기므로(dotenv 와 동일), 위쪽에 적어 둔 값이 조용히 무시되고 있었다는 뜻입니다.

12-factor 와 형식 갈아타기

설정을 코드에서 분리해 환경변수에 두라는 12-factor 원칙이 널리 받아들여지면서, 같은 값이 형식만 바꿔 여기저기 옮겨 다니게 됐습니다. 로컬은 .env, 컨테이너는 docker-compose 의 environment, 쿠버네티스는 ConfigMap/Secret, 서버에서 확인할 땐 export. 손으로 옮기면 따옴표와 줄바꿈에서 반드시 사고가 납니다.

출력 형식어디에 붙이나주의
JSON설정 로더·테스트 픽스처"값 타입 추론"을 켜면 3306 이 문자열이 아닌 숫자로 나옵니다
.env로컬 개발 · .env.example 초안특수문자가 든 값은 자동으로 따옴표가 붙습니다
docker-composecompose 파일의 environment 블록서비스 이름 칸을 실제 서비스명으로 바꾸세요
ConfigMap쿠버네티스 — 비밀이 아닌 설정포트·모드·외부 URL 등
Secret쿠버네티스 — 키·비밀번호·토큰base64 없이 stringData 형식으로 나옵니다
shell export서버에서 잠깐 확인할 때명령줄에 직접 치면 셸 히스토리에 남습니다
"JSON 값 타입 추론"을 켜면 PORT=3306 이 숫자로, DEBUG=false 가 불리언으로 나옵니다. 편해 보이지만 조심하세요. 환경변수는 원래 전부 문자열이라, 코드가 process.env.PORT 를 문자열로 받는 것을 전제하고 있다면 JSON 쪽만 타입이 달라져 미묘하게 어긋납니다. 우편번호나 앞자리가 0인 코드값도 숫자로 바뀌면서 0이 날아갑니다.

ConfigMap 과 Secret — Secret 은 암호화가 아닙니다

가장 흔한 오해입니다. 쿠버네티스 Secret 은 기본적으로 base64 인코딩일 뿐 암호화가 아닙니다. base64 는 누구나 한 줄 명령으로 되돌립니다. 저장소(etcd) 수준의 암호화는 클러스터 관리자가 따로 켜야 하는 별도 설정입니다.

그럼에도 Secret 을 쓰는 이유는 접근 제어(RBAC)를 따로 걸 수 있고, 로그·이벤트에 값이 덜 노출되고, 운영 관례상 "이건 비밀"이라는 표시가 되기 때문입니다. ConfigMap 에 API 키를 넣으면 configmap 조회 권한만 있는 모든 사람이 봅니다.

  • 이 도구의 Secret 출력은 base64 인코딩이 필요 없는 stringData 형식이라 값을 그대로 붙여 쓸 수 있습니다.
  • ConfigMap 에는 포트·모드·외부 URL·타임아웃 같은 값을, Secret 에는 API 키·DB 비밀번호·토큰·서명키를 넣는 것이 원칙입니다.
  • 여러 줄 값(RSA 개인키, 서비스 계정 JSON)도 됩니다. ConfigMap/Secret 으로 낼 때는 YAML 블록 스칼라로, .env 로 낼 때는 이스케이프 표기로 출력합니다. 통계의 "여러 줄 값" 개수로 확인하세요.
  • 만든 Secret YAML 파일도 그대로 커밋하면 .env 를 커밋한 것과 똑같습니다. Sealed Secrets·External Secrets 같은 도구를 쓰거나, 값 부분은 CI 시크릿에서 주입하세요.

자주 묻는 질문

이 도구는 입력 내용을 저장하나요?

아니요. .env에는 API 키나 DB 비밀번호가 들어가는 만큼, 이 도구는 다른 도구와 달리 입력 자동저장(localStorage 보관)을 의도적으로 넣지 않았습니다. 변환은 전부 브라우저 메모리에서만 이뤄지고, 탭을 닫으면 흔적 없이 사라집니다. 서버로 전송되는 값도 없습니다.

따옴표는 어떻게 처리되나요?

dotenv 규칙을 따릅니다. 이중 따옴표로 감싼 값은 \n·\t·\r·\\·\" 이스케이프를 실제 문자로 해석하고, 단일 따옴표로 감싼 값은 이스케이프 없이 글자 그대로 읽습니다. 따옴표가 없는 값은 앞뒤 공백을 잘라내고, 공백 뒤에 오는 #부터는 주석으로 봅니다.

JSON을 .env로 바꿀 때 특수문자는요?

값에 공백·#·따옴표·역슬래시·줄바꿈이 있으면 자동으로 이중 따옴표로 감싸고 줄바꿈은 \n으로 이스케이프합니다. 그대로 둬도 안전한 값은 따옴표 없이 출력해 읽기 쉽게 둡니다.

ConfigMap과 Secret 중 뭘 써야 하나요?

비밀이 아닌 설정값(포트, 모드, 외부 URL)은 ConfigMap, API 키·비밀번호·토큰은 Secret에 넣는 것이 원칙입니다. ConfigMap은 클러스터 안에서 평문으로 보이고 접근 제어 취급도 다릅니다. 이 도구의 Secret 출력은 base64 인코딩이 필요 없는 stringData 형식이라 값을 그대로 적을 수 있습니다.

여러 줄 값(개인키 등)도 되나요?

됩니다. 이중 따옴표로 감싼 채 줄이 이어지는 값이나 \n이 들어간 값을 정확히 읽고, ConfigMap/Secret으로 낼 때는 YAML 블록 스칼라(|-)로, .env로 낼 때는 \n 이스케이프로 출력합니다.

중복된 키가 있으면요?

마지막 값이 이깁니다(dotenv와 동일). 중복이 있으면 경고로 알려 주므로 실수로 두 번 적어 둔 키를 찾아낼 수 있습니다.