Claude Code Configuration

CLAUDE.md 완전 가이드

Claude Code가 매 대화마다 읽는 프로젝트 설정 파일.
코드만으로 알 수 없는 맥락을 전달하는 핵심 수단.

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 공식 문서
code.claude.com/docs/ko/memory
Claude Code 베스트 프랙티스
code.claude.com/docs/ko/best-practices
Anthropic 엔지니어링 블로그
anthropic.com/engineering/claude-code-best-practices
Claude Code 설정 가이드
code.claude.com/docs/ko/settings

CLAUDE.md 작성 골든 룰

  • Claude가 실수할 때마다 CLAUDE.md에 교정 규칙을 추가한다
  • IMPORTANT, YOU MUST 같은 강조 표현은 준수율을 높인다
  • 200줄 이하를 유지한다 — 300줄 이상이면 신호가 희석된다
  • 코드를 읽으면 알 수 있는 정보는 넣지 않는다
  • 자주 변경되는 정보는 넣지 않는다 — 링크로 대체한다
  • 예제를 넣으면 Claude가 패턴을 더 정확하게 따른다
  • CLAUDE.md를 코드처럼 리뷰하고, 정기적으로 prune한다
  • 팀 규칙은 CLAUDE.md에, 개인 설정은 CLAUDE.local.md에 분리한다