CLAUDE.md 최적화: AI를 위한 인수인계 문서이자 헌법 (프로젝트 메모리)

CLAUDE.md 최적화: AI를 위한 인수인계 문서이자 헌법 (프로젝트 메모리)

CLAUDE.md는 단순한 메모장이 아니다. 매번 세션이 시작될 때마다 고용되는 '시니어 AI 개발자'에게 건네는 인수인계서이자, 프로젝트의 헌법이다.

1. 핵심 개념: "매 세션마다 고용되는 시니어 개발자를 위한 인수인계서"

정의: CLAUDE.md는 Claude Code가 세션을 시작할 때마다 가장 먼저, 그리고 자동으로 읽어들이는 파일이다. AI에게 프로젝트의 문맥, 규칙, 아키텍처를 주입하는 "시스템 프롬프트"의 확장판 역할을 한다.

왜 최적화해야 하는가? (The Cost of Memory)

  • 토큰 세금: 이 파일은 모든 세션의 시작점에 로드된다. 파일이 크면 클수록 작업을 시작하기도 전에 기본 토큰 비용(Overhead)이 발생한다.
  • 주의력 분산 (Instruction Drift): 내용이 너무 길거나(300줄 이상) 불필요한 정보가 많으면, AI가 핵심 규칙을 무시하거나 "환각(Hallucination)"을 일으킬 확률이 높아진다. Anthropic 분석 결과, 너무 많은 지침은 모델 성능을 저하시킬 수 있다.
  • 속도 저하: 불필요한 컨텍스트 로딩은 초기 응답 속도(Time to First Token)를 늦춘다.

2. 메모리 계층 구조 (The Hierarchy of Context)

CLAUDE.md 하나에 모든 것을 다 넣으려 하지 마라. 계층적 구조(Tiered Architecture)를 사용하여 토큰 효율성과 유지보수성을 동시에 잡아야 한다. 설정은 상위에서 하위로 상속/병합된다.

계층 (Priority) 파일 위치 역할 및 포함 내용 권장 토큰량
1. Global (User) ~/.claude/CLAUDE.md 개인적 선호도: "항상 한국어로 답해", "리팩토링 시 주석 달지 마", 개인 API 키 관리 방식 등 모든 프로젝트에 적용될 규칙. < 300 토큰
2. Project (Root) ./CLAUDE.md 팀 공통 규칙: 기술 스택(버전 포함), 아키텍처 패턴(Clean Arch 등), 핵심 빌드/테스트 명령어, 코드 스타일. < 1,000 토큰
3. Subsystem ./src/auth/CLAUDE.md 모듈별 특수 규칙: 특정 폴더(예: 인증 모듈) 내에서만 유효한 로직이나 컨벤션. Claude Code가 해당 디렉토리에서 작업할 때만 로드됨. 500~1,500 토큰
4. Reference ./docs/*.md 상세 문서: 절대 CLAUDE.md에 내용을 직접 넣지 않고, @docs/api.md 형태로 참조(Pointer)만 함. 0 (필요시 로드)

Tip (AGENTS.md 표준): 최근 업계에서는 CLAUDE.md 대신 AGENTS.md를 사용하여 Cursor, Copilot, Windsurf 등 다양한 AI 도구가 공유할 수 있는 표준 설정 파일을 만드는 추세다. ln -s AGENTS.md CLAUDE.md로 심볼릭 링크를 걸어 호환성을 확보하자.


3. 최적화 전략 A: 진보적 공개 (Progressive Disclosure)

모든 정보를 한 번에 주입하는 것이 아니라, "지도가 어디에 있는지"만 알려주는 전략이다.

  • Bad Pattern (Monolithic): CLAUDE.md 안에 500줄짜리 데이터베이스 스키마와 API 명세서를 전부 적어넣는 것. (토큰 낭비, 주의력 저하)
  • Good Pattern (Pointer System):
## Documentation Map
- Authentication logic: See @src/auth/README.md
- Database Schema: See @docs/schema.sql
- API Endpoints: See @src/api/routes.ts

이 방식을 사용하면 Claude Code는 평소에는 가벼운 상태를 유지하다가, 인증 관련 질문을 받을 때만 스스로 @src/auth/README.md를 읽어(Read Tool) 문맥을 확장한다.


4. 최적화 전략 B: "Linter의 일을 AI에게 시키지 마라"

가장 흔한 실수는 CLAUDE.md를 "비싼 Linter"로 쓰는 것이다.

  • 제거 대상: "들여쓰기는 스페이스 2칸", "세미콜론 필수", "변수명은 camelCase" 같은 스타일 규칙.
  • 이유: 이런 규칙은 ESLint, Prettier, .editorconfig가 훨씬 빠르고 정확하게 처리한다. AI에게 이런 걸 시키면 토큰만 낭비하고, 정작 중요한 아키텍처 규칙을 까먹게 만든다.
  • 대체 문구: "Code style follows standard ESLint config. Run npm run lint to verify." 한 줄이면 충분하다.

5. 작성 프레임워크: WHAT - WHY - HOW

Anthropic이 권장하고 전문가들이 사용하는 구조적 작성법이다.

  1. WHAT (기술 스택 & 구조):
    • "Node.js v20, TypeScript, Prisma ORM 사용."
    • "src/core는 비즈니스 로직, src/adapters는 외부 연동."
  2. WHY (설계 철학 & 의도):
    • "우리는 클린 아키텍처를 따르므로 도메인 레이어는 외부 라이브러리에 의존해선 안 됨."
    • "성능보다 가독성을 우선함."
  3. HOW (워크플로우 & 명령어):
    • "테스트는 npm test로 실행."
    • "DB 마이그레이션은 npx prisma migrate dev 사용."
    • 중요: "자주 실수하는 부분(Gotchas)"을 기록해두면 디버깅 시간을 획기적으로 줄일 수 있다(예: "이 모듈은 순환 참조 문제가 있으니 주의").

6. 실전 운영 팁 (Maintenance)

  • # 명령어로 라이브 업데이트: 작업을 하다가 Claude Code가 뭔가를 잘 수행했거나 새로운 규칙을 발견하면, 터미널에서 # 항상 테스트 코드를 먼저 작성해라고 입력하라. Claude Code가 즉시 이 내용을 메모리에 추가하거나 파일에 기록한다.
  • 주기적 가지치기 (Pruning): 프로젝트가 진행됨에 따라 CLAUDE.md는 비대해질 수 있다. 정기적으로 내용을 검토하여 이미 AI가 잘 알고 있는 내용이나 더 이상 쓰지 않는 레거시 규칙은 과감히 삭제하라.
  • 동적 헤더 활용: CLAUDE.md 대신 스크립트를 훅(Hook)으로 연결하여 현재 Git 브랜치 이름이나 최근 커밋 로그 같은 동적인 정보를 프롬프트에 주입하는 것도 고급 전략 중 하나다.

📝 샘플 템플릿 (Copy & Paste)

[이상적인 Root CLAUDE.md 예시 (100줄 미만)]

# Project Context

## Tech Stack
- Next.js 14 (App Router), TypeScript, TailwindCSS
- State: Zustand
- DB: Supabase (PostgreSQL)

## Architecture Rules
- **Layered Arch**: UI Components -> Features -> Services -> API
- Never import server-only code in client components.
- Use `@/` alias for imports.

## Key Commands
- Start: `pnpm dev`
- Test: `pnpm test` (Run related tests only)
- Lint: `pnpm lint --fix`

## Documentation Map (Read on demand)
- API Specs: @docs/api-v1.md
- Auth Flow: @docs/auth-diagram.mermaid
- DB Schema: @prisma/schema.prisma

## Workflow
1. Create a plan before coding complex features.
2. Verify changes with `pnpm test`.
3. Keep commits atomic and use Conventional Commits.