이 글은 Claude Code를 실무에 도입하면서 정리한 설정 방법과 코드 리뷰 자동화 경험을 담고 있다. Claude Code를 처음 설정하거나 AI 기반 코드 리뷰 자동화에 관심 있는 개발자를 대상으로 한다.
글의 구성은 설정 구조 파악 → 코드 리뷰 자동화 적용 → 실패 학습 루프 구현 순이다. 설정을 먼저 이해하면 코드 리뷰 프로세스 전체 흐름을 훨씬 빠르게 파악할 수 있어 그 순서로 설명한다.
예시에 사용된 프로젝트는 Rust 프로젝트다. 설정 부분에 Rust 코딩 가이드가 일부 포함되어 있으나, Rust를 몰라도 전체 흐름을 이해하는 데 문제없다.
Claude 설정 파일
Claude Code Docs의 내용을 스터디한 결과와 Claude와 내가 대화를 통해 정리한 내용, 실제 프로젝트에 운영한 경험을 녹여 기술했다.
전체 설정 파일
1. 전체 계층 구조
| 기능 | 사용자 위치 | 프로젝트 위치 | 로컬 위치 |
| CLAUDE.md | ~/.claude/CLAUDE.md | CLAUDE.md 또는 .claude/CLAUDE.md | CLAUDE.local.md |
| Settings | ~/.claude/settings.json | .claude/settings.json | .claude/settings.local.json |
| Subagents | ~/.claude/agents/ | .claude/agents/ | — |
| MCP servers | ~/.claude.json | .mcp.json | .claude/settings.local.json |
| Plugins | ~/.claude/settings.json | .claude/settings.json | .claude/settings.local.json |
.claude/
├── settings.json # 프로젝트 설정
├── settings.local.json # 로컬 설정(.gitignore)
├── rules/ # 프로젝트 규칙
├── commands/ # 사용자 정의 명령
├── skills/ # 스킬
├── agents/ # 하위 에이전트
└── output-styles/ # 아웃풋 스타일2. Claude Code의 처리 흐름
전체 프로세스를 알고 각 설정파일의 용도를 알면 이해하는데 도움을 받을 것 같아서 먼저 Claude의 처리 흐름을 도식화해본다.
위 그림에서 보듯이 CLAUDE.md 또는 rules/ 내용은 매번 요청에 포함된다. 즉, 설정이 많을수록 토큰을 소비한다. 사용중인 토큰은 /context 에서 확인 가능하다.
CLAUDE.md
Claude Code가 프로젝트를 이해하고 규칙을 따르도록 하는 핵심 설정 파일이다. 짧으면 짧을수록 좋다. 바람직한 것은 50행 이하다. Anthropic의 Claude Code Best Practices에서도 “CLAUDE.md가 너무 길면 Claude는 절반을 무시한다”고 지적되고 있으며 HumanLayer 가이드에서 “가능한 한 적은 지시로 해야한다”고 적혀 있다.
1. 계층 구조
| 배치 위치 | 경로 | 용도 |
| 엔터프라이즈 | /Library/Application Support/ClaudeCode/CLAUDE.md(macOS)/etc/claude-code/CLAUDE.md(Linux) | 기업 코딩 표준, 보안 정책 |
| 사용자 레벨(모든 프로젝트 공통) | ~/.claude/CLAUDE.md | 개인 코드 스타일 설정 |
| 공유 프로젝트 | ./CLAUDE.md, ./.claude/CLAUDE.md | 프로젝트별 설정(git으로 공유) |
| 로컬 개인 설정 | ./CLAUDE.local.md | 개인 설정(gitignore 권장) |
우선 순위는 로컬 개인 > 공유 프로젝트 > 사용자 레벨 > 엔터프라이즈 순이다.
2. 써야 할 것과 쓰지 말아야 할 것
| 써야 할 것 | 써서는 안되는 것 |
| 코드에서 추측할 수 없는 프로젝트별 판단 | 코드 스타일 규칙(린터, 포멧터에게 맡기기) |
| 복잡한 빌드/테스트 명령 | 디렉토리 구조 설명 |
| 중요한 gotcha와 footgun | 범용 프로그래밍 조언 |
| 도메인별 용어 | ‘Important Context’와 같은 캐치올(Catch-all) 섹션 |
| 리포지토리 작성(브랜치 명명 규칙, PR 관습 등) | 자세한 API 문서(대신 링크 붙여넣기) |
| 프로젝트별 아키텍처 결정 | 기술 스택 설명 (에이전트는 build.gradle, pom.xml, package.json, go.mod를 읽을 수 있음) |
3. 사이즈
Anthropic의 공식 문서는 “200 줄 이하”를 명시하지만, 이것은 상한이며 목표가 아니다. 지시가 늘어날수록 준수율은 낮아진다.IFScale연구는 150-200 지시의 시점에서 primacy bias (선두 지시에 편향)가 현저하게 되고 성과가 떨어지기 시작하는 것을 보여주었다. “150까지 괜찮다”가 아니라 “150부터 깨지기 시작한다”고 읽어야 한다.
Vercel은 40KB를 8KB로 압축해도 100%의 패스율을 유지했다고 한다. 압축도 적극적으로 하면 좋다.
4. 설정 파일이 아닌 살아있는 문서
가장 간과되기 쉬운 포인트다. CLAUDE.md(AGENTS.md)는 .gitignore 같은 “한 번 쓰면 끝나는” 설정 파일이 아니라 프로젝트와 함께 계속 변화하는 살아있는 문서이다.
- 명령이 변경되면 즉시 업데이트.
- 아키텍처가 크게 바뀌면 모두 다시 쓴다.
- 에이전트가 코드에서 추측 할 수 있게 된 정보는 지운다.
이를 위해서 Anthropic에서 CLAUDE.md를 개선하는 플러그인을 만들었다. 주로 하는일은 아래와 같이 두가지다.
- CLAUDE.md의 품질 감사
- 6개 항목(명령어 포괄성·아키텍처 명확성·간결성 등)으로 점수 매긴다.
- 실제 폴더 구성과 CLAUDE.md를 대조해서 현행화 필요할 경우 diff로 제안한다.
- 세션 종료 시 학습 기록(/revise-claude-md)
- 그 세션에서 발견한 명령어·gotchas·패턴을 자동 추출해서 CLAUDE.md에 추가 제안을 한다.
Settings
1. 계층 구조
프로젝트 설정은 .claude/settings.json, 전역 설정은 ~/.claude/settings.json에 위치한다. 우선순위는 로컬 > 프로젝트 > 전역 순이다.
.claude/settings.json2. 보안 관련 설정
샌드박스 활성화해 Claude Code가 실행하는 Bash 명령이 OS 수준에서 격리되어 파일 시스템 및 네트워크에 대한 액세스가 제한한다. 샌드박스는 기본적으로 “탈출구(escape hatch)“를 제공하며 특정 명령이 샌드박스 외부에서 실행될 수 있다. 이것도 막아야 한다.
{
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false,
"filesystem": {
"denyRead": ["~/.aws/credentials", "~/.ssh"]
},
"network": {
"allowedDomains": [
"github.com",
"*.githubusercontent.com",
"*.npmjs.org",
"registry.yarnpkg.com",
"pypi.org"
]
}
}
}위험한 명령을 deny 규칙으로 차단한다. 규칙의 평가 순서는 deny → ask → allow 이다. 거부 규칙은 최우선으로 적용된다.
{
"permissions": {
"deny": [
"Bash(rm -rf *)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(git push *)",
"Bash(chmod 777 *)"
]
}
}
기밀 파일에의 액세스를 거부한다.
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(./config/credentials.json)",
"Read(**/*.pem)",
"Read(**/*.key)"
]
}
}bypassPermissions 모드를 비활성화한다. --dangerously-skip-permissions플래그는 모든 권한 검사를 건너뛰는 모드이다. 팀 개발에서는 특히 이 플래그를 완전히 사용 불가능하게 해야 한다.
{
"permissions": {
"disableBypassPermissionsMode": "disable"
}
}3.Hooks
Hooks는 특정 도구 이벤트가 발생할 때 자동으로 실행되는 기능이다.
| 이벤트 | Matcher 대상 | 용도 예 |
| PreToolUse | 도구 이름(Bash, Edit, Write등) | 위험한 명령 블록, 쓰기 제한 |
| PostToolUse | 도구 이름(Edit, Write등) | 파일 편집 후 자동 포맷 |
| Notification | 알림 유형(빈 문자열로 전체 수신) | 입력 대기 · 완료 시 데스크탑 알림 |
| SessionStart | 시작 방법(startup, compact등) | 세션 시작시 컨텍스트 주입 |
| Stop | (없음) | 작업 완료시의 후처리 |
| PermissionRequest | (없음) | 권한을 요청하기 전에 실행 |
| PreCompact | (없음) | 컨텍스트를 압축하기 전에 실행 |
| SubagentStop | (없음) | 하위 에이전트가 종료될 때 실행됨 |
| UserPromptSubmit | (없음) | 프롬프트 확인, 추가 컨텍스트 주입 |
Agents
위임된 전문가의 역할을 하고, 특정 작업을 하도록 설계된 전문화된 하위 에이전트다.
1. 계층구조
.claude/agents/디렉토리에 Markdown 파일을 만든다.
2. Subagents 구성 옵션
| 옵션 | 설명 | 예 |
| name | Subagent의 고유 이름 | code-reviewer |
| description | 역할 설명(Claude가 어떤 subagent를 사용할지 결정할 때 참조) | 코드 품질, 가독성 및 모범 사례 검토 |
| tools | 사용을 허용하는 도구 | Read, Grep, Glob, Bash |
| model | 사용할 모델 | opus,sonnet등 |
스킬에서도 서브에이전트를 context: fork를 호출하면 분리 컨텍스트에서 실행 가능하다. 병렬도 상한은 10이고 초과분은 큐에 기록된다.
---
name: Heavy Analysis
description: 대규모 분석을 격리 컨텍스트에서 실행
context: fork
agent: security-reviewer
---
# 분석 기술
이 기술은 포크된 독립 컨텍스트이며 지정된 서브에이전트(security-reviewer)에 의해 실행됩니다.context: fork 와 agent가 결합하면 특정 하위 에이전트가 격리 컨텍스트에서 작업을 실행하게 할 수 있다. 메인 컨텍스트를 압박하지 않고 전문 에이전트의 지식을 활용할 수 있다.
3. 내장 에이전트
| 에이전트 | 모델 | 용도 |
| Bash | inherit | Bash 명령 실행 전문가. git 조작, 명령 실행 등의 터미널 태스크 |
| general-purpose | sonnet | 범용 에이전트. 복잡한 질문 조사, 코드 검색, 다중 단계 작업 수행 |
| statusline-setup | sonnet | 사용자의 상태 라인 설정 구성 |
| Explore | haiku | 코드 베이스 탐색에 특화된 경량 에이전트. 컨텍스트 효율성을 최적화하면서 파일 검색 및 코드 검색 수행 |
| Plan | inherit | 계획 생성에 특화. Plan 모드에서 작동하고 구현 전략 설계 |
| claude-code-guide | haiku | Claude Code의 기능에 대한 질문에 대한 공식 문서를 참조하여 답변 |
Skills
코딩 표준, 백엔드 패턴 등 워크플로우와 도메인 지식을 정의한다. AI가 자동으로 실행해주는 커스텀 슬래시 명령이기도 하다. CLAUDE.md는 파일 사이즈가 크면 컨텍스트를 압박하지만, Skills는 필요한 상황에서 필요한 Skill을 로드하므로 컨텍스트를 압박하지 않는다. 그래도 SKILL.md는 500줄 이내로 하는 것이 좋다.
서브에이전트는 특정 작업을 처리하는 전문화된 AI 어시스턴트이고 자신의 컨텍스트 창에서 실행되며 주 대화 이력에 액세스하지 않는다. 완료 후 결과만 메인 대화에 반환된다.(참조 : Sub-agents - Claude Code 공식 문서)
1. 계층 구조
| 배치 위치 | 경로 | 적용 범위 |
| 엔터프라이즈 | 관리 설정에서 지정 | 조직의 모든 사용자 |
| 개인 | ~/.claude/skills/<skill-name>/SKILL.md | 자신의 모든 프로젝트 |
| 프로젝트 | .claude/skills/<skill-name>/SKILL.md | 이 프로젝트만 |
같은 이름의 Skills가 여러 계층에 있는 경우 우선순위는 프로젝트 > 개인 > 엔터프라이즈 순서이다.
skill-name/
├── SKILL.md # 필수. 지시 본체
├── scripts/ # 선택. 실행 가능한 코드
├── references/ # 선택. 보충 문서
└── assets/ # 선택. 템플릿2.Skills의 동작
- 우선 전체 스킬의
name과description만을 확인(경량) - 관련이 있다고 판단한 스킬
SKILL.md본문 로드 - 필요에 따라
references/등의 추가 파일을 로드
모든 스킬을 처음부터 읽는 것이 아니라 필요할 때 필요한 것만 읽는다. 컨텍스트 창을 압박하지 않는 것이 포인트이다.
슬래시 명령과의 관계는 /review 명령을 실행한다고 할 경우 .claude/commands/review.md 파일과 .claude/skills/review/SKILL.md 스킬은 모두 /review를 만들고 같은 방식으로 작동한다. 스킬은 추가 기능을 제공한다.
frontmatter에 context: fork 붙이면 스킬이 하위 에이전트로 격리 실행되고 Skills이 실행되지 않을 때는 description 을 검토해야 한다. Claude가 “언제 사용해야하는지”를 결정할 수 있는 정보가 없는 경우에 그럴 가능성이 있다. 수동 실행(/fix-issue 123) 방법도 있으니 참고하면 된다.
3. 다른 메커니즘과의 구분
- Skills vs CLAUDE.md
| 구분 | Skills | CLAUDE.md |
| 역할 | 전문 작업의 실행 방법 을 기술한다. | 프로젝트 관련 정보 를 Claude에 알린다. |
| 범위 | 모든 프로젝트에서 사용할 수 있는 전문 지식 | 특정 리포지토리에 묶는다(기술 스택, 규약 등) |
- Skills vs MCP 서버
| 구분 | Skills | MCP 서버 |
| 역할 | 데이터를 어떻게 처리해야 하는지 기술한다. | 외부 데이터 소스에 연결 을 제공한다. |
| 예 | 쿼리 최적화 패턴을 가르치기 | GitHub 및 DB에 액세스 가능 |
- Skills vs Subagents
| 구분 | Skills | Subagents |
| 성격 | 휴대용 전문 지식 | 독자적인 컨텍스트를 가지는 특화형 AI 어시스턴트 |
| 특징 | 모든 에이전트에서 사용 가능 | 고정 역할(FE 개발자, UI 검토자 등) |
- Skills vs Command
| 구분 | Skills | Command |
| 호출 방식 | Model 호출(/명령 도 가능) | User 호출(/명령) |
| 저장 위치 | .claude/skills/ | .claude/commands/ |
| 주요 용도 | 특정 작업 전문성 | 자주 쓰는 프롬프트 |
| 도구 제한 | allowed-tools | 불가 |
| 공유 범위 | 개인/프로젝트 | 프로젝트 |
Commands
“/명령” 으로 명시적으로 호출하는 User-invoked 프롬프트 템플릿이다. 기존에는 command/명령.md 파일을 기반으로 CLAUDE.md + rules를 참고하여 실행한다.
1. 2계층 구성
Command(명령)→ Claude가 실행
예: /code-review 85
→ commands/code-review.md 파일 + CLAUDE.md + rules 참조하면서 실행
2. 3계층 구성
Command(명령)→ Agent(실행자)→ Skills(기술 + 도메인 지식)
예: /code-review 85
→ agent-reviewer 에이전트 시작
→ 기술, 도메인지식, 언어별 체크리스트 스킬 프리로드
→ 리뷰어가 기술과 도메인 지식을 사용하여 리뷰 수행
3. 추세
최근에 Claude 문서에 보면 커맨드가 스킬에 통합되었다. .claude/commands/deploy.md 파일과 .claude/skills/deploy/SKILL.md 스킬은 모두 /deploy 디렉토리를 생성하고 동일한 방식으로 작동한다. 사용자가 실행할지 Claude가 실행할지 제어하는 프런트매터, 그리고 필요할 때 Claude가 자동으로 로드할 수 있는 기능이 있어 SKills에 정의하는 것을 추천하는 편이다.
그리고 자동으로 처리할 경우 3계층 구성(Command→Agent→Skills)으로 하는 것도 늘어나는 추세이다.
Rules
보안, 코딩 스타일 등 프로젝트에서 항상 준수해야할 지침을 기술한다. CLAUDE.md를 여러 파일로 분할하여 관리하는 메커니즘이다. 프로젝트가 커지면 CLAUDE.md 비대화되기 때문에 주제별로 파일을 나눌 수 있다.
1. 계층 구조
.claude/rules/
├── coding-style.md # 코딩 약관
├── testing.md # 테스트 정책
├── api-design.md # API 설계 규칙
└── security/ # 보안 규칙(하위 디렉토리도 가능)
└── auth.md.claude/rules/ 디렉터리에 있는 모든 마크다운 파일은 메인 CLAUDE.md 파일과 동일한 우선순위로 자동으로 로드된다. 별도의 import 작업이 필요 없으며, 파일을 해당 디렉터리에 넣기만 하면 바로 포함된다.
지원 버전: Claude Code 2.0.64 이상(2025년 12월 10일 릴리스)에서 사용 가능
MCP
외부 서비스와 연계하기 위한 구조로 MCP(Model Context Protocol)를 이용할 수 있다. 이를 통해 Claude Code가 로컬 환경의 범위를 벗어나 다양한 클라우드 서비스 및 사내 도구와 함께 작동하면서 코딩을 진행할 수 있다. Claude Code는 MCP가 지원하는 전송 메커니즘인 Stdio transport / HTTP with SSE transport를 모두 지원한다.
개인적으로 추천하는 MCP 서버는 github-mcp-server와 Serena와 Context7 이다.
1. Context7
- Context7은 API 키 없이도 사용할 수 있지만 rate limit에 걸릴 수 있어 Context7 dashboard에서 API KEY를 취득해서 사용하는걸 권고한다.
- 오래된 학습 데이터로 할루시네이션을 방지 할 수 있고, 최신 라이브러리 문서를 참조할 수 있다.
2.Serena
- LSP(Language Server Protocol)를 기반으로 하여 코드 베이스를 의미론적으로 분석하고 조작할 수 있게 해준다. 이는 단순한 텍스트 기반 처리가 아닌, 실제 코드의 구조와 의존성을 이해하여 더 정확하고 효율적인 코드 작업을 가능하게 한다.
--enable-web-dashboard를 false로 해서 Serena 사용할 때 Serena 대시보드가 열리는 것을 방지한다.- Serena를 리팩토링에 활용했을 때 장점은 파일 전체를 읽지 않고 get_symbols_overview로 크레이트 구조를, find_symbol로 필요한 impl 블록만 선택적으로 읽었고, 5개 크레이트를 빠르게 병렬 탐색하면서 토큰을 절약할 수 있었다. 특히 대형 ITodoRepository impl(230줄)을 필요한 시점에만 조회한 점이 효율적이었다.

