📝 .env.example 제너레이터
실제 .env를 붙여넣으면 주석과 구조를 유지한 채 값을 안전한 플레이스홀더로 자동 치환합니다.
🔒 개인정보 최우선
- ・입력한 .env는 서버에 전송되지 않습니다
- ・모든 변환은 브라우저 내 JavaScript에서 실행
- ・저장 로그 · 기록 · 데이터베이스 없음
- ・걱정되시면 네트워크 연결을 끊고도 사용 가능합니다
📥 입력 (.env)
📤 .env.example
➕ 폼에서 추가
KEY 이름과 카테고리를 선택하여 추가합니다.
📖 자주 걸리는 지점
진짜 .env 를 붙여 넣으면 주석과 구조를 유지한 채 값만을 안전한 플레이스홀더로 치환해 Git 에 커밋할 수 있는 .env.example 을 생성합니다. 처리는 브라우저 안에서 끝나며 입력은 전송되지 않습니다. 값을 치환하는 것과 기밀이 남지 않는 것은 별개입니다 — 주석 안에 진짜 값이 쓰여 있으면 그대로 출력에 남습니다. 생성한 결과는 커밋하기 전에 반드시 스스로 읽으세요.
| 사례 | 무슨 일이 일어나는가 | 어떻게 하면 되는가 |
|---|---|---|
| 주석 안에 진짜 값이 남는다 | 치환의 대상은 KEY=VALUE 의 값 부분이므로 # 로 시작하는 행은 그대로 출력됩니다. 그런데 실제 .env 에는 # 프로덕션은 sk-live-abc123 을 쓴다 · # 옛 키: xoxb-... · # 접속처: postgres://user:pass@prod-db.internal:5432 같은 주석의 형태를 한 기밀이 높은 확률로 포함되어 있습니다. 주석은 메모로서 쓰이므로 값 칸보다 무방비가 되기 쉽습니다. 마찬가지로 키 이름 자체가 정보를 갖는 경우도 있습니다 — ACME_CORP_API_KEY 라는 이름은 거래처의 이름을 공개하고 있습니다. |
생성한 .env.example 을 커밋하기 전에 위에서 아래까지 읽으세요 — 특히 주석 유지를 켰을 때는 필수입니다. 읽는 관점은 세 가지로 — 주석에 진짜 값이 쓰여 있지 않은지, 키 이름에 거래처명이나 사내 시스템명이 들어 있지 않은지, 호스트명이나 포트 번호가 내부 구성을 드러내고 있지 않은지. 주석은 왜 이 키가 필요한가를 쓰는 곳이지 값을 쓰는 곳이 아닙니다 — 진짜 값을 메모하고 싶다면 그것은 .env 쪽이나 비밀번호 관리자에 두어야 합니다. 치환 전에 원래 .env 의 주석을 재검토해 두면 .env.example 쪽에서 지우는 수고가 줄어듭니다. |
| 키 이름만 늘어놓아도 신규 참가자가 움직일 수 없다 | .env.example 의 목적은 이 프로젝트를 움직이려면 무엇을 설정하면 되는지를 전하는 것입니다. 그런데 키 이름과 플레이스홀더뿐인 .env.example 에서는 필요한 정보의 대부분을 읽어낼 수 없습니다 — STRIPE_SECRET_KEY=your_key_here 라는 한 줄은 어디서 취득하는지, 테스트용과 프로덕션용 중 어느 쪽인지, 애초에 필수인지 임의인지를 아무것도 알려 주지 않습니다. 결과적으로 새로 합류한 사람은 기존 멤버에게 묻게 되고 .env.example 이 있는 것 자체가 형해화합니다. |
각 키 위에 한 줄의 주석을 쓰세요 — 써야 할 것은 어디서 취득하는지, 필수인지 임의인지, 값의 형식 세 가지입니다. # Stripe 대시보드 > 개발자 > API 키. 테스트 환경에서는 sk_test_ 로 시작하는 것을 쓴다. 필수. 라는 한 줄이 있으면 그것만으로 신규 참가자가 스스로 해결할 수 있습니다. 임의의 키에는 기본값도 쓰세요 — # 생략 시 3000 처럼. 이 작업의 가치는 실은 기존 멤버에게 더 큽니다 — 반년 뒤에 환경을 다시 만들 때, 혹은 프로덕션 설정을 재검토할 때 읽는 것은 대개 쓴 본인이기 때문입니다. 신규 참가자를 위해 라고 생각하고 쓴 것이 가장 자신을 돕습니다. |
| .env.example 을 만들었는데 .env 가 커밋되어 있다 | .gitignore 에 .env 라고 써도 이미 추적되고 있는 파일에는 듣지 않습니다 — .gitignore 는 아직 추적하지 않은 파일을 무시하는 설정이므로 과거에 한 번이라도 git add 한 파일은 이후에도 변경이 계속 추적됩니다. 또 하나 흔한 것이 제외의 작성법으로 .env* 라고 쓰면 .env.example 까지 무시되어 애써 만든 틀이 커밋되지 않습니다 — 저장소에 .env.example 이 없다는 상태는 이 설정 실수인 경우가 많습니다. |
제외는 두 줄로 쓰세요 — .env* 의 다음 줄에 !.env.example 을 둡니다(부정의 순서가 중요해서 제외 뒤에 쓰지 않으면 듣지 않습니다). 이미 추적되고 있는 경우에는 git rm --cached .env 로 추적만 뺍니다 — 파일 자체는 수중에 남습니다. 확인은 git ls-files | grep env 가 확실하며 .env.example 만 나오는 것이 올바른 상태입니다. 그리고 가장 중요한 것 — 과거의 커밋에 .env 가 포함되어 있던 경우 이력을 재작성해도 대처가 되지 않습니다. 포크 · CI 의 로그 · 남의 로컬 클론 · GitHub 의 캐시에 남으므로 유일하게 올바른 대처는 그 키를 무효화하고 재발행하는 것입니다 — 알아챈 시점에 이력 정리보다 먼저 실행하세요. |
.env 라는 구조 자체에 한계가 있다는 것도 알아 두세요. 우선 줄바꿈을 포함하는 값을 표현할 수 없습니다 — 비밀 키나 인증서를 넣으려 하면 반드시 여기서 막힙니다(회피책은 Base64 로 만들어 한 줄로 하는 것이지만 이는 .env 의 한계를 인정한 뒤의 타협입니다). 다음으로 타입이 없습니다 — 모두 문자열이므로 DEBUG=false 는 문자열 "false" 이며 많은 언어에서 참으로 평가됩니다. 그리고 환경별 차이를 관리하는 구조가 없습니다 — 개발 · 스테이징 · 프로덕션에서 .env 를 따로 가지면 키가 늘었을 때 전부를 손으로 동기화하게 됩니다. 프로덕션 환경에서는 .env 가 아니라 Secret Manager(AWS Secrets Manager · Google Secret Manager · HashiCorp Vault)를 쓰세요 — 접근 제어 · 감사 로그 · 자동 로테이션이라는 .env 에는 원리적으로 없는 기능이 필요해지는 것은 대개 프로덕션뿐이기 때문입니다. 개발 환경은 .env 그대로여도 상관없습니다.
📖 사용법
-
1
실제 .env 붙여넣기왼쪽 텍스트 영역에 실제 .env를 붙여넣기. 프리셋에서 시작 가능.
-
2
자동 새니타이즈PASSWORD/SECRET/TOKEN/KEY는 랜덤 플레이스홀더로, URL은 example.com으로, PORT는 3000 등으로 자동 치환.
-
3
커밋 안전 파일 다운로드오른쪽 출력을 복사하거나 .env.example로 다운로드 후 커밋.
❓ 자주 묻는 질문
정말 서버에 전송되지 않나요?
어떤 키가 시크릿으로 감지되나요?
주석과 빈 줄이 유지되나요?
🐛 이 도구에서 문제가 발생했나요?
무료 · 가입 불필요. 재현 절차만이라도 도움이 됩니다. 보고는 운영자에게 직접 전달되어 개선에 사용됩니다.
보고 감사합니다!
운영자에게 전달되었습니다. 개선에 사용됩니다.