"CLAUDE.md 작성 가이드 2026 — 넣어야 할 것 · 넣지 말아야 할 것 · 안티패턴"

공식 문서 기준 4가지 위치, 로딩 규칙, 200줄 상한, @import 구문, .claude/rules/까지


핵심 요약

  • 대상 독자: /init으로 CLAUDE.md는 만들어봤지만 뭘 채워야 할지 애매한 사용자.
  • 얻을 것: 공식 /memory 문서 기준 CLAUDE.md의 4가지 위치·로딩 규칙·무엇을 넣고 뺄지·효과적 작성 3원칙·@import·.claude/rules/ 분리·안티패턴 5가지.
  • 선행 조건: Claude Code 설치 완료 (설치 완전판), 슬래시 커맨드 기초 (총정리).

1. CLAUDE.md는 무엇인가

Claude Code는 세션 간 지식을 이어주는 두 메모리 시스템을 가진다.

CLAUDE.md Auto Memory
누가 쓰는가 사용자 Claude 스스로
무엇이 들어가는가 지침·규칙 학습·패턴
범위 프로젝트 / 사용자 / 조직 작업 트리별
로드 시점 매 세션 시작 매 세션 시작 (첫 200줄 또는 25KB)
적합한 용도 코딩 표준, 워크플로, 아키텍처 빌드 명령, 디버깅 인사이트, 사용자 선호

CLAUDE.md는 사용자가 직접 써서 Claude의 행동을 유도하는 파일이고, Auto Memory는 Claude가 사용자 피드백을 반영해 자동으로 누적하는 파일이다. 둘 다 시스템 프롬프트가 아니라 컨텍스트로 주입된다 — 강제 설정이 아니라 참고 자료다. 따라서 구체적이고 간결할수록 Claude가 잘 따른다.

이 글은 CLAUDE.md에 집중한다.


2. CLAUDE.md가 놓일 수 있는 4곳

범위 경로 용도 공유 대상
Managed policy macOS: /Library/Application Support/ClaudeCode/CLAUDE.md
Linux/WSL: /etc/claude-code/CLAUDE.md
Windows: C:\Program Files\ClaudeCode\CLAUDE.md
조직 전체 정책 (IT/DevOps가 배포) 조직 모든 사용자
Project ./CLAUDE.md 또는 ./.claude/CLAUDE.md 팀 공유 프로젝트 지침 버전 관리로 팀 전체
User ~/.claude/CLAUDE.md 모든 프로젝트에 적용되는 개인 선호 본인만
Local ./CLAUDE.local.md 프로젝트별 개인 메모 (.gitignore 필수) 본인만 (현재 프로젝트)

우선순위는 더 구체적인 곳이 더 높다 — 프로젝트 > 사용자 > 조직. 단, 각 위치의 내용이 override가 아니라 concatenate된다는 점에 주의. 같은 디렉터리 안에서는 CLAUDE.local.mdCLAUDE.md 뒤에 붙는다 (나중에 읽히므로 충돌 시 개인 메모 우선).


3. 로딩 규칙 — 디렉터리 트리를 어떻게 타는가

Claude Code는 현재 작업 디렉터리에서 상위로 올라가며 각 디렉터리의 CLAUDE.md·CLAUDE.local.md를 전부 읽는다. 예:

/home/me/monorepo/          ← CLAUDE.md (공용)
├── foo/                    ← CLAUDE.md (foo 팀)
│   └── bar/                ← CLAUDE.md (bar 기능)
│       (working directory)

이 상태로 Claude를 실행하면 3개 파일 전부 순서대로 concat되어 컨텍스트에 들어간다.

3.1 하위 디렉터리는 on-demand

반대로 하위 디렉터리CLAUDE.md는 launch 시 로드되지 않는다. Claude가 그 서브디렉터리의 파일을 실제로 읽을 때 로드된다. 이 덕분에 모노레포에서도 관련 없는 서브 프로젝트 지침이 컨텍스트를 오염시키지 않는다.

3.2 --add-dir은 기본 로드하지 않음

--add-dir로 추가한 디렉터리는 파일 접근만 허용할 뿐 CLAUDE.md는 자동 로드하지 않는다. 로드하려면 환경변수로:

CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config

3.3 모노레포에서 타팀 CLAUDE.md 제외

자동 로드되는 상위 CLAUDE.md가 내 작업과 무관하다면 .claude/settings.local.json에 제외 규칙:

{
  "claudeMdExcludes": [
    "**/monorepo/CLAUDE.md",
    "/home/user/monorepo/other-team/.claude/rules/**"
  ]
}

단, managed policy CLAUDE.md는 제외할 수 없다 (조직 정책 보장).


4. 무엇을 넣고 무엇을 빼야 하는가

공식 문서의 권장은 단호하다. CLAUDE.md는 세션마다 토큰을 소비하므로 불필요한 내용은 adherence를 떨어뜨린다.

✅ 넣어야 할 것 ❌ 넣지 말아야 할 것
Claude가 추측 불가능한 bash 명령 (예: pnpm dev, make seed-db) Claude가 코드만 읽어도 알 수 있는 것 (package.json에 있는 script 나열)
언어 기본값과 다른 코드 스타일 규칙 표준 언어 컨벤션 (Claude가 이미 아는 것)
테스트 실행법과 선호 테스트 러너 긴 API 문서 (외부 docs 링크로 충분)
레포 에티켓 (브랜치 네이밍, PR 컨벤션) 자주 바뀌는 정보 (버전 번호, 연락처 등)
프로젝트 특유의 아키텍처 결정 긴 설명·튜토리얼
개발 환경의 기벽 (필수 환경변수 등) 파일 단위 코드베이스 설명
흔한 함정·non-obvious 동작 "깨끗한 코드를 작성하라" 같은 당연한 얘기

각 줄에 대해 묻는다: "이걸 빼면 Claude가 실수할 가능성이 생기나?" 아니라면 제거한다. 불어난 CLAUDE.md는 중요한 규칙을 묻어버린다.


5. 효과적 작성 3원칙

공식 best practices 페이지가 명시한 3가지.

5.1 크기 — 200줄 이하

목표는 CLAUDE.md 당 200줄 이하. 초과하면 컨텍스트 소모 증가 + adherence 감소. 공식 문서는 "Claude가 규칙을 반복해서 어긴다면 파일이 너무 길어서 규칙이 묻힌 것"이라고 설명한다.

이 규칙은 CLAUDE.md에만 적용. 반면 MEMORY.md는 첫 200줄 또는 25KB까지만 로드되며 그 이상은 무시된다 (Auto Memory는 자체적으로 topic 파일로 쪼개서 관리).

5.2 구조 — 헤더와 bullet으로 묶기

- Use ES modules (import/export), not CommonJS (require)
- Destructure imports when possible

- Typecheck after a series of changes
- Prefer running single tests, not the whole suite

스캔 가능한 구조가 dense paragraph보다 훨씬 잘 따라진다.

5.3 구체성 — 검증 가능한 수준으로

공식 예시:

애매함 (❌) 구체적 (✅)
"Format code properly" "Use 2-space indentation"
"Test your changes" "Run npm test before committing"
"Keep files organized" "API handlers live in src/api/handlers/"

강조가 필요하면 IMPORTANT: 또는 YOU MUST 같은 단어를 덧붙이면 adherence가 올라간다 (공식 권장).


6. @import 구문

CLAUDE.md는 다른 파일을 import할 수 있다. @path/to/file.

See @README.md for project overview and @package.json for available npm commands.

- Git workflow: @docs/git-instructions.md
- Personal overrides: @~/.claude/my-project-instructions.md
  • 상대 경로는 파일이 있는 디렉터리 기준 (작업 디렉터리 아님).
  • 절대 경로 사용 가능.
  • 재귀 import 허용, 최대 5 hop.
  • import된 파일도 launch 시 로드되므로 컨텍스트 절약이 아니라 파일 조직용. 용량을 진짜 줄이려면 .claude/rules/의 path-scoped 규칙을 쓴다.
  • 첫 import 시 승인 다이얼로그가 뜬다. 거절 후 변경 의사 시 해당 파일을 다시 수정하고 재승인.

7. AGENTS.md와 공존 (Codex 등)

Claude Code는 AGENTS.md직접 읽지 않는다. 레포가 이미 AGENTS.md를 쓰고 있다면 CLAUDE.md에서 import하는 방식으로 공유한다.

@AGENTS.md

## Claude Code

Use plan mode for changes under `src/billing/`.

이러면 Claude는 AGENTS.md를 먼저 읽고, 그 뒤에 Claude 전용 섹션을 덧붙인다. Codex와 중복 유지 비용 없이 한 소스로 운영 가능.


8. .claude/rules/ — 대형 프로젝트 분리

CLAUDE.md 하나에 모든 규칙을 넣기 어려울 때 .claude/rules/ 디렉터리에 주제별로 쪼갠다.

your-project/
├── .claude/
│   ├── CLAUDE.md
│   └── rules/
│       ├── code-style.md
│       ├── testing.md
│       └── security.md

.claude/rules/의 모든 .md는 재귀적으로 탐색된다. 서브디렉터리(frontend/, backend/) 가능.

8.1 path-scoped 규칙

각 rule 파일에 paths frontmatter를 주면 특정 파일 패턴에만 적용된다. 해당 경로의 파일을 Claude가 읽을 때만 로드되므로 평소엔 컨텍스트 소비 없음.

---
paths:
  - "src/api/**/*.ts"
---

- All endpoints must include input validation
- Use the standard error response format
- Include OpenAPI documentation comments

복수 패턴 + brace expansion:

paths:
  - "src/**/*.{ts,tsx}"
  - "lib/**/*.ts"
  - "tests/**/*.test.ts"

paths가 없는 규칙은 항상 로드.claude/CLAUDE.md와 같은 우선순위.

8.2 프로젝트 간 공유 (symlink)

ln -s ~/shared-claude-rules .claude/rules/shared
ln -s ~/company-standards/security.md .claude/rules/security.md

여러 프로젝트에 공용 규칙을 링크. 순환 심링크는 자동 감지.

8.3 사용자 레벨 규칙

~/.claude/rules/에 두면 모든 프로젝트에 적용. 우선순위는 프로젝트 > 사용자.


9. 안티패턴 5가지

9.1 비대한 파일

200줄 넘는 CLAUDE.md. 중요한 규칙이 장문에 묻혀서 adherence 급락. - 해결: 가지치기. "이 줄을 빼면 실수가 생기나?" 없으면 삭제. 오래된 규칙 정기 리뷰.

9.2 모순된 규칙

나쁜 예: "Use 2-space indentation" + 다른 파일에 "Follow Google style guide" (4-space). Claude가 임의로 선택. - 해결: 주기적으로 상위 CLAUDE.md + 중첩 CLAUDE.md + .claude/rules/ 전체를 훑어서 모순 제거.

9.3 "깨끗하게 작성하라" 같은 당연한 헤징

가치 없는 일반론은 구체적 규칙을 희석시킨다. - 해결: Claude가 기본적으로 잘하는 것은 적지 않는다. 왜 이 규칙이 필요한지 자문.

9.4 작업 절차를 CLAUDE.md에 넣기

"배포하려면 1) 테스트 2) 빌드 3) 푸시…" 같은 다단계 절차는 세션마다 토큰을 먹는다. - 해결: Skill(/deploy)로 이동. CLAUDE.md는 사실·규칙 위주.

9.5 /compact 후 사라진 지침 의심

프로젝트 루트 CLAUDE.md는 /compact 후에도 자동 재삽입된다 (공식 명시). 서브디렉터리 CLAUDE.md는 재삽입 안 되며 해당 디렉터리 파일을 다시 읽을 때 로드. - 해결: 대화에서만 준 지침이 사라졌다면 CLAUDE.md에 옮긴다. 중첩 CLAUDE.md는 /compact 전제로 설계하지 말 것.


10. 시작하기 — /init으로 초안 만들기

/init

Claude가 코드베이스를 분석해 빌드 명령·테스트 방법·코딩 컨벤션을 감지한 CLAUDE.md 초안을 만든다. 이미 CLAUDE.md가 있으면 개선 제안 모드로 동작.

환경변수로 인터랙티브 다단계 모드:

CLAUDE_CODE_NEW_INIT=1 claude

이 모드는 CLAUDE.md + 스킬 + 훅 중 무엇을 세팅할지 묻고, 서브에이전트가 코드베이스를 탐색한 뒤 follow-up 질문으로 갭을 메운다. 쓰기 전에 reviewable proposal로 확인.

생성 후에는 코드처럼 다룬다: 문제 생기면 리뷰, 주기적으로 pruning, Claude 동작이 바뀌는지 보고 테스트.


11. 진단 — /memoryInstructionsLoaded

11.1 /memory — 무엇이 로드됐는지 보기

세션에서 /memory를 실행하면 현재 세션에 로드된 모든 CLAUDE.md, CLAUDE.local.md, rules 파일 목록이 뜬다. 목록에 없다면 Claude가 그 파일을 읽지 않는 상태라는 뜻 — 위치 확인이 1차 점검.

11.2 InstructionsLoaded 훅 — 디버깅 시 이벤트 로깅

path-scoped 규칙이나 서브디렉터리 lazy load가 의도대로 동작하는지 확인하려면 훅 사용:

{
  "hooks": {
    "InstructionsLoaded": [
      {"type": "command", "command": "echo $CLAUDE_INSTRUCTIONS_PATH >> /tmp/claude-rules.log"}
    ]
  }
}

훅 전체 가이드는 다음 편에서 다룬다.


12. 반대 시나리오 — 이 가이드가 맞지 않는 경우

  • 프롬프트에만 지침을 주는 워크플로 → CLAUDE.md 없이도 --append-system-prompt 또는 --append-system-prompt-file로 넘기면 시스템 프롬프트 레벨에서 작동. 단, 매 호출마다 인자로 넘겨야 하므로 스크립트·자동화에 적합.
  • 엔터프라이즈 정책 강제가 필요 → CLAUDE.md는 권고일 뿐 강제 아님. 실제 차단이 필요하면 managed settings의 permissions.deny, sandbox.enabled로 기술적 enforcement를 설정. CLAUDE.md는 "하지 마" 지침이 아니라 "이렇게 해" 가이드로 쓴다.
  • 조직 정책은 CLAUDE.md, 기술 강제는 settings → 공식 문서가 명확히 분리한다:
관심사 어디에
특정 도구·경로 차단 Managed settings permissions.deny
샌드박스 격리 강제 Managed settings sandbox.enabled
인증 방법·조직 락 forceLoginMethod, forceLoginOrgUUID
코드 스타일·품질 가이드 Managed CLAUDE.md
데이터 처리·컴플라이언스 리마인더 Managed CLAUDE.md

13. 다음 단계

CLAUDE.md 기반이 잡혔다면:

  1. Claude Code 설치 완전판 — 아직 설치 전이면 먼저.
  2. 슬래시 커맨드 총정리/init, /memory, /compact 등 이 글에서 언급된 명령 전체 목록.
  3. Claude Code 훅(Hooks) 완전 가이드 — 생명주기 4종 × 실제 스크립트 — CLAUDE.md가 권고라면 훅은 강제 (예정).

참고


이 글은 "AI 코딩 CLI 진입 가이드" 시리즈의 3/15 편입니다. last verified: 2026-04-25 (Claude Code 공식 Memory + Best Practices 기준).

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"