Claude Code는 괴물이다 - 파트 3: 더 똑똑한 훅(hooks), 세션 지능, 그리고 나를 겸손하게 만든 벤치마크
요약
Claude Code의 UserPromptSubmit 훅을 개선하고 실제 세션 데이터를 통해 벤치마크를 수행한 결과입니다. 직접 작성한 프롬프트와 실제 사용 프롬프트 간의 정밀도 차이를 분석하며, 기술 활성화를 위한 훅의 실질적인 성능과 한계를 다룹니다.
핵심 포인트
- UserPromptSubmit 훅을 통한 기술 사용 가이드 주입 방식 소개
- 직접 작성한 프롬프트(93%)와 실제 기록(27%) 간의 정밀도 격차 확인
- 키워드 기반 트리거의 한계와 실제 자연어 프롬프트 대응의 어려움
- 훅 사용 시 올바른 기술 로드 성공률 향상 데이터 제시
요약(TL;DR): 해고를 당했습니다(파트 2에서 언급했던 "고용 안정성"이라는 말은 시간이 지나며 무색해졌네요), 그래서 프리랜서로 전향했습니다. 쇼케이스 저장소(repo)를 전면 개편했습니다: AI 기반 기술 활성화(skill activation), 기술 사용을 강제하는 가드 훅(guard hook), 개발 문서를 자동으로 주입하는 벡터 검색(vector search), 그리고 자신의 작업을 검증하는 설정 마법사(setup wizard)를 도입했습니다. 그 후 전체 시스템을 벤치마크(benchmark)해 보았고 겸손해질 수밖에 없었습니다. 제가 작성한 프롬프트(prompt)에서는 93%의 정밀도(precision)를 보였지만, 제 실제 기록에서 가져온 프롬프트에서는 27%에 그쳤습니다. 이를 수정했고, 여전히 중요한 지표들을 측정했으며, 보기 흉한 수치를 포함한 모든 숫자를 공개했습니다. 저장소는 하단에 있습니다. Claude Code 설정 포스팅의 파트 3입니다(처음 오신 분들은 제 프로필에서 파트 1과 2를 확인하실 수 있습니다). 늘 그렇듯, 이것은 저에게 효과가 있었던 방식일 뿐 절대적인 진리가 아닙니다. 유용한 것은 취하시고 나머지는 버리세요.
먼저, 반전이 있습니다. 지난 포스트에서 직장에서 AI 담당자로 있는 것이 "상당한 고용 안정성"을 준다고 말씀드렸죠. 네... 그게 말입니다. 해고가 닥쳤고 제 차례가 왔습니다. 여러분에게는 희소식일 수도 있는데, 저장소를 개선할 시간이 훨씬 많아졌고, 설정 도움을 요청하는 수많은 DM(Direct Message) 덕분에 프리랜서로 뛰어들게 되었습니다. 자세한 내용은 끝에 적어두겠습니다.
제 훅(hooks)을 벤치마크했습니다 (그리고 그 결과는 저를 겸손하게 만들었습니다)
새로 오신 분들을 위한 빠른 요약: 제 설정의 중추는 UserPromptSubmit 훅입니다. 이 훅은 사용자의 프롬프트를 키워드/정규표현식(regex) 트리거와 대조하여 컨텍스트(context)에 "이 기술을 사용하세요"라는 리마인더를 주입합니다. 기술이 항상 자동으로 활성화되지는 않기 때문입니다. 이 새 버전을 출시하기 전에 느낌(vibes)이 아닌 실제 수치를 원했기에, 40개의 프롬프트로 구성된 벤치마크를 구축했습니다. 정밀도(precision) 93%, 재현율(recall) 93%. 좋습니다, 바로 출시하면 되겠죠? 문제는 그 프롬프트들을 제가 직접 작성했다는 점입니다. 트리거를 만든 것과 똑같은 뇌가 프롬프트도 썼으니까요.
그래서 저는 네 개의 프로젝트에 걸친 제 세션 기록에서 86개의 실제 프롬프트를 추출했습니다. 그리고 두 개의 독립적인 에이전트(agent)가 제 규칙을 전혀 모르는 상태에서 블라인드 라벨링(blind-labeling)을 수행하게 했고(일치율 97.7%), 다시 실행했습니다. 결과는 정밀도 27%, 재현율 25%였습니다. 실제 프롬프트는 "React 컴포넌트를 생성해줘"라고 말하지 않습니다. "으악, 투명한 공간이 아주 조금 여전히 보여"라고 말합니다. 이것은 프론트엔드(frontend) 작업이지만, 어떤 키워드 목록으로도 이를 잡아낼 수 없습니다.
한편, 단어 경계(word boundaries)가 전혀 없는 저의 의도 패턴(intent pattern)은 Cloudflare 배포 로그의 붙여넣기 된 내용 및 이력서 태그라인에 포함된 "gen ui ne"라는 단어와 일치했습니다. 프로덕션(production) 환경이었다면 두 경우 모두 저의 다음 편집을 차단했을 것입니다. 그다음은 실제로 중요한 테스트들, 즉 실제 헤드리스 세션(headless sessions), 훅(hooks) 사용 여부에 따른 비교입니다:
| 구분 | 훅 미사용 (No hooks) | 훅 사용 (With hooks) |
|---|---|---|
| 첫 편집 전 올바른 기술 로드 (새 세션) | 10/12 | 12/12 |
| 약 150k 토큰의 컨텍스트 상황 | 5/7 | 2/2 (영향 없음) |
| 잘못된 강제 차단 (두 프롬프트 세트 모두) | 해당 없음 (n/a) | 0 (아래 수정 사항 적용 후) |
세 가지 교훈:
- 직접 작성하지 않은 프롬프트로 트리거(triggers)를 벤치마크하세요 (여러분의 트랜스크립트는
~/.claude/projects/에 쌓여 있으니, 보고 움찔할 준비를 하세요). - 정규표현식(regexes)을 개선하세요 (모든 잘못된 차단은 단어 내부의 패턴과 일치하는 문제로 추적되었습니다; 수정 후 잘못된 차단은 0건이었습니다).
- 그리고 가장 중요한 것: 모델은 분류기(classifier)보다 더 성장했지만, 전달 메커니즘(delivery mechanism)은 그렇지 못했습니다.
새로운 세션에서 현재의 Claude는 83%의 확률로 스스로 올바른 기술을 선택합니다. 하지만 150k 토큰의 누적된 컨텍스트 상황에서는, 세션 초기에는 잘 처리했던 프롬프트들을 놓치기 시작했습니다. 훅 주입(Hook injection)은 성능이 저하되지 않는데, 이는 모델이 기술의 존재를 기억하는 것에 의존하는 대신 프롬프트와 함께 전달되기 때문입니다.
기술 활성화 v2 (정규표현식에 지능 부여)
이제 훅은 선택적으로 사용자의 프롬프트와 기술 설명을 키워드가 아닌 의도(intent)에 따라 매칭하는 빠르고 저렴한 분류기 모델(classifier model)로 보낼 수 있습니다. 네 가지 제공업체: Gemini, OpenAI, Anthropic, Ollama (완전 로컬).
Gemini의 무료 티어로도 이를 충분히 감당할 수 있습니다. 기본값은 여전히 정규표현식 전용입니다: API 호출 0회, 비용 0원, 오프라인 작동. 그리고 벤치마크 결과(AI 모드가 재현율(recall) 100%, 정밀도(precision) 32%, 지연 시간(latency) 약 4초를 기록)를 고려할 때, 이는 제안 전용(suggest-only)으로 배포됩니다. 기술을 추천할 수는 있지만, 사용자가 동의(opt in)하지 않는 한 절대 차단하지는 않습니다.
기술 가드(Skill guard)
나머지 절반은 PreToolUse 훅입니다. 만약 특정 기술이 필수(mandatory)로 플래그(flagged)되었는데 Claude가 해당 기술을 먼저 활성화하지 않고 파일을 편집하려고 시도하면, 그 편집은 차단됩니다. 오탐(false positives)을 위한 2회 시도 모델: 첫 번째 시도는 알림과 함께 차단되고, 두 번째 시도는 통과됩니다.
더 이상 "당신 말이 전적으로 맞습니다. 기술 제안을 받았지만 완전히 무시했습니다."라는 말을 할 필요가 없습니다. 세션 지능 (Session intelligence) 파트 2에서 다룬 개발 문서 (dev docs) 시스템은 Claude의 건망증을 해결하기 위해 제가 찾아낸 가장 좋은 방법이었지만, 마찰이 있었습니다. 새로운 세션이 시작되거나 압축 (compaction)이 일어날 때마다 Claude에게 관련 문서를 다시 가리켜줘야 했습니다. 이제 Stop 훅 (hook)이 변경된 모든 개발 문서를 로컬 SQLite 벡터 DB (vector DB)에 임베딩하고, UserPromptSubmit 훅이 유사도 검색 (similarity search)을 실행하여 가장 관련 있는 스니펫 (snippets)을 사용자의 프롬프트와 함께 주입합니다. Claude가 문서를 찾아가는 대신, 문서가 Claude에게 찾아오는 방식입니다. 저는 더 이상 "인증 마이그레이션 (auth migration)을 위해 개발 문서를 확인해봐"라고 말하지 않습니다. 이미 알고 있으니까요. 훅 (Hooks). 진심입니다. 훅입니다. 이 포스트에서 한 가지만 기억하신다면: 긴 세션 동안 CLAUDE.md는 희미해지고, 기술 (skills)은 활성화되어야 하며, 문서는 읽혀야 합니다. 이 중 어느 것도 적절한 시점에 적절한 컨텍스트 (context)를 보장하지 않습니다. UserPromptSubmit 훅은 모든 프롬프트마다 실행되며 절대 압축되어 사라지지 않습니다. 그리고 완전하고 기능적인 훅은 다음과 같습니다:
#!/bin/bash
echo "알림: 이 프로젝트에서는 4칸 들여쓰기와 TanStack Query v5를 사용합니다"
이를 .claude/settings.json에 등록하면 끝입니다. 제 훅은 정확히 그렇게 시작해서 분류 (classify), 벡터 검색 (vector search), 주입 (inject), 가드 (guard), 빌드 체크 (build checks)로 성장했습니다. 일단 단순한 bash 스크립트로 시작하세요. 약속컨대, 어디에서나 활용 사례를 발견하게 될 것입니다. 개발 문서: 대규모 프로젝트에서는 여전히 무적입니다. 모든 기능은 계획, 주요 결정 사항, 그리고 주의 사항 (gotchas)을 남기므로, 프로젝트를 구축하는 부수 효과로 프로젝트를 문서화하게 됩니다. 그런 다음 그 문서들은 원재료가 됩니다. 기능 영역을 완성하면 Claude에게 그 문서들을 가리키며 "이것을 기술 (skill)로 변환해줘"라고 말합니다. 6개월 후, 활성화 시스템 (activation system)은 과거의 제가 고생하며 배운 모든 것을 불러옵니다. 문서는 지식을 포착하고, 기술은 이를 영구적으로 만들며, 훅은 그것이 사용되도록 보장합니다. 이제 리포지토리 (repo)가 실제로 당신의 머신에서 작동합니다. 첫 번째 버전은 성급하게 추출된 것이라 많은 분이 "내 머신에서는 작동한다 (works on my machine)" 문제를 겪었습니다.
이번 라운드에서는 사용자의 스택을 감지하고, 모든 것을 설치한 다음, 작업 결과에 대해 자체적인 상태 점검(health-check)을 수행하고, 실패한 사항에 대해 정확한 해결 방법을 출력하는 설정 마법사(npx tsx setup.ts ~/your-project)가 도입되었습니다. --yes 모드가 추가되어, Claude Code에 프롬프트 하나만 붙여넣으면(README에 포함되어 있음) Claude가 전체 과정을 설치하고 검증까지 완료해 줍니다. 이제 모든 기능은 안전하게 실패(fail-safe)하도록 설계되었습니다(키가 누락되거나 설정이 깨지면 훅(hooks)이 세션을 먹통으로 만드는 대신 조용히 물러납니다). 또한 API 키는 .env 파일에 저장되므로 macOS/zsh 환경에서도 잘 작동합니다.
Claude Code의 몇 가지 유용한 기능들을 살펴보면, Ctrl+G를 누르면($EDITOR가 가리키는 무엇이든) 실제 에디터에서 프롬프트가 열립니다. 리포지토리에는 프롬프트 작성에 최적화된, 플러그인이 필요 없는 단일 파일 NeoVim 설정이 포함되어 있습니다: 마우스 지원, 줄 바꿈(word wrap), Space+w를 통한 저장 및 제출 기능 등이 포함됩니다. 프롬프트를 위한 음성-텍스트 변환(Speech-to-text) 기능도 있습니다. 말하는 것이 타이핑보다 빠르며, Claude는 말이 다소 장황하더라도 상관하지 않습니다. Handy (handy.computer)는 무료이며 매우 훌륭합니다. 키보드 자동화(Windows의 AutoHotKey, Mac의 BetterTouchTool)를 사용하면 즉각적인 앱 전환과 Claude Code(CC)로 파일 경로를 바로 집어넣는 작업이 가능합니다. 이런 작은 요소들이 빠르게 모여 큰 차이를 만듭니다.
다음 단계는 무엇일까요? 프리랜서 활동을 하며 제가 가장 흥분되는 것을 만들게 되었습니다. 제 클라이언트 중 한 명은 Discord를 통해 프로젝트 전체를 관리합니다. 그들이 서버에서 버그를 보고하면, Claude Code가 이를 분류(triage)하고 제가 커피를 다 마시기도 전에 해결책을 내놓습니다. 여기에 다 담기에는 내용이 너무 많으므로, 이는 파트 4에서 다루겠습니다. MIT 라이선스가 적용된 리포지토리는 다음과 같습니다: https://github.com/diet103/claude-code-infrastructure-showcase . 4개의 기술(skills), 8개의 에이전트(agents), 9개의 훅(hooks), 세션 지능(session intelligence), 설정 마법사, NeoVim 설정, 전체 벤치마크 하네스(benchmark harness), 그리고 Codex 어댑터(그들의 훅이 와이어 호환(wire-compatible)되는 것으로 밝혀져 동일한 가드(guard)가 두 에이전트 모두에서 실행됩니다)가 포함되어 있습니다. 직접 분해해 보고, 조각들을 가져다 쓰고, 무엇이 고장 나는지 알려주세요. 댓글로 마음껏 비판해 주셔도 좋습니다.
제출자: /u/JokeGold5455 [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기