MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

.env 파일 검사기

.env 파일을 붙여 넣으면 중복 키, 따옴표 실수, 형식이 잘못된 줄, 노출된 것으로 보이는 비밀을 줄 번호와 함께 보여 줍니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

샘플

파일 내용을 붙여 넣으세요. 결과에서 값은 가려지며 이 브라우저 탭 밖으로 나가지 않습니다.

발견한 문제

7
변수8
오류4
경고3
비밀 이름2
  • 5번째 줄GREETING의 값을 여는 따옴표가 닫히지 않았습니다.
  • 6번째 줄NAME의 닫는 따옴표 뒤에 글자가 더 있습니다. 따옴표 안으로 넣거나 # 주석으로 바꾸세요.
  • 7번째 줄MY KEY은(는) 올바른 변수 이름이 아닙니다. 영문자·숫자·밑줄만 쓰고 숫자로 시작하지 마세요.
  • 8번째 줄KEY=값 형태의 할당이 아닙니다.
  • 3번째 줄PORT은(는) 2번째 줄에서 이미 정의되었습니다. 대부분의 로더는 마지막 값을 쓰므로 앞의 값은 의미가 없습니다.
  • 4번째 줄API_KEY의 값이 자격 증명 형태입니다: AWS 액세스 키 ID.
  • 10번째 줄DB_PASSWORD에 실제 비밀 값으로 보이는 내용이 들어 있습니다. 이 파일은 git과 채팅에 올리지 말고, 값을 비운 .env.example을 공유하세요.

보기

줄변수값따옴표비고
1APP_ENVdevelopment없음
2PORT3000없음
3PORT3001없음중복
4API_KEY•••••••• (20)없음실제 비밀로 보임
5GREETINGhello world큰따옴표
6NAMEAda작은따옴표
9MONKEYbanana없음
10DB_PASSWORD•••••••• (14)없음실제 비밀로 보임

.env 파일 검사기는 애플리케이션이 엉뚱한 설정을 읽게 만드는 사소한 실수를 잡아 줍니다. 같은 변수가 서로 다른 값으로 두 번 정의된 경우, 닫히지 않은 따옴표 때문에 파일의 나머지가 한 값 안으로 들어가 버리는 경우, KEY=value 형식이 아닌 줄, 자리 표시자가 있어야 할 곳에 붙여 넣은 실제 비밀번호 같은 것들입니다. 파일을 붙여 넣으면 모든 변수를 줄 번호와 함께 나열하고, 발견한 문제마다 어떻게 고치는지 쉬운 말로 설명합니다.

커밋하기 전, 팀원에게 파일을 넘기기 전, .env.example을 배포 환경에 복사하기 전에 쓰도록 만들었습니다. 변수 표에는 비밀이 출력되지 않습니다. 민감해 보이는 이름과 자격 증명 모양의 값은 점과 길이만 표시되고, 대신 공유해도 되는 값을 비운 .env.example을 만들어 줍니다. 결과 화면을 캡처해도 아무것도 새지 않습니다.

파싱은 브라우저 안에서 대표적인 dotenv 로더의 관례를 따릅니다. 따옴표로 감싼 값은 여러 줄에 걸칠 수 있고, #은 주석을 시작하며, export 접두사를 허용합니다. 값을 실행하거나 변수를 확장하지 않고 아무것도 업로드하지 않습니다. 특정 로더를 그대로 복제한 것이 아니라 위생 점검용이며 차이점은 아래에 적어 두었습니다.

사용 방법

  1. 파일 내용 붙여 넣기

    .env, .env.local, .env.production의 텍스트를 편집기에 복사하거나 텍스트 파일을 끌어다 놓습니다. 512 KiB까지 받으며, 샘플로 일반적인 앱, 문제가 가득한 파일, 여러 줄 값을 볼 수 있습니다.

  2. 발견한 문제 읽기

    위쪽 카운터가 변수, 오류, 경고, 비밀 이름의 개수를 알려 줍니다. 각 항목은 줄 번호와 무엇이 문제인지를 말해 줍니다. 잘못된 변수 이름·닫히지 않은 따옴표·닫는 따옴표 뒤의 글자·할당이 아닌 줄 같은 오류가 경고보다 먼저 나오고, 각 그룹 안에서는 줄 번호순입니다. 파일이 매우 크면 변수와 문제를 각각 처음 500개까지만 화면에 표시하지만 카운터와 생성한 .env.example은 파싱한 전체 파일을 반영합니다.

  3. 중복과 따옴표 고치기

    중복은 첫 등장 이후에 다시 정의된 것이며 대부분의 로더는 마지막 값을 쓰므로 의도하지 않은 줄을 지우세요. 공백이 있는 값은 따옴표로 감싸고, 연 따옴표는 반드시 닫으세요.

  4. 비밀 확인하기

    "비밀 이름" 배지는 이름에 KEY, TOKEN, PASSWORD 같은 단어가 통째로 들어 있다는 뜻입니다. 빨간 "실제 비밀로 보임" 배지는 값이 자리 표시자가 아니거나 AWS·GitHub·Stripe 같은 자격 증명 모양이라는 뜻입니다. 그런 파일은 git과 채팅에 올리지 마세요.

  5. 안전한 .env.example 복사

    .env.example 탭에서 변수를 한 번씩만 나열하고 비밀·자격 증명 값은 비우되 포트 같은 무해한 값은 남긴 버전을 볼 수 있습니다. 복사하거나 내려받아 저장소에 넣으세요.

작동 원리

변수 줄로 인정되는 형식

검사기는 \n 또는 \r\n으로 나눈 줄을 하나씩 읽습니다. 빈 줄과 #로 시작하는 줄은 건너뜁니다. 나머지 줄은 선택적인 export 접두사, 영문자·숫자·밑줄로 이루어지고 숫자로 시작하지 않는 이름, =, 값 순서를 갖춰야 합니다. export API_URL=https://example.test와 DB_HOST = localhost는 모두 읽히지만, 뒤의 것은 = 주변 공백 때문에 경고를 받습니다.

MY-VAR, 1ABC, FOO BAR 같은 이름은 올바르지 않은 변수 이름으로, =가 없는 줄은 할당이 아니라고 보고됩니다. 셸도 이런 이름은 export하지 못하므로, 이를 허용하는 로더가 있더라도 거기에 의존하는 것은 위험합니다.

따옴표, 주석, 여러 줄 값

작은따옴표, 큰따옴표, 백틱으로 시작하는 값은 짝이 되는 닫는 따옴표까지 이어지며 여러 줄에 걸쳐도 됩니다. 그래서 개인 키나 환영 메시지를 변수 하나에 담을 수 있습니다. 큰따옴표 안에서는 백슬래시가 다음 글자를 이스케이프합니다. 닫는 따옴표가 끝내 나오지 않으면 따옴표가 열린 줄을 보고하고 그 한 줄만 값으로 읽으므로, 따옴표 하나가 파일의 나머지를 삼키지 않습니다.

닫는 따옴표 뒤에 # 주석이 아닌 내용이 오면 오류입니다. NAME='Ada' trailing처럼 쓰면 로더가 남는 글자를 버릴지 유지할지 알 수 없기 때문입니다. 따옴표 없는 값에서는 #이 인라인 주석을 시작해 제거되며, 따옴표 없이 공백이 들어 있는 값은 셸이 쪼개므로 경고를 받습니다.

중복과 비밀 검사

키는 대소문자를 구분해서 비교합니다. 첫 등장은 정상이고, 정확히 같은 키가 이후에 또 나오면 중복이며 첫 정의의 줄 번호를 알려 줍니다. 리눅스와 macOS에서 KEY와 key는 서로 다른 변수이므로 표시하지 않지만 Windows는 환경 변수 이름의 대소문자를 구분하지 않습니다.

이름을 밑줄과 camelCase 경계로 나눈 단어 중에 KEY, SECRET, TOKEN, PASSWORD, PASSWD, PASS, PWD, PRIVATE, CREDENTIAL이 통째로 있으면 비밀 이름으로 봅니다. 그래서 API_KEY와 dbPassword는 잡히지만 MONKEY, KEYBOARD, PASSENGER_COUNT는 잡히지 않습니다. PUBLIC이나 PUBLISHABLE이 들어간 이름은 제외합니다. 이와 별개로 이름과 상관없이 값의 모양이 자격 증명이면 표시합니다. AWS 액세스 키 ID, GitHub·Slack 토큰, Stripe 라이브 키, OpenAI 형태·Google API 키, 개인 키 블록, JSON Web Token, 비밀번호가 들어간 URL이 대상입니다.

# 이름 때문에 비밀로 표시됨
API_KEY, STRIPE_SECRET, DB_PASSWORD, apiKey

# 이름으로는 표시되지 않음
MONKEY, KEYBOARD, NEXT_PUBLIC_KEY, DATABASE_URL

# 이름과 무관하게 값의 모양으로 표시됨
BACKUP_TARGET=AKIAIOSFODNN7EXAMPLE

실제 예시

중복된 PORT와 실제 값이 들어 있는 비밀
입력
APP_ENV=development
PORT=3000
API_KEY=local-demo
PORT=3001
# comment
출력
변수 4개, 오류 0, 경고 2
3번째 줄: API_KEY에 실제 비밀 값으로 보이는 내용이 들어 있습니다. 이 파일은 git과 채팅에 올리지 말고, 값을 비운 .env.example을 공유하세요.
4번째 줄: PORT은(는) 2번째 줄에서 이미 정의되었습니다. 대부분의 로더는 마지막 값을 쓰므로 앞의 값은 의미가 없습니다.

도구의 파서를 직접 실행해 얻은 결과입니다. 주석 줄은 건너뛰며 줄 번호는 원본 파일 기준입니다.

닫히지 않은 따옴표와 따옴표 뒤의 글자
입력
GREETING="hello world
NAME='Ada' trailing
NEXT=1
출력
변수 3개, 오류 2
1번째 줄: GREETING의 값을 여는 따옴표가 닫히지 않았습니다.
2번째 줄: NAME의 닫는 따옴표 뒤에 글자가 더 있습니다. 따옴표 안으로 넣거나 # 주석으로 바꾸세요.

GREETING은 첫 줄만 값으로 읽으므로 NAME과 NEXT는 별개의 변수로 계속 검사됩니다.

여러 줄로 된 개인 키
입력
APP_NAME=Billing
PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASC
-----END PRIVATE KEY-----"
EMPTY=
출력
변수 3개, 오류 0, 경고 1
PRIVATE_KEY  2-4번째 줄, 여러 줄, 가려짐
2번째 줄: PRIVATE_KEY의 값이 자격 증명 형태입니다: 개인 키.

키의 세 줄은 변수 하나이므로 안쪽 두 줄은 잘못된 줄로 보고되지 않습니다.

글자만 우연히 들어 있는 이름
입력
MONKEY=banana
API_KEY=
NEXT_PUBLIC_KEY=abc
DB_PASSWORD=changeme
SESSION_SECRET=9f2c1d7e
출력
변수 5개, 비밀 이름 3개
MONKEY, NEXT_PUBLIC_KEY: 비밀 이름 아님
API_KEY, DB_PASSWORD: 비어 있거나 자리 표시자 값이라 경고 없음
5번째 줄: SESSION_SECRET에 실제 비밀 값으로 보이는 내용이 들어 있습니다. 이 파일은 git과 채팅에 올리지 말고, 값을 비운 .env.example을 공유하세요.
무난한 이름 뒤에 숨은 자격 증명
입력
BACKUP_TARGET=AKIAIOSFODNN7EXAMPLE
DATABASE_URL=postgres://app:app@db/app
출력
1번째 줄: BACKUP_TARGET의 값이 자격 증명 형태입니다: AWS 액세스 키 ID.
2번째 줄: DATABASE_URL의 값이 자격 증명 형태입니다: 비밀번호가 포함된 URL.

AKIAIOSFODNN7EXAMPLE은 AWS 문서의 예시 키라서 안전한 테스트 값으로 쓸 수 있습니다.

자주 하는 실수

  • 모든 로더가 따옴표를 똑같이 읽는다고 가정

    dotenv와 셸에서 작은따옴표는 글자 그대로이고 큰따옴표는 이스케이프나 치환을 처리할 수 있습니다. Docker도 경로가 둘입니다. docker run --env-file은 따옴표를 값에 남기지만 Docker Compose의 env_file은 짝이 맞는 따옴표를 벗기고 dotenv 방식으로 해석합니다. Compose에서 format: raw를 고르면 값이 그대로 전달됩니다. 검사기는 따옴표의 짝이 맞는지만 보므로 실제로 쓰는 로더로 한 번 더 확인하세요.

  • 깨끗한 결과를 유출이 없다는 증거로 믿음

    탐지는 이름의 단어와 널리 알려진 자격 증명의 모양을 기준으로 합니다. NOTES=에 붙여 넣은 비밀번호나 특이한 형식의 토큰은 잡히지 않으며, 파일이 git에서 무시되는지도 검사하지 않습니다.

  • 등호 주변의 공백

    DB_HOST = localhost는 dotenv에서는 읽히지만 셸이 source하면 실패하므로 경고가 붙습니다. 공백 없는 DB_HOST=localhost를 쓰세요.

  • 어느 중복이 이기는지에 기대기

    dotenv와 source하는 셸은 마지막 대입을 유지하지만 첫 값을 유지하는 도구도 있습니다. 중복은 모두 버그로 보고 순서에 기대지 말고 의도하지 않은 줄을 지우세요.

  • 실제 파일 대신 예시 파일만 검사

    .env.example이 깨끗하다고 실제 .env가 괜찮은 것은 아닙니다. 실제 배포되는 파일을 검사하고, 온라인 서비스에 업로드하지 말고 이렇게 브라우저 안에서 확인하세요.

자주 묻는 질문

.env 파일이 업로드되나요?

아니요. 텍스트는 브라우저에서 해석되며 서버로 전송되지 않습니다. 결과에도 비밀 값은 나오지 않고 점과 길이만 표시됩니다.

중복 변수는 어떻게 찾나요?

키 이름을 대소문자까지 정확히 비교합니다. 첫 등장 이후의 모든 등장을 중복으로 표시하고 메시지에 첫 정의의 줄 번호를 적습니다.

따옴표도 검사하나요?

예. 닫히지 않은 따옴표(열린 줄을 알려 줍니다), 닫는 따옴표 뒤의 글자, 공백이 있는데 따옴표가 없는 값을 보고합니다. 작은따옴표, 큰따옴표, 백틱을 이해하고 따옴표 값은 여러 줄에 걸쳐도 됩니다.

어떤 변수가 비밀 정보로 표시되나요?

이름에 KEY, SECRET, TOKEN, PASSWORD, PASSWD, PASS, PWD, PRIVATE, CREDENTIAL이 통째로 들어 있는 키이므로 MONKEY는 표시되지 않습니다. AWS·GitHub·Slack·Stripe·OpenAI·Google 자격 증명, 개인 키, JWT, 비밀번호가 든 URL 모양의 값은 이름과 무관하게 표시됩니다.

${HOME} 같은 변수를 확장하거나 $(command)를 실행하나요?

아니요. 값은 평가하거나 확장하지 않으므로 파일 안의 어떤 내용도 실행되지 않습니다. ${VAULT_PASS} 같은 참조는 실제 비밀이 아니라 자리 표시자로 취급합니다.

파일 크기는 얼마까지 가능한가요?

텍스트 512 KiB까지입니다. 입력이 비어 있으면 먼저 내용을 붙여 넣으라고 안내합니다.

.env.example을 만들어 주나요?

예. .env.example 탭이 변수를 한 번씩만 나열하고 비밀·자격 증명 값은 비우며 포트 같은 단순하고 무해한 값은 남깁니다. 기존 예시 파일과 비교하지는 않습니다.

마지막 업데이트: