애플이 CLAUDE.md를 그대로 production에 묶어서 출시했다 — 당신의 .gitignore가 안전한지 5분 점검
핵심 요약 (TL;DR)
2026-04-30 애플이 Apple Support 앱 5.13 정식 업데이트에 CLAUDE.md와 CLAUDE(1).md 두 개의 마크다운 파일을 그대로 묶어서 출시했다가, 몇 시간 만에 5.13.1 핫픽스로 회수했습니다. CLAUDE.md는 "팀 내부 코딩 룰북"이라, 한 줄짜리 .gitignore 누락이 그대로 사고로 직결됩니다. 바이브코더가 오늘 당장 .gitignore에 추가해야 할 8개 경로를 정리했습니다.
애플은 왜 망신을 당했나
발견자는 X 사용자 @aaronp613였습니다. Apple Support 5.13 IPA를 뜯어보니 앱 번들 안에 CLAUDE.md가 두 개 들어 있었던 거죠. 핫픽스(5.13.1)는 몇 시간 만에 푸시됐고, HN에서는 359포인트 / 293코멘트로 데일리 상위에 올라갔습니다.
노출된 정보가 가벼운 게 아니었습니다. 애플 내부 LLM 플랫폼으로 추정되는 "Juno AI"라는 명칭이 외부에 처음 나왔고(애플 공식 확인은 아직 없습니다), 고객 지원 대화의 세 가지 역할 정의 — customer / live Apple support agent / AI assistant — 가 명문 형태로 나왔습니다. Mark Gurman이 직전에 "Anthropic이 애플 사내 제품 개발을 상당 부분 떠받친다"고 보도한 내용이 사실상 1차 자료로 풀린 셈인 거죠.
CLAUDE.md가 왜 "개인 파일"이 아닌가
Claude Code의 CLAUDE.md는 매 세션 시작 시 자동으로 컨텍스트에 로드됩니다. 그래서 보통 이런 게 들어갑니다.
- 팀 코딩 표준과 금지사항
- 도메인 모델·내부 시스템 이름·내부 API 경로
- 환경별 설정과 서비스 토폴로지
- 데이터베이스 스키마 요약과 마이그레이션 룰
- "이렇게는 절대 하지 마" 식의 인시던트 학습
혼자 쓰면 개인 노트지만, 팀 단위로 굴리면 팀의 모든 결정과 사고 이력의 압축본이 됩니다. 애플처럼 빌드에 같이 묶일 수 있는 위치라면, 이 파일은 사실상 내부 위키 한 페이지를 통째로 풀어버리는 것과 같습니다.
5분 점검 — .gitignore에 오늘 추가할 8개
# AI assistants — context & rules
CLAUDE.md
CLAUDE.local.md
.claude/
.cursor/
.aider*
mcp.json
.mcp.json
# 환경 변수
.env
.env.local
.env.*.local
팀에서 CLAUDE.md를 공유해야 한다면, 루트의 CLAUDE.md는 "공개해도 되는 룰"만, 민감한 도메인 지식은 CLAUDE.local.md나 .claude/local/에 두고 .gitignore로 빼는 패턴을 권장합니다. 두 파일을 의도적으로 분리하는 거죠.
한 단계 더 — 글로벌 .gitignore
레포마다 .gitignore를 손대는 건 한계가 있습니다. macOS 기준 한 번만 설정해두면 모든 레포에 자동 적용됩니다.
git config --global core.excludesfile ~/.gitignore_global
echo "CLAUDE.local.md" >> ~/.gitignore_global
echo ".claude/local/" >> ~/.gitignore_global
echo ".env" >> ~/.gitignore_global
이건 "내 실수가 잠깐 졸 때 어디로 새는지"를 막는 안전망입니다. 신입 동료의 첫 PR에서 .env가 같이 올라와도 이 글로벌 룰이 한 번 더 잡아주는 거죠.
이미 커밋해버렸다면
방금 "앗" 했다면 단순히 파일을 지우는 걸로는 안 됩니다. 깃 히스토리에 남은 내용은 누구든 git log로 꺼낼 수 있어요. 정공법은 두 가지입니다.
- 민감 토큰·API 키가 들어갔다면: 즉시 발급사에서 키 회전(rotate). 히스토리 정리는 그 다음.
- CLAUDE.md 같은 텍스트라면:
git filter-repo로 해당 경로를 히스토리에서 통째로 제거하고 force-push. 그리고 팀원 전원에게 fresh clone을 요청하세요. 협업 중이면 정리 시점을 미리 공지하는 게 안전합니다.
FAQ
Q. CLAUDE.md를 팀에 공유하면서도 보호하려면 어떻게?
루트의 CLAUDE.md에는 "이 레포는 TypeScript / pnpm을 씁니다" 같은 공개 가능한 룰만 두고, 민감한 정보(서비스 이름, 내부 API, 인시던트 학습)는 CLAUDE.local.md로 분리해 .gitignore에 넣으세요. 팀원에게는 별도 채널(Notion, 사내 위키)로 공유합니다.
Q. Cursor의 .cursor/rules도 똑같이 처리해야 하나?
네. Cursor의 .cursor/rules/, .cursor/mcp.json 모두 같은 위험을 가집니다. AI 어시스턴트 관련 설정 디렉터리는 일단 .gitignore 후보로 두고, 공개해도 되는 부분만 선별 커밋하는 방향이 안전합니다.
Q. 회사 정책으로 강제하려면?
Git pre-commit hook으로 CLAUDE.md 같은 패턴을 차단하거나, GitHub의 push protection / secret scanning을 켜두는 방법이 있습니다. 사람의 주의력에만 의존하는 룰은 결국 한 번은 뚫립니다.
마무리
애플도 똑같이 당했다는 사실이 의외로 위로가 됩니다. 동시에 경고이기도 하죠. CLAUDE.md를 안 쓴다면 모를까, 쓰는 순간부터 그 파일은 "내 머릿속을 외부에 옮겨 적은 문서"가 됩니다. 오늘 5분만 들여 .gitignore를 점검해두면, 다음 인시던트의 주인공이 내가 될 확률을 단숨에 낮출 수 있는 거예요.
댓글 0
아직 댓글이 없습니다