CLAUDE.md란?
CLAUDE.md는 Anthropic의 Claude Code가 대화를 시작할 때 자동으로 읽는 마크다운 파일이다.
프로젝트의 빌드 명령어, 코드 스타일, 테스트 방법, 아키텍처 결정 등 Claude가 코드만 읽어서는 알 수 없는 정보를 담는다.
핵심 원칙: Claude가 코드를 읽으면 알 수 있는 내용은 넣지 않는다. 언어의 표준 컨벤션, 자명한 코드 패턴, 일반적인 라이브러리 사용법 등은 불필요하다.
파일 계층 구조
CLAUDE.md는 3단계 + 로컬 파일로 구성된다. 상위 → 하위 순으로 로드되며, 모두 합쳐서 컨텍스트에 주입된다.
Level 1 — Global
~/.claude/CLAUDE.md
모든 프로젝트에 적용되는 글로벌 설정. 개인 코딩 스타일, 선호하는 도구, 공통 별칭 등을 넣는다. 예: "TypeScript를 선호한다", "테스트는 vitest로 실행한다".
Level 2 — Project Root
./CLAUDE.md
프로젝트 루트에 위치. Git에 커밋해서 팀 전체가 공유한다. 빌드 명령어, 아키텍처 결정, 코드 리뷰 기준 등 프로젝트 전반의 맥락을 담는다.
Level 2.5 — Local (gitignored)
./CLAUDE.local.md
개인용 프로젝트 노트. .gitignore에 추가해서 커밋하지 않는다. 로컬 환경 설정, 개인 단축키, 임시 작업 메모 등.
Level 3 — Subdirectory
./src/backend/CLAUDE.md
하위 디렉토리에 위치. 해당 디렉토리의 파일을 작업할 때만 로드된다. 모노레포에서 각 패키지별 규칙을 정의하는 데 유용하다.
모노레포 팁:
packages/frontend/CLAUDE.md와 packages/api/CLAUDE.md처럼 패키지별로 분리하면, Claude가 프론트엔드 코드를 수정할 때는 프론트엔드 규칙만, API 코드를 수정할 때는 API 규칙만 참조한다.
디렉토리 구조 예시
실제 프로젝트에서 CLAUDE.md와 관련 파일을 배치하는 패턴
# 일반 프로젝트
my-project/
├── CLAUDE.md # 프로젝트 전체 규칙 (git 커밋)
├── CLAUDE.local.md # 개인 설정 (.gitignore)
├── .claude/
│ └── skills/ # 재사용 가능한 스킬 파일
│ ├── deploy.md
│ └── db-migrate.md
├── src/
│ ├── frontend/
│ │ └── CLAUDE.md # 프론트엔드 전용 규칙
│ └── backend/
│ └── CLAUDE.md # 백엔드 전용 규칙
└── ...
# 모노레포
monorepo/
├── CLAUDE.md # 공통 규칙 (린트, 커밋 컨벤션)
├── packages/
│ ├── web/
│ │ └── CLAUDE.md # React 규칙, 번들러 설정
│ ├── api/
│ │ └── CLAUDE.md # Express 규칙, DB 마이그레이션
│ └── shared/
│ └── CLAUDE.md # 공유 라이브러리 규칙
└── ...
# 글로벌 설정 (홈 디렉토리)
~/.claude/
├── CLAUDE.md # 모든 프로젝트에 적용
└── skills/ # 글로벌 스킬
무엇을 넣고, 무엇을 넣지 말까
넣어야 할 것
- Claude가 추측할 수 없는 빌드/테스트 명령어
- 프로젝트 고유의 코드 스타일 규칙
- 테스트 실행 방법과 선호하는 러너
- 브랜치 네이밍, PR 컨벤션
- 중요한 아키텍처 결정과 그 이유
- 개발 환경의 특이사항
- Claude가 반복적으로 틀리는 패턴 교정
- 자주 틀리는 import 경로
넣지 말아야 할 것
- 코드를 읽으면 알 수 있는 내용
- 언어의 표준 컨벤션 (PEP8 등)
- 상세한 API 문서 (링크로 대체)
- 자주 변경되는 정보
- "깨끗한 코드를 작성하라" 같은 자명한 지시
- 수백 줄의 장문 (200줄 이내 권장)
- 다른 파일과 중복되는 내용
- 환경변수나 시크릿
실전 예제
프로젝트 유형별 CLAUDE.md 작성 예제
React + TypeScript 프로젝트
# CLAUDE.md
## 빌드 & 테스트
- dev: pnpm dev (Vite, port 5173)
- build: pnpm build
- test: pnpm vitest run
- 단일 테스트: pnpm vitest run src/hooks/useAuth.test.ts
- lint: pnpm eslint . --fix
- type check: pnpm tsc --noEmit
## 코드 스타일
- 컴포넌트는 named export만 사용 (default export 금지)
- 스타일은 CSS Modules (.module.css) 사용, styled-components 금지
- 상태 관리는 Zustand, React Context 금지
- API 호출은 반드시 src/api/ 디렉토리의 함수를 통해서만
- 에러 바운더리는 src/components/ErrorBoundary.tsx 사용
## 아키텍처
- src/features/에 도메인별 디렉토리 (feature-based architecture)
- 공유 컴포넌트는 src/components/ui/
- 훅은 src/hooks/, 유틸은 src/utils/
- 라우팅은 React Router v6, createBrowserRouter 사용
## 중요
- IMPORTANT: PR 전에 반드시 pnpm tsc --noEmit 통과 확인
- 새 페이지 추가 시 src/router.tsx에 라우트 등록 필수
Python FastAPI 프로젝트
# CLAUDE.md
## 환경
- Python 3.12 + uv (pip 사용 금지)
- 의존성 추가: uv add 패키지명
- dev 서버: uv run uvicorn app.main:app --reload
- test: uv run pytest -x -q
- 단일 테스트: uv run pytest tests/test_auth.py -x -q
## 코드 스타일
- 타입 힌트 필수 (mypy strict 모드)
- Pydantic v2 모델 사용, dataclass 금지
- async def 기본, sync는 CPU-bound 작업만
- 로깅은 structlog 사용, print 금지
## DB
- SQLAlchemy 2.0 + async session
- 마이그레이션: alembic revision --autogenerate -m "설명"
- IMPORTANT: 마이그레이션 후 반드시 uv run alembic upgrade head 실행
@import를 활용한 모듈화
# CLAUDE.md — @import로 다른 파일을 참조할 수 있다
## 공통 규칙
이 프로젝트는 모노레포다. 각 패키지의 규칙은 해당 디렉토리의
CLAUDE.md를 참조한다.
@docs/architecture.md # 아키텍처 문서를 컨텍스트에 포함
@docs/api-conventions.md # API 설계 컨벤션
@.github/PULL_REQUEST_TEMPLATE.md # PR 템플릿 참조
Skills 시스템
CLAUDE.md에 모든 걸 넣는 대신, 특정 작업을 위한 지시를 별도 스킬 파일로 분리할 수 있다.
# .claude/skills/deploy.md
# 배포 시 사용하는 스킬. /deploy로 호출
## 배포 절차
1. main 브랜치에서 최신 pull
2. pnpm build로 빌드 확인
3. pnpm test로 전체 테스트 통과 확인
4. git tag v{버전}으로 태그 생성
5. git push origin main --tags
6. GitHub Actions가 자동 배포 시작
7. https://status.example.com 에서 배포 상태 확인
.claude/skills/
스킬 파일 디렉토리. 각 .md 파일이 하나의 스킬이 된다. /스킬이름으로 호출 가능.
CLAUDE.md vs Skills
항상 적용할 규칙은 CLAUDE.md에, 특정 상황에서만 필요한 지시는 Skills에 넣는다.
/init
Claude Code의 /init 명령으로 프로젝트에 맞는 CLAUDE.md 초안을 자동 생성할 수 있다.
시작하기: 5단계
1
/init으로 초안 생성
Claude Code에서
/init 명령을 실행하면 프로젝트 구조를 분석해서 CLAUDE.md 초안을 만들어준다.2
빌드/테스트 명령어 추가
가장 중요한 섹션.
dev, build, test, lint 명령어를 정확하게 기록한다.3
Claude가 틀리는 패턴 교정
Anthropic의 골든 룰: "Claude가 뭔가를 잘못할 때마다 CLAUDE.md에 추가하라." 반복되는 실수를 교정하는 가장 효과적인 방법이다.
4
팀과 공유
CLAUDE.md를 Git에 커밋하고, 개인 설정은 CLAUDE.local.md로 분리해서 .gitignore에 추가한다.
5
정기적으로 다듬기
200줄을 넘기면 신호 대 잡음 비율이 떨어진다. 불필요한 항목을 정리하고, 오래된 규칙을 갱신한다. 코드처럼 관리한다.
CLAUDE.md 작성 골든 룰
- Claude가 실수할 때마다 CLAUDE.md에 교정 규칙을 추가한다
IMPORTANT,YOU MUST같은 강조 표현은 준수율을 높인다- 200줄 이하를 유지한다 — 300줄 이상이면 신호가 희석된다
- 코드를 읽으면 알 수 있는 정보는 넣지 않는다
- 자주 변경되는 정보는 넣지 않는다 — 링크로 대체한다
- 예제를 넣으면 Claude가 패턴을 더 정확하게 따른다
- CLAUDE.md를 코드처럼 리뷰하고, 정기적으로 prune한다
- 팀 규칙은 CLAUDE.md에, 개인 설정은 CLAUDE.local.md에 분리한다