본문으로 건너뛰기
>_ITDITD웹 보안 플랫폼

용어 사전

.env란 — 환경 파일이 유출되면 무슨 일이 일어나는가

.env는 앱의 시크릿(DB 자격 증명, API 키, 암호화 키)을 한 파일에 모읍니다. 왜 가장 위험한 파일인지, 유출된 각 시크릿이 무엇을 여는지, 어디에 두어야 하는지, 그리고 git과 키 교체로 어떻게 지키는지를 자가 점검과 함께 다룹니다.

게시 2026-06-07 업데이트 2026-06-07 3분 읽기

.env는 매우 편리해 거의 모든 현대 프레임워크가 사용합니다. 하지만 한 번 잘못된 곳에 두면 현관문에 열쇠 꾸러미를 꽂아두는 것과 같습니다. 이것이 무엇인지, 그리고 어떻게 지키는지를 바닥부터 살펴봅니다.

조금 더 자세히

앱에는 "환경마다 바뀌는 값"과 "아무에게도 보이고 싶지 않은 값"이 있습니다: DB 비밀번호, 외부 API 키, 세션을 암호화하는 키. 이것들을 소스에 하드코딩하면 코드를 공유하는 순간 시크릿이 새어 나갑니다.

그래서 이를 하나의 .env 파일에 모아 코드에서 "환경 변수"로 읽습니다. Next.js, Laravel, Rails 등 많은 프레임워크가 이 방식으로 동작합니다.

왜 "가장 위험한 파일"인가

여러 키가 한 파일에 있기 때문에, 한 번의 노출이 피해를 빠르게 번지게 합니다. "유출된 각 값이 무엇을 여는지" 나열하면 심각성이 분명해집니다.

유출된 값무슨 일이 일어나는가
DB 자격 증명데이터 읽기 / 변조 / 삭제
외부 API 키사칭 사용, 부정 과금
암호화 키(예: Laravel APP_KEY, 서명 키)세션 위조, 사칭 로그인
OAuth 시크릿연동 앱 장악

실제로 .env 노출은 고전적인 사고입니다. → 전 세계에 노출된 .env

전형적인 유출 = 배치 실수

가장 큰 원인은 "앱 전체를 공개 디렉터리(문서 루트)에 두는 것"입니다. public/만 서빙되어야 할 곳에서 그 상위를 노출하면 .env까지 닿을 수 있게 됩니다.

✗ 위험(앱이 공개 루트에 있음)

public_html/
├─ .env   ← 읽힘!
├─ app/
└─ public/

✓ 안전(앱은 바깥, public만 서빙)

app-root/
├─ .env   ← 닿을 수 없음
├─ app/
└─ public_html/ → public/
앱은 문서 루트 바깥에 두고 public/만 서빙하세요. 그것만으로 .env에 닿을 수 없게 됩니다.

지키는 법

1

공개 디렉터리에 두지 않기

앱을 문서 루트 바깥에 두고 public/만 서빙하세요. 공유 호스팅의 구체적 절차: 이 가이드.

2

git에 커밋하지 않기

.env*.gitignore에 추가하고, 값이 비어 있는 .env.example만 공유하세요.

3

유출되면 전부 교체

확인된 키 하나만이 아니라 — .env에 있던 모든 키를 교체하세요. 전부 보였다고 가정하고 움직이세요.

4

정기적으로 자가 점검

자기 사이트에서 /.env를 열 수 없는지 확인하는 습관을 들이세요.

자가 점검(본인 소유 도메인에 대해서만)

# 본문이 있는 200이면 노출된 것입니다. 403/404이면 지금은 괜찮습니다.
curl -sI https://yourdomain/.env | head -1
curl -sI https://yourdomain/.git/config | head -1

배포할 때마다 이를 점검하면 배치 실수를 일찍 잡아냅니다.

다음으로 읽기

FAQ

Q.env를 git에 커밋해도 되나요?
A

안 됩니다. .env를 .gitignore에 추가하세요. 대신 어떤 키가 필요한지 공유하기 위해 값이 비어 있는 .env.example을 커밋하세요.

Q.env에서 시크릿이 단 하나라도 새면 무엇을 교체해야 하나요?
A

확인된 것 하나만이 아니라 — .env에 있던 모든 키를 교체하세요. 우선순위: 외부 API / OAuth 시크릿 → 암호화 키 → 메일 → DB. 전부 보였다고 가정하고 움직이세요.

Q.env가 유출됐는지 어떻게 확인하나요?
A

브라우저에서 https://yourdomain/.env 를 열어보세요. 내용이 보이면 노출된 것입니다(본문이 있는 200 = 나쁨). 차단되면(403/404) 지금은 괜찮습니다.