AI 믿지 마라 = 예측 가능한 동작 + 사용자가 제어권
3.1 훅(Hooks) 시스템
핵심 개념
훅 = 도구 실행 전후에 사용자 스크립트를 자동 실행하는 시스템. 권한 시스템(allow/deny)이 도구 단위 ON/OFF라면, 훅은 도구의 인자까지 검사할 수 있다.
권한 시스템 vs 훅
1 | |
3가지 타이밍
1 | |
| 타이밍 | 시점 | 용도 |
|---|---|---|
| PreToolUse | 실행 전 | 차단, 치환, 검증 |
| PostToolUse | 실행 후 | 결과 검증, 로깅 |
| Notification | 알림 발생 시 | Slack 알림 등 외부 연동 |
설정 구조 (settings.json)
1 | |
- matcher: 정규식 (
"Bash","Bash|Write",".*") - type:
"command"(외부 스크립트) 또는"prompt"(Claude가 판단)
입력: stdin JSON
1 | |
출력: exit code
| Exit Code | 의미 | 결과 |
|---|---|---|
| 0 | 통과 | 도구 실행 허용 |
| 2 | 차단 | 도구 실행 차단 |
| 그 외 | 에러 | 훅 에러, 도구는 실행됨 |
주의: exit 1은 차단이 아니다 — 명시적으로 exit 2만이 차단
고급 출력: stdout JSON
1 | |
- updatedInput → 도구 인자를 치환 가능 (차단 대신 안전한 명령으로 교체)
- “ask” → Claude에게 판단을 위임
command vs prompt 타입
| type | 실행 주체 | 적합한 용도 |
|---|---|---|
| command | 외부 스크립트 | 명확한 규칙 (rm -rf 차단 등) |
| prompt | Claude (LLM) | 코드로 표현 어려운 검사 (보안 취약점 등) |
핵심 정리
- 훅 = 경비원 — 기존 도구를 감시/제어 (새 도구 추가가 아님)
- 3가지 타이밍 — PreToolUse, PostToolUse, Notification
- stdin JSON → exit code — 입출력 구조
- exit 2만 차단 — 1은 에러일 뿐, 도구는 실행됨
- JSON 출력으로 치환 가능 — 차단 말고 안전한 명령으로 교체
- prompt 타입 — 스크립트 대신 Claude가 판단
3.2 MCP (Model Context Protocol) 서버
핵심 개념
MCP 서버 = Claude Code에 새로운 도구를 추가하는 외부 프로세스. 훅이 기존 도구를 감시하는 “경비원”이라면, MCP는 새 장비를 납품하는 것.
훅 vs MCP
1 | |
MCP 서버 연결하면 생기는 변화
1 | |
도구 이름 규칙
1 | |
통신 방식: stdio
1 | |
- 훅과 같은 원리 (stdin/stdout JSON)
- 차이: 훅은 이벤트마다 실행/종료, MCP는 계속 실행 중 (서버)
설정 구조 (settings.json)
1 | |
- command + args: 서버 실행 명령
- env: 환경변수 (API 키 등)
실제 사용 중인 예시
이 프로젝트의 settings.local.json에서:
1 | |
핵심 정리
- MCP = 새 도구 추가 — 훅(감시)과 역할이 다름
- stdio 통신 — 로컬 프로세스로 실행, JSON으로 대화
- 계속 실행 중 — 훅(이벤트마다 실행/종료)과 달리 서버로 상주
- 이름 규칙 —
mcp__서버이름__도구이름 - 설정 —
mcpServers에 command + args + env
3.4 에이전틱 코딩 패턴
핵심 개념
큰 작업을 여러 서브에이전트가 병렬로 처리. 각 서브에이전트는 별도의 Claude Code 프로세스.
서브에이전트 구조
1 | |
- 각각 독립적인 프로세스로 실행
- 병렬로 동시 작업 → 속도 향상
워크트리 (Worktree)
같은 git 저장소의 복사본을 별도 폴더에 만드는 것.
1 | |
각 서브에이전트가 자기만의 복사본에서 작업 → 파일 충돌 방지
작업 분배 원칙
1 | |
핵심 정리
- 서브에이전트 = 별도 Claude Code 프로세스로 병렬 작업
- 워크트리 = git 복사본에서 독립 작업 → 충돌 방지
- 주의점 = 작업 영역이 겹치면 merge conflict
- 원칙 = 일을 잘 나눠서 시켜야 한다
3.5 컨텍스트 관리 심화
핵심 개념
컨텍스트가 길어지면 비용 증가 + 품질 저하(환각) 두 가지 문제. 전략적으로 관리해야 한다.
/compact vs /clear
1 | |
| 전략 | 효과 | 맥락 유지 |
|---|---|---|
/compact |
대화를 요약으로 압축 | ✅ 핵심 맥락 유지 |
/clear |
컨텍스트 초기화 | ❌ 다 날아감 |
/compact 작동 방식
Claude가 대화 내역을 읽고 요약으로 교체. 키워드가 아니라 문맥을 유지하는 요약.
1 | |
대규모 코드베이스 전략
1 | |
- Explore → Plan → Act 루프 = 필요한 만큼만 점진적 탐색
- CLAUDE.md에 프로젝트 구조 미리 작성 → 탐색 없이 바로 파악
핵심 정리
- 컨텍스트 길어짐 = 비용 + 환각 두 가지 문제
- /compact = 같은 작업, 맥락 유지하며 압축
- /clear = 다른 작업으로 전환 시
- 핀포인트 탐색 = 전체 읽기 대신 Glob/Grep/Read
- CLAUDE.md = 프로젝트 구조 미리 제공하여 토큰 절약