요즘 개발할 때 Claude Code, Cursor, Gemini, ChatGPT 같은 AI 도구 많이 쓰시죠?
저도 엄청 편하게 잘 쓰고 있는데요, 최근에 개발자 커뮤니티에서 꽤 충격적인 이야기가 돌았어요.
"AI가 내 .env 파일을 몰래 읽고 있었다"
처음엔 저도 '설마?' 했거든요. 근데 실제로 여러 사람들이 겪은 일이라서 정리해봤습니다.
.env 파일이 뭔지 모르는 분들을 위해
개발을 막 시작하셨거나 비개발자분들을 위해 먼저 설명할게요.
여러분이 카페에서 와이파이 쓸 때 비밀번호를 어딘가에 적어두잖아요. 개발할 때도 비슷한 게 있어요. 데이터베이스 비밀번호, 카카오 로그인 API 키, AWS 접속 정보 같은 것들을요. 이걸 매번 코드에 직접 쓰면 위험하니까 .env라는 파일에 따로 모아두는 거예요.
# .env 파일 예시
DATABASE_PASSWORD=mypassword1234
KAKAO_API_KEY=abcd1234efgh5678
이 파일은 깃허브 같은 곳에 올리면 절대 안 돼서, 보통 .gitignore에 넣어서 숨겨요. 그만큼 민감한 파일입니다.
근데 AI가 이걸 읽는다고?
네, 그게 문제예요.
Claude Code, Cursor, Gemini CLI 같은 AI 코딩 도구들은 여러분의 프로젝트 폴더를 쭉 훑어보면서 "이 프로젝트가 어떻게 생겼구나" 파악을 해요. 그 과정에서 .env 파일도 그냥 같이 읽어버리는 거예요. 여러분한테 따로 물어보지도 않고요.
읽는 게 왜 위험해요?
단순히 "AI가 파일을 봤다" 수준이 아니에요.
AI 코딩 도구들은 클라이언트-서버 구조로 동작해요. 쉽게 말하면, 여러분 컴퓨터에서 입력한 내용이 AI 회사 서버로 전송되어서 거기서 처리된다는 거예요. 그러면 .env에 있는 내용도 같이 딸려갈 수 있어요.
만약 그 데이터가 AI 학습에 쓰인다면? 나중에 다른 누군가가 AI한테 "혹시 아무개 서비스 API 키 알아?" 하고 물었을 때 나올 수도 있다는 얘기예요. 이론적인 가능성이긴 하지만, 충분히 심각하게 받아들여야 해요.
정리하면 이래요.
- API 키 유출 → 내 계정으로 몰래 서비스 사용, 요금 폭탄
- DB 비밀번호 유출 → 데이터베이스에 외부에서 직접 접근
- AWS 키 유출 → 클라우드 서버 탈취, 수백만 원 과금 사고
- JWT 시크릿 유출 → 내 서비스 로그인 인증 우회
이런 일들이 실제로 AWS 키 유출로 수천만 원 청구된 사례처럼 현실에서 일어나고 있어요.
이거 Claude만의 문제 아닌가요?
아니에요, 이게 포인트예요.
처음 이슈가 제기된 건 Claude Code였지만, 근본적인 원인은 "AI 도구가 프로젝트 폴더를 스캔한다" 는 구조 자체에 있어요. 그래서 어떤 AI 코딩 도구를 쓰든 같은 위험이 있어요.
- Claude Code — 가장 먼저 이슈가 공론화됨
- Cursor — VS Code 기반으로 프로젝트 전체를 인덱싱함
- Gemini CLI — 구글의 AI 코딩 도구도 동일한 구조
- ChatGPT / Codex — 로컬 연동 플러그인에서 같은 패턴
어떤 도구를 쓰든 기본 원칙은 하나예요.
"내가 명시적으로 막지 않은 파일은 AI가 볼 수 있다고 가정하자"
그럼 어떻게 막아요?
방법이 여러 개 있는데, 쉬운 것부터 설명할게요.
방법 1. 차단 규칙 설정하기 (Claude Code 기준)
Claude Code를 쓴다면 설정 파일에 "이 파일은 절대 읽지 마" 하고 직접 명시할 수 있어요.
~/.claude/settings.json 파일을 열어서 아래처럼 추가해주세요.
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./.env*)",
"Read(./secrets/**)",
"Read(~/.ssh/**)",
"Read(~/.aws/**)"
]
}
}
다른 AI 도구들도 비슷한 설정이 있으니 각 도구 공식 문서에서 "파일 접근 제한" 또는 "deny rules" 를 찾아보세요.
한 가지 주의할 점이 있어요. 이 방법도 100% 완벽하진 않아요. AI가 직접 파일을 안 읽더라도, 스크립트를 짜서 우회하는 경우가 보고된 적이 있거든요. 그래서 이건 기본 조치이고, 아래 방법들을 같이 써야 해요.
방법 2. .env 파일 자체를 안전하게 만들기 (핵심!)
사실 가장 근본적인 해결책은 이거예요.
.env에 진짜 비밀번호를 저장하지 않는 것.
"그럼 어디에 저장해요?" 하시면, Vault(금고) 라는 개념을 쓰면 돼요. 1Password 같은 비밀번호 관리 앱 써보신 분들은 바로 이해하실 거예요.
비유로 설명하면 이래요.
기존 방식은 집 현관 비밀번호를 포스트잇에 써서 문 앞에 붙여두는 거예요. 누군가 지나가면 다 볼 수 있죠.
Vault 방식은 포스트잇엔 "금고 3번 칸" 이라고만 써두고, 실제 비밀번호는 금고 안에 있는 거예요. 포스트잇을 봐도 아무 소용이 없어요.
코드로 보면 이렇게 달라져요.
# ❌ 기존 방식 — AI가 읽으면 바로 노출
STRIPE_SECRET_KEY=sk_live_xxxxxxxxxxxxxxxxxxxx
DATABASE_URL=postgres://user:mypassword@host/db
# ✅ Vault 방식 — 포인터만 있고 실제 값은 금고에
STRIPE_SECRET_KEY=op://Work/Stripe/secret-key
DATABASE_URL=op://Work/Database/connection-string
방법 3. .env 파일을 프로젝트 밖으로 빼기
가장 간단한 방법이기도 해요.
AI 도구는 보통 현재 작업 중인 프로젝트 폴더만 스캔해요. 그러면 .env 파일을 그 폴더 밖에 두면 AI가 못 보겠죠?
# 이런 구조로
my-projects/
env-files/ ← .env 파일들은 여기에
.env.myapp
my-app/ ← AI는 이 폴더만 봄
src/
package.json
다만 앱 실행할 때 경로를 맞춰줘야 해서 약간의 설정이 필요해요.
정리 — 오늘 당장 해야 할 것
지금 AI 코딩 도구 쓰고 있다면:
settings.json에.envdeny 규칙부터 추가하세요. 5분이면 돼요..env에 진짜 비밀번호가 있다면, 혹시 모르니 API 키 재발급을 고려해보세요.- 여유가 되면 1Password나 Vault로 시크릿 관리 방식을 바꿔보세요.
AI 도구를 사용할 때 기억할 것:
- AI가 파일 접근 권한을 요청하는 팝업이 뜨면 꼭 확인하고 거절하세요.
- "이 파일 읽어도 돼?" 라고 안 물어보는 경우도 많으니, 사전에 막아두는 게 최선이에요.
- Claude Code든 Cursor든 Gemini든, 모든 AI 코딩 도구에 동일하게 적용되는 이야기예요.
AI 도구 진짜 편하고 생산성도 확 올라가는데, 이런 부분은 아직 미성숙한 것 같아서 아쉬워요. 그래도 우리가 미리 알고 대비하면 충분히 안전하게 쓸 수 있으니까, 오늘 설정 한번 점검해보시면 좋겠습니다! 🙂
댓글