Claude Code를 실무에 적용하며 사용한 12가지 도구: 유지, 폐기, 그리고 논쟁 중인 것들
요약
Claude Code를 대규모 ERP 프로젝트에 실무 적용하며 검증한 12가지 보조 도구와 워크플로우를 소개합니다. CLAUDE.md, 사용자 범위 지속성 메모리, 프로젝트 규칙 등 컨텍스트 유지와 에이전트 효율을 극대화하는 구체적인 툴킷 활용법을 다룹니다.
핵심 포인트
- CLAUDE.md를 통한 프로젝트 컨벤션 및 스택 정보 자동 로드
- 사용자 범위 지속성 메모리를 활용한 프로젝트 간 피드백 및 지식 공유
- 프로젝트 불변량과 역사적 맥락을 기록하는 규칙 파일 관리의 중요성
- 에이전트의 반복적인 실수를 방지하기 위한 컨텍스트 제어 전략
질문의 배경이 되는 사건
5월 20일 화요일, 늦은 오후. Niran이 노트북에서 고개를 들며 책상 위에 탄산음료 캔을 내려놓으며 말합니다: "그 목업(mockup)을 사이트에 올리는 데 Computer use를 쓰면 더 빠르지 않을까요?"
나는 뒤도 돌아보지 않고 대답합니다: "버튼 세 번 클릭하는 데 일반 세션보다 토큰 비용이 10배는 더 들 거예요."
침묵이 흐릅니다. 그는 다시 에디터를 엽니다. Françoise가 복도를 가로지르며 누구에게 하는 말인지 모를 외침을 내뱉습니다: "자, 가자" — 그녀는 다른 이야기를 하고 있었지만, 타이밍이 완벽했습니다.
지난 두 달 동안 이와 유사한 장면을 서른 번 정도 겪었습니다. 코드 자체에 대한 것이 아니라, 코드 주변의 장치(dispositif around the code), 즉 Claude Code 세션을 구성하고, 컨텍스트(context)를 로드하며, 출력을 제한하고, 실행을 중단시키는 툴킷(toolkit)에 관한 이야기입니다. 우리는 프롬프트(prompt)에 대해서는 많이 이야기하지만, 보조 도구(prostheses)에 대해서는 거의 이야기하지 않습니다. 여기 11만 8천 줄 규모의 ERP를 대상으로 60일간 단독 실무 테스트를 거치며 살아남은 12가지 도구가 있습니다. 일부는 유지되었고, 하나는 폐기되었으며, 하나는 논쟁 중입니다. 글을 쓰기 전 실제로 확인했습니다 — ls ~/.claude/skills/는 3개의 파일을 반환하고, ls ~/.claude/hooks/는 6개를 반환하며, ls ~/tef-erp/.claude/agents/는 1개를 반환합니다. 이 글을 쓰는 시점에도 개수는 12개로 유지되고 있습니다.
세션이 종료되어도 살아남는 컨텍스트
(1) 루트 프로젝트 CLAUDE.md, 유지(KEPT). 32일 동안 6번의 버전 업데이트가 있었으며, Claude Code 세션이 열릴 때 자동으로 로드되는 스택 컨벤션(stack conventions)의 단일 소스입니다. 이것이 없다면, 에이전트(agent)는 매 세션마다 Next 16이 자신의 학습 데이터에 있는 Next.js가 아니라는 사실을 새로 깨달아야 하며, 서버 컴포넌트(Server Components)에 onClick 핸들러를 작성하는 것을 멈추는 데 한 시간이나 걸릴 것입니다. 이것이 있으면 첫 번째 반복(iteration) 단계부터 무엇이 금지되어 있는지 이미 알고 있습니다. ROI(투자 대비 효율)는 세션당 절약된 시간으로 측정되며, 하루에 5~10번의 세션을 기준으로 계산됩니다.
(2) 사용자 범위 지속성 메모리 (User-scope persistent memory), 유지 (KEPT). ~/.claude/agent-memory/에 피드백, 프로젝트, 참조별로 정리된 약 80개의 파일이 인덱싱되어 있습니다. 제가 가장 많은 재발을 막아준 규칙은 _feedback_db_constraints_phase_zero_입니다. 필터링이나 삽입을 수행하는 모든 기능 이전에, DB의 UNIQUE/CHECK/FK를 나열하십시오. 왜냐하면 이러한 제약 조건들은 TypeScript에서는 보이지 않으며 설계의 전제 조건이 되기 때문입니다. 사용자 메모리는 프로젝트를 초월하며, 명시적인 정규화(canonicalisation) 정책 덕분에 교차 범위 감사(cross-scope audit)를 통해 인덱스/리포지토리 드리프트(index/repo drift)를 한 시간도 채 되지 않아 잡아낼 수 있었습니다.
(3) ~/tef-erp/.claude/rules/ 규칙, 유지 (KEPT). 현재 18개의 파일이 있으며, 각 파일은 프로젝트 불변량(invariant)과 이를 생성하게 된 역사적 이유를 기록하고 있습니다. _liste-rouge.md_는 세 번의 CSV 임포트 과정에서 폐기된 연락처가 다시 활성화되는 것을 방지했습니다. _cache-auth-contract.md_는 lib/cache.ts가 RLS(행 수준 보안)를 우회하며, 호출자는 반드시 상위 단계에서 인증을 확인해야 함을 문서화합니다. 이것은 메타 도그마(meta doctrine)가 아닌 코드 도그마(code doctrine)이며, 서브 에이전트(sub-agent)가 불변량을 위반하는 리팩터링(refactor)을 거부할 수 있게 만드는 핵심입니다.
호출 가능한 장치들 (The invocable devices)
(4) 스킬 (Skills), 활성 파일 3개, 유지 (KEPT). challenger, close-session, rembrandt-conventions. 저를 변화시킨 스킬은 falsify-before-fix라고 불리며, 이는 Counterpart Toolkit의 R4를 운영적으로 구현한 사례입니다. 수정(fix) 전 단계에서 510분 동안 프로토콜을 수행하면, 첫 번째 그럴듯한 가설이 틀렸을 때 발생하는 3090분의 '수정 후 롤백(fix-then-rollback)' 사이클을 피할 수 있습니다. 사고당 ROI는 6배에서 18배에 달합니다. CLAUDE.md에 텍스트 규칙을 적어두는 것만으로는 충분하지 않았습니다. 5월 6일에 잘못된 수정을 적용했을 때, 저는 R4를 눈앞에 두고도 이를 놓쳤기 때문입니다. 스킬은 "fix", "bug", _"hotfix"_와 같은 키워드에 따라 자동으로 로드되어 활성 세션에 프로토콜을 강제하는 실질적인 메커니즘입니다.
(5) 사용자 범위(User-scope) 훅(hooks), 2026년 5월 21일 기준 활성 파일 6개, 유지(KEPT). secret-scanner.sh, deploy-safeguard.sh, audit-memory-reminder.sh, check-workaround-assumed.sh, pre-bulk-mutation-count-staleness.sh, r15-autonomous-counter.sh. 드리프트(Drift) 노트: 초기 요약에는 5개의 훅이 기록되었으나, 실제 개수를 세어보니 6개임 — r15-autonomous-counter.sh는 7월에 R15 메타-훅(meta-hook) 프로토타입으로 추가되었으며, 작성 시점에 이미 ~/.claude/hooks/에 포함되어 있었음. 총 12개의 도구 개수는 유지됨; 여섯 번째 훅은 도구 5의 개선판이며, 13번째 별도 도구가 아님. deploy-safeguard.sh 훅은 처음에 두 개의 금지된 패턴(vercel --prod 및 supabase db push)으로 시작했으나, 변장된 명령어가 거의 통과될 뻔한 사건 이후 현재는 6개를 커버함. 48시간 이내에 교리(doctrine)의 공개 소스로 백포트(Backport)할 것. 배포 이후 채팅으로 유출된 비밀은 없으며, 해당 훅은 커밋(commit) 전이 아니라 명령(command) 실행 전에 차단함.
check-workaround-assumed.sh의 경우, v0.2에는 "fix" 및 "temp" 패턴이 포함되어 있었으나, fix: 접두사가 붙은 conventional-commits 커밋에서 경험적으로 60%의 오탐(false positives)이 발생함. v0.3에서 실제 우회(workaround) 어휘로 범위를 좁혔고, 그 결과 훅은 짜증 나는 존재에서 유용한 도구로 변모함.
# ~/.claude/hooks/check-workaround-assumed.sh
# v0.3 재구성: 패턴을 실제 우회 어휘로 축소함.
# v0.2에는 "fix"와 "temp"가 포함되었으나 — 경험적으로 너무 광범위함 (60% 오탐)
...
(6) 프로젝트 범위(Project-scope) agent-challenger 서브 에이전트(sub-agent), 유지(KEPT). 강제된 출력 형식: 도구(Tool) / 질문(Question) / 반박 기준(Refutation criterion). 감정적인 _"확실합니까?(are you sure?)"_와 같이 새로운 사실 없이 수정을 강요하는 방식이 아닌, 실질적인 이견(Material disagreement)을 제시함. 내가 챌린저(challenger)에게 특정 사건 가설을 공격하라고 요청하면, 챌린저는 확인이 아닌 반박을 목적으로 설계된 세 가지 조사(probe)를 생성하며, 각 조사는 세 가지 필드를 포함하고 출력은 가공되지 않은 상태(raw)를 유지함. 이는 안주하는 에이전트(complacent agent)와 정반대되는 성격이며, Counterpart Toolkit이 전체적으로 지향하는 바임.
실질적 관측 가능성 (Material observability)
(7) Daily Supabase drift probes (매일 실행되는 Supabase 드리프트 탐지), 유지 (KEPT). ADR-0039는 매일 밤 실행되는 5개의 프로브 (probes)를 문서화하고 있음. _sonde_contacts_orphelins_inscrits_가 2주만 더 일찍 존재했더라면 5월 14일에 발생한 출석 관련 사고를 방지할 수 있었을 것이며, 이후 이름(first name)이나 성(last name)이 없는 등록된 연락처 16개를 찾아내는 데 기여함. 90일 이동 평균(rolling window) 동안, 조용한 편차(silent divergence)가 발생한 후 발견될 때까지의 중앙값 지연 시간은 '감지 불가' 상태에서 35.3일로 변화함. 교리적 목표(doctrine target)는 30일이며, 우리는 그 목표에 근접하고 있음.
(8) Serverless crons에서 Sentry withMonitor와 Sentry.flush(2000) 사용, 유지 (KEPT). 4월 14일, Vercel crons가 Sentry 전송 전에 종료됨으로써 41건의 오탐(false-positive) 타임아웃이 발생함. finally 블록 내의 Sentry.flush(2000)를 통해 해당 유형의 문제를 완전히 제거함. 저용량 SLO (Service Level Objective)는 '경계값 초과 이상 (anomaly above bounds)'을 의미하며, 퍼센트 임계값(percentage threshold)을 의미하지 않음. 하루에 1번 발생하던 cron 오류가 3번으로 늘어나는 것은 임계값을 넘지 않더라도 통계적 이상 징후(statistical anomaly)를 트리거함.
위임 및 중재 (Delegation and arbitration)
(9) agent-erp-tef 서브 에이전트 (sub-agent), 논쟁 중 (CONTESTED). 이 에이전트는 가공되지 않은 출력값(raw output) 없이 빌드 및 ESLint 결과를 과장하며, 5월 8일에는 main 브랜치에 조용한 ADR-0042 경고를 푸시하며 재발함. 나는 두 가지 조건을 전제로 복잡한 다중 파일 작업에 이 에이전트를 계속 사용하고 있음. 첫째, 가공되지 않은 출력값(raw output)이 필수적임 (stdout 없이 단순히 _"빌드가 통과되었습니다"_라고 말해서는 안 됨). 둘째, 모든 DDL 마이그레이션은 supabase/migrations/ 파일을 생성해야 하며, 해당 경로가 보고서에 함께 커밋되어야 함. 대안이 없기 때문에 '논쟁 중' 상태를 유지함: 수동 편집이 여전히 더 안전하지만 더 느리기 때문임.
(10) agent-academique (DEV.to 시리즈), 유지 (KEPT). 3단계 프로토콜: 스캐폴딩 (scaffold), 살 붙이기 (flesh), 목소리 입히기 (voice). 40일 동안 50개의 초안 작성. 코드 스택을 벗어나더라도, 노력을 실행(execution)이 아닌 장치(dispositif)로 전환한다는 동일한 원칙이 적용됨. 세션당 ROI (투자 대비 효율)는 보이지 않지만, 40일간의 관점에서는 명확히 보임.
(11) Computer use MCP, 폐기 (DROPPED). 과도한 토큰 비용이 문제이며, 일반적인 세션보다 대략 10배 정도 높습니다. 결정은 명확합니다. Computer use는 대상에 대한 전용 MCP 대안이 없는 경우를 제외하고는 결코 허용되지 않는 사전 검증을 요구하기 때문입니다. 60일 동안 저는 macOS Photos와 네이티브 PDF를 위해 단 두 번만 호출했습니다. 그 외의 모든 작업은 전용 MCP(Slack, Gmail, Airtable, Supabase, WordPress) 또는 Chrome MCP를 통해 수행됩니다. 여기서 '폐기'는 도구 자체에 대한 거부가 아니라, 번호가 매겨진 사용 규율 (usage discipline)을 의미합니다.
(12) Counterpart Toolkit doctrine v0.7, 유지 (KEPT). 200줄 내외의 16가지 운영 규칙으로 구성되어 있으며, ./install.sh --yes /path/to/project 명령어로 설치합니다. 32일 동안 6개 버전을 출시했고, 4명의 외부 리뷰어를 통합했으며, R4 (falsify), R6 (Live/Snapshot/Cache), R10 (silent failure forbidden)에 대한 누적 ROI (투자 대비 효율)를 달성했습니다. 이는 앞선 11가지 도구들이 공통된 문법 없이 각각 국소적인 패치(local patch)로 남지 않고, 서로 일관성을 갖도록 만드는 메타 교리 (meta-doctrine)입니다.
카탈로그를 통해 배운 점
패턴이 눈에 띕니다. 살아남는 도구들은 저와 에이전트 모두에게 안주함 (complacency)이 생기려는 순간, 그 실행을 중단 (interrupt the run) 시키는 도구들입니다. CLAUDE.md는 스택 망각 (stack forgetting)을 중단시키고, skills는 수정 전의 반사 작용을 중단시키며, hooks는 명령이 데이터베이스에 도달하기 전에 중단시키고, probes는 운영 환경(production)이 무너지기 전에 드리프트 (drift)를 중단시킵니다. 반면, Computer use는 아무것도 중단시키지 않으며 토큰을 생성함으로써 실행 시간만 연장합니다. 이것이 폐기된 이유입니다.
논쟁 중인 도구인 agent-erp-tef는 가장 교훈적입니다. 이 도구는 스스로의 안주함을 중단시키지 못하며, 실제로는 그렇지 않은 '그린 빌드 (green builds)'를 만들어냅니다. 만약 제가 이 도구를 수정한다면, falsify-before-fix가 수정 시점에 프로브 (probes)를 강제하는 방식처럼, 로우 출력 프로토콜 (raw-output protocol)을 부과할 것입니다.
도구가 당신을 중단시킬 수 없을 때, 그 도구는 당신과 함께 드리프트 (drift) 속을 헤매게 됩니다. 하지만 도구가 당신을 중단시킨다면, 그때부터 그 도구는 비용을 지불할 가치가 생기기 시작합니다.
2026년 5월 21일 기준 실질적 판결, 118,808라인의 ERP, 60일간의 단독 제작. 참조 교리 (Reference doctrine): Counterpart Toolkit v0.7, CC-BY-4.0, github.com/michelfaure/doctrine-counterpart. 이름과 장면은 재구성되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기