Claude Code 토큰 73%가 낭비되고 있었다 — 90일 실측으로 찾은 9가지 패턴

Photo by Rob Wingate on Unsplash

이 글을 읽으면

  • Claude Code 한도에 자꾸 걸리는 진짜 이유 9가지를 알 수 있어요
  • 30초 안에 적용 가능한 토큰 절약 세팅 방법
  • "Haiku 쓰세요" 같은 뻔한 조언이 왜 효과가 없는지

원문 작성자(@Mnilax)는 90일 동안 Claude Code 사용을 전부 로깅했어요. 430시간, 600만 input 토큰, $1,340. 그리고 데이터를 까봤더니 73%가 9가지 숨은 패턴에서 새고 있었어요.

프롬프트를 못 써서가 아니에요. 모델 선택을 잘못해서도 아니고요. 눈에 안 보이는 오버헤드가 문제였어요.

Claude Max 한도에 일주일에 한 번 이상 걸린다면, 아래 9가지 중 최소 4개는 해당될 거예요. 아마 7개일 가능성이 높아요.

왜 지금 이게 중요한가요?

Anthropic도 2026년 3월 말에 이 문제를 인정했어요. "Claude Code에서 사용량 한도에 예상보다 훨씬 빨리 걸리고 있다"고요. Max 5 구독자가 5시간 한도를 19분 만에 다 써버린 사례가 보고됐고, Pro $200 사용자는 "30일 중 12일만 쓸 수 있다"고 호소했어요.

원인은 두 가지였어요. 3월 말 피크 시간대 쿼터 변경, 그리고 프롬프트 캐싱 버그 2개가 일부 세션의 비용을 10~20배로 부풀린 것. 한 사용자가 Claude Code 바이너리를 리버스 엔지니어링해서 GitHub 이슈 #40524에 올렸고, v2.1.34로 다운그레이드하면 일부 해결돼요.

근데 일부는 진짜고, 대부분은 사용자 본인 문제예요. 아래에서 하나씩 봅시다.

측정 방법

저자는 Claude Code와 Anthropic API 사이에 HTTP 프록시를 끼웠어요. 90일간 모든 요청을 로깅 — 페이로드, 응답, input/output/cache 토큰, latency, 모델까지요. 그리고 토큰을 다음 카테고리로 분류했어요.

카테고리설명생산적 토큰실제 질문에 직접 기여한 내용캐시 히트 (무료)시스템 프롬프트 + CLAUDE.md 캐시됨캐시 미스 (유료)캐시 만료로 재계산대화 히스토리 재읽기매 턴마다 이전 메시지 재토큰화Hook 주입PreToolUse, UserPromptSubmit hook 컨텍스트스킬 로딩SKILL.md 자동 로드도구 정의 오버헤드JSON 스키마, 도구 정의Extended Thinking<thinking> 블록CLAUDE.md매 턴마다 로드되는 프로젝트 규칙

생산적 토큰: 27%. 나머지 73%가 아래 9가지예요.

1. CLAUDE.md 비대화 (~14% 낭비)

증상: 6개월 동안 CLAUDE.md가 4,800 토큰까지 커졌어요. 매 턴마다 4,800 토큰이 로드돼요. 새 세션마다 또 로드돼요. 대부분의 규칙은 지금 작업이랑 상관없어요.

5,000 토큰짜리 CLAUDE.md는 한 글자 입력하기 전에 이미 5,000 토큰을 쓴 거예요. 매 턴, 매 세션. 일주일에 200턴 쓰면 CLAUDE.md만으로 100만 토큰이에요.

30초 해결책

# CLAUDE.md 크기 확인
wc -w ~/.claude/CLAUDE.md
wc -w .claude/CLAUDE.md  # 프로젝트 레벨

# 목표: 합쳐서 1,200 단어 미만 (~1,500 토큰)

1,500 토큰을 넘으면 이렇게 리팩토링해요.

  • 프레임워크 규칙은 프로젝트 레벨 CLAUDE.md로 옮기기 (해당 프로젝트에서만 로드)
  • 반복되는 패턴은 스킬로 추출 (호출될 때만 로드)
  • 누가 썼는지 기억 안 나는 규칙은 삭제
  • "왜냐하면" 장황한 설명은 3단어 명령형으로 변환

저자는 4,800 → 900 토큰으로 줄였어요. 동작은 똑같아요. 즉시 31% 절감.

2. 대화 히스토리 재읽기 (~13% 낭비)

증상: 후속 메시지마다 전체 대화를 재토큰화해요. 30번째 메시지는 1~29번째 메시지를 다시 읽는 비용을 내고 있어요. 평균 500 토큰/교환이라 치면 30번째 메시지는 1번째의 30배 비용이에요.

저자는 60+ 메시지 세션이 많았는데, 마지막 메시지가 첫 메시지의 60배 비용을 내고 있었어요. 이건 그냥 답이 없어요.

30초 해결책

  • 후속 메시지 대신 이전 메시지를 수정해요. 위쪽 화살표 → 편집 → 재전송. 잘못된 교환이 쌓이지 않고 교체돼요.
  • 대화는 20개 메시지로 하드 캡. 20개 넘으면 Claude한테 지금까지 한 일을 요약해달라고 한 다음 새 채팅 시작.
  • /compact 사용 (/clear 대신). /compact는 요약 후 재시작, /clear는 전부 날림.

저자는 60메시지 세션 → 15메시지 평균으로 줄였어요. 대화 재읽기 비용 40% 감소.

3. Hook 주입 낭비 (~11% 낭비)

증상: 플러그인 4개를 깔았는데 그중 3개가 UserPromptSubmit hook으로 컨텍스트를 주입하고 있었어요. 합쳐서 매 프롬프트마다 6,200 토큰. 내가 뭘 묻기도 전에요.

이런 hook은 도와주려는 의도예요. 브랜치 이름, 최근 파일 변경, instinct 요약, 메모리 스니펫. 하나하나는 작아요. 합치면 벽이 돼요.

30초 해결책

# 뭐가 주입되는지 확인
cat ~/.claude/settings.json | jq '.hooks.UserPromptSubmit'
cat .claude/settings.json | jq '.hooks.UserPromptSubmit'

# 정당화 못 하는 hook은 비활성화
/plugin disable <plugin-name>

모든 hook을 감사하세요. "왜 이 hook이 매 프롬프트마다 발화되는지" 한 줄로 설명 못 하면 죽이세요.

저자는 활성 UserPromptSubmit hook을 4개 → 1개(git 브랜치만)로 줄였어요. 프롬프트당 5,800 토큰 절약.

4. 세션 재개 시 캐시 미스 (~10% 낭비)

증상: Anthropic 프롬프트 캐시 기본 수명은 5분이에요. 6분만 일을 멈추면 캐시 미스. 시스템 프롬프트 + CLAUDE.md + 도구 스키마가 다 풀가로 재토큰화돼요. (캐시 읽기 가격은 10%인데요.)

저자는 커피 한 잔 마시고 돌아오면 첫 메시지가 ~8K 토큰의 캐시 콘텐츠에 풀가를 냈어요. 90일 동안 ~640번 발생.

30초 해결책

  • 빠른 우회법: "ping" 명령어를 핫키에 매핑. 쉬러 가기 전에 4분 안에 아무 프롬프트나 보내서 캐시 워밍.
  • 진짜 해결책 (유료 플랜): 1시간 캐시 수명으로 업그레이드. 캐시 쓰기 토큰은 기본 가격의 2배(첫 쓰기에만), 캐시 읽기는 0.1배. 세션당 10번 이상 재개한다면 본전 뽑아요.

저자는 1시간 캐시로 운영해요. 캐시 미스 비용 80% 감소.

5. 무관한 작업의 스킬 로딩 (~7% 낭비)

증상: 스킬 9개 설치. 각 스킬은 Claude가 "관련 있다"고 판단하면 자동 호출돼요. 판단이 보수적이라 의심스러우면 무조건 로드. 그래서 UI 디자인 스킬이 백엔드 작업에 로드되고, 영상 생성 스킬이 텍스트 작업에 로드되고...

각 SKILL.md는 800~2,500 토큰. "혹시 모르니" 로드. 스킬 9개 × ~1,500 토큰 = 태스크당 13,500 토큰의 오버헤드. 그 작업에 필요 없는데도요.

30초 해결책

7일 감사 돌리세요. 실제로 호출한 스킬만 살리고 나머지는 비활성화.

# 실제로 세션에서 호출된 스킬
grep -h "skill_invoked" ~/.claude/logs/*.log | sort | uniq -c | sort -rn

# 출력에 없는 건 → /plugin disable <skill-name>

저자는 활성 스킬 11개 → 4개로 줄였어요. 태스크당 9,000+ 토큰 절약.

6. "혹시 모르니" MCP 도구 정의 (~6% 낭비)

증상: MCP 서버 12개 연결. 각 서버는 도구 스키마를 매 요청마다 보내요. 작업과 무관해도요. PostgreSQL MCP 서버 도구 스키마는 ~1,200 토큰. 12개 MCP × 평균 600 토큰 = 요청당 7,200 토큰.

저자는 작업의 80%에서 이 12개 중 3개만 썼어요.

30초 해결책

/mcp                    # 연결된 서버 리스트
/mcp disable <server>   # 현재 세션에서 비활성화

영구 제어는 ~/.claude/settings.json을 편집해서 안 쓰는 MCP를 자동 로드 리스트에서 제거해요. 필요할 때 세션마다 다시 켜요.

저자는 항상 켜진 MCP 12개 → 3개로 줄였어요. 요청당 6,000 토큰 절약.

Photo by Luke Chesser on Unsplash

7. 단순 질문에 Extended Thinking (~5% 낭비)

증상: "Advanced Thinking" / extended thinking을 전역으로 켜놨어요. Claude가 "이 변수를 camelCase로 바꿔" 같은 질문에 3,000+ 토큰의 <thinking>을 태움.

Extended thinking은 진짜 추론이 필요한 작업(아키텍처 결정, 복잡한 디버깅)에 진짜 가치가 있어요. 단순 작업에선 그냥 오버헤드예요.

30초 해결책

기본은 extended thinking OFF. 필요할 때 메시지마다 ON 토글 (Claude Code에서 Alt+T).

복잡한 작업의 첫 시도가 만족스럽지 않으면 그때 extended thinking 켜고 재시도. 약 80% 작업은 필요 없어요. 필요한 20%는 본인이 알아요.

8. 잘못된 방향 생성 (~4% 낭비)

증상: Claude가 400줄짜리 응답을 쓰기 시작. 첫 50줄에서 방향이 틀린 게 보여요. 대부분은 끝까지 두고 다시 프롬프트해요. 나머지 350줄은 낭비된 출력 토큰.

출력 토큰은 과금돼요. Claude가 잘못된 응답을 끝마치게 두는 게 저자 총 지출의 약 4%였어요. 바보세금.

30초 해결책

  • Cmd+. (Mac) / Ctrl+. — 즉시 생성 중단. Claude가 이미 쓴 건 유지돼요. 거기서부터 방향 전환.
  • 드리프트하는 응답의 첫 5초 안에 이 단축키를 쓰도록 훈련. 월 ~$15 출력 낭비 절약.
  • 터미널 사용자: Esc 두 번 누르면 체크포인트 스크롤러가 열려요. 이전 상태로 되돌려 다른 접근법 시도 가능. 처음부터 다시 안 돌려도 돼요.

9. 플러그인 자동 업데이트 중복 (~3% 낭비)

증상: 플러그인이 세션 시작 때 자동 업데이트. 업데이트가 SessionStart hook에 새 컨텍스트를 추가하기도 해요. 저자 플러그인 몇 개가 작은(~50 토큰) 정보 메시지를 추가했고 시간이 지나며 누적됐어요. 플러그인 9개 × 여러 SessionStart 메시지 = 세션 시작당 ~1,400 토큰, 그냥 "로딩 완료" 알림만으로요.

30초 해결책

# SessionStart hook 감사
cat ~/.claude/settings.json | jq '.hooks.SessionStart'

# 그냥 "로딩됨" 알림이면 → 죽이세요

저자는 SessionStart hook 9개 → 2개(브랜치 컨텍스트, env vars만)로 줄였어요. 세션 시작당 1,200 토큰 절약.

결과 비교

생산적 토큰 비중이 27% → 약 65%로 올랐어요. 100%는 아니에요 — 피할 수 없는 오버헤드 바닥이 있어요. 근데 65%는 27%와는 다른 차원의 삶이에요.

안 통한 것들

뻔한 블로그가 추천하는 거 중에 효과 없던 것들:

시도결과"단순 작업"에 Haiku 쓰기살짝 도움. ~3% 감소. 진짜 낭비는 모델이 아니라 컨텍스트 비대화. 비대화된 컨텍스트에서 싼 모델은 가벼운 컨텍스트의 비싼 모델보다 더 비싸요.모든 작업 사이에 공격적 /clear역효과. 진짜 필요한 컨텍스트 잃음. 더 나은 전략: 프로젝트당 장수명 세션 + 계측된 hook + 가벼운 CLAUDE.md.모든 스킬 비활성화처음엔 절약. 그다음엔 같은 200토큰 지시를 매 프롬프트마다 수동 입력. 순 마이너스.오프피크 시간 스케줄링부분적으로 효과. 대부분의 사람한텐 시간대보다 위 9가지 패턴이 더 큰 레버.구독 다운그레이드안 됨. 작업 시간당 비용은 똑같음. 한도에 걸렸을 때 더 아플 뿐.

감사 스크립트

본인 세팅을 계측하고 싶으면 이 스크립트로 9가지 패턴을 한꺼번에 체크할 수 있어요.

#!/bin/bash
# claude-audit.sh — 프로젝트 루트에서 실행

echo "=== CLAUDE.md 크기 ==="
wc -w ~/.claude/CLAUDE.md 2>/dev/null
wc -w .claude/CLAUDE.md 2>/dev/null
echo "목표: 합쳐서 < 1,200 단어"

echo
echo "=== 활성 hook ==="
cat ~/.claude/settings.json 2>/dev/null | jq '.hooks // {} | keys'
cat .claude/settings.json 2>/dev/null | jq '.hooks // {} | keys'

echo
echo "=== UserPromptSubmit 주입 ==="
cat ~/.claude/settings.json 2>/dev/null | jq '.hooks.UserPromptSubmit'
cat .claude/settings.json 2>/dev/null | jq '.hooks.UserPromptSubmit'

echo
echo "=== 설치된 플러그인 ==="
ls ~/.claude/plugins/ 2>/dev/null
echo "목표: 3~5개 활성. 나머지 비활성화."

echo
echo "=== 설치된 스킬 ==="
ls ~/.claude/skills/ 2>/dev/null
echo "목표: 매일 작업과 매칭되는 3~5개 활성."

echo
echo "=== 연결된 MCP ==="
cat ~/.claude/settings.json 2>/dev/null | jq '.mcpServers // {} | keys'
echo "목표: 3개 항상 켜짐. 나머지는 세션마다 활성화."

저장하고 실행해서 플래그된 거 고치세요. 매주 재실행하면서 모든 줄이 목표에 맞을 때까지 반복.

마무리

저자가 한 실수는 모든 Claude Code 세션을 새로운 백지로 취급하는 거였어요.

실제로는 모든 세션이 다음 항목에 대한 선청구서예요.

  • CLAUDE.md (항상)
  • 모든 활성 플러그인의 hook (항상)
  • 모든 활성 스킬의 SKILL.md (관련성 감지 시)
  • 연결된 모든 MCP의 도구 스키마 (항상)
  • 그 턴까지의 대화 히스토리 (항상)
  • 캐시 미스 재컴파일 (5분 후 세션 재개 시)

생산적 토큰은 잔여물이에요. 이 모든 오버헤드 후에 남는 것.

생산적 토큰을 늘리고 싶으면 = "내 플랜에서 더 많은 사용량"을 원하면 = 오버헤드를 공격해야 해요. 더 나은 프롬프트만으론 부족해요.

오버헤드가 작을 때 더 나은 프롬프트가 도움 돼요. 오버헤드가 73%면 프롬프트는 거의 의미 없어요.

2026년 "Claude가 멍청해졌다"는 불평 대부분이 여기로 추적돼요. 모델은 멍청해지지 않았어요. 본인 오버헤드가 커진 거예요.

자주 묻는 질문

Claude Code 토큰 한도가 자꾸 걸려요. 진짜 원인이 뭔가요?

대부분은 모델 선택이 아니라 컨텍스트 비대화가 원인이에요. CLAUDE.md, hook, MCP, 스킬이 매 요청마다 자동 로드되면서 "선청구서"를 만들고 있어요. 위 9가지 패턴 중 4~7개는 거의 모든 사용자한테 해당돼요.

Haiku로 바꾸면 토큰 절약되나요?

살짝 도움 되지만 ~3%만 감소해요. 비대화된 컨텍스트에선 싼 모델이 가벼운 컨텍스트의 비싼 모델보다 더 비싸요. 컨텍스트부터 줄이세요.

/clear/compact 차이가 뭔가요?

/clear는 모든 컨텍스트를 날려요. /compact는 요약한 다음 재시작해요. 작업 연속성이 필요하면 /compact, 완전히 다른 작업으로 전환할 땐 /clear.

CLAUDE.md는 얼마나 짧아야 하나요?

전역 + 프로젝트 합쳐서 1,200 단어(~1,500 토큰) 미만이 목표예요. 그 이상이면 매 턴마다 비용 청구돼요.

1시간 캐시는 진짜로 본전 뽑나요?

세션당 10번 이상 재개한다면 (커피, 회의, 점심 등) 본전 뽑아요. 캐시 쓰기는 기본가 2배(첫 쓰기에만), 캐시 읽기는 0.1배니까 자주 재개할수록 이득이에요.

💡 한 발 더 — 나의 생각

이 분석에서 가장 무서운 건 "내가 좋다고 생각해서 켜둔 것들"이 다 비용이라는 점이에요. Hook 주입, 스킬 자동 로딩, MCP 연결 — 다 "혹시 도움 될까 봐" 켜놓는 건데 그게 73% 낭비의 정체였던 거죠.

지피터스 멤버분들 작업 패턴에 비춰보면 두 가지 시사점이 있어요.

첫째, 한국 사용자가 특히 위험한 패턴은 1번(CLAUDE.md 비대화)와 5번(스킬 로딩)이에요. 한국어 지시문은 영어보다 토큰이 1.5~2배 더 들어가거든요. 영어로 "Use casual tone"이 4 토큰이라면 "캐주얼한 톤으로 작성해줘"는 12 토큰이에요. CLAUDE.md를 한국어로 길게 쓰면 영어 사용자보다 훨씬 빨리 한도에 걸려요. 저는 이 글을 쓰면서 제 CLAUDE.md를 다시 보니 4,200 단어더라고요. 절반은 옛날에 한 번 쓰고 잊어버린 규칙들이었어요.

둘째, "AI 에이전트"를 빌드하는 분들은 9번(SessionStart 누적)을 특히 조심해야 해요. 에이전트 프레임워크들이 매 세션 시작마다 시스템 메시지를 점점 추가하는 경향이 있는데, 이게 누적되면 에이전트가 첫 응답을 하기도 전에 수만 토큰을 태우고 있을 수 있어요. 빌드 중에 console.log로 매 호출 토큰을 찍어보면 깜짝 놀랄 거예요.

저는 이 글 보고 바로 audit 스크립트를 돌렸는데, 제 활성 스킬이 35개였어요. (전역 + 로컬 합쳐서) 진짜 매주 쓰는 건 7~8개인데도요. 30분 정리한 다음 같은 작업이 체감상 30~40% 빨라졌어요. 모델이 좋아진 게 아니라 제가 모델한테 쓸데없는 짐을 덜 지운 거였어요.


원문: I tracked 430 hours of Claude Code usage. 73% was wasted on these 9 patterns. by @Mnilax

1

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요