Ai

Claude Code 토큰 절약 — 직접 재본 결과

목차

Claude Code 를 쓰다 보면 토큰이 생각보다 빨리 녹는다. “CLAUDE.md 짧게 써라”, “/clear 자주 해라” 같은 팁은 많다. 진짜 얼마나 차이 나는지 궁금해서 직접 재봤다.

토큰이 나가는 구조

Claude Code 는 요청을 보낼 때마다 아래를 통째로 다시 보낸다.

  1. 시스템 프롬프트 + 도구 설명 (기본으로 깔리는 것)
  2. CLAUDE.md (기본으로 깔리는 것)
  3. 지금까지의 대화, 읽은 파일, 명령 결과 (쌓이는 것)

작업 하나에 요청이 보통 5~10번 나간다. 그래서 깔리는 것과 쌓이는 것을 줄이는게 토큰 절약의 전부다.

반복되는 부분은 캐시가 돼서 1/10 값이긴 하다. 그래도 공짜는 아니다. 컨텍스트가 차면 자동 요약(compact)이 돌면서 앞 내용이 뭉개진다.

테스트 환경

  • 작은 파이썬 프로젝트. 파일 20개, 일부러 심은 버그 1개, 3000줄짜리 로그(270KB)
  • claude -p "..." --output-format json 으로 돌리면 토큰이랑 비용이 JSON 으로 나온다. 그걸로 쟀다
  • 모델은 따로 적지 않으면 Sonnet 5
  • 버그 수정 같은건 3번씩 돌려서 중간값을 썼다. 나머지는 1번. 오차는 좀 있다

1. 아무것도 안 해도 2.8만 토큰

“hi” 한마디만 보냈다.

조건입력 토큰
기본27,900
도구 없음 (--tools "")9,100
읽기 도구만 (--tools "Read,Grep,Glob")12,100

도구 설명만 1.9만 토큰이다. 인사 한마디에도 이게 깔린다.

대화창에서 /context 를 치면 뭐가 얼마나 차지하는지 바로 보인다. 제일 먼저 해볼 명령어다.

1
2
3
4
5
6
| Category                | Tokens |
|-------------------------|--------|
| System prompt           | 8.7k   |
| System tools            | 13.2k  |
| Memory files            | 18.6k  |   <- CLAUDE.md
| Skills                  | 2.1k   |

스크립트로 읽기만 시키는 작업(요약, 리뷰 같은거)이면 --tools 로 필요한 도구만 주면 된다.

2. CLAUDE.md 는 짧게

같은 버그 수정을 CLAUDE.md 두 개로 돌렸다.

  • 짧은 버전: 4줄. 테스트 명령어랑 규칙 두 개
  • 긴 버전: 274줄. 코딩 규칙, 리뷰 규칙, 배포 절차 같은걸 다 넣은 “핸드북”
짧은 CLAUDE.md긴 CLAUDE.md
요청당 기본 토큰28,20046,700
버그 수정 비용 (중간값)$0.117$0.218
결과성공성공

비용이 1.9배. 결과는 똑같다. 긴 CLAUDE.md 가 요청마다 1.85만 토큰씩 붙어서 나갔다.

넣을 것

  • Claude 가 추측 못 하는 명령어 (테스트, 빌드, 배포)
  • 이 프로젝트만의 규칙 (다른 데랑 다른 것만)
  • 건드리면 안 되는 곳

뺄 것

  • 코드 보면 알 수 있는 것
  • 일반적인 코딩 원칙 (“깔끔하게 짜라” 류)
  • 파일별 설명

가끔만 필요한 긴 절차는 스킬(.claude/skills/이름/SKILL.md)로 빼면 된다. 위 /context 결과처럼 스킬은 설명 한두 줄만 올라가 있다가 필요할 때 본문을 읽는다. 스킬 12개가 다 합쳐 2.1k 였다.

3. 로그는 걸러서 넘긴다

“이 로그에서 에러랑 원인 알려줘” 를 세 가지 방법으로 시켰다.

방법입력 토큰비용
cat app.log | claude -p "..." 통째로162,000$0.573
grep ERROR app.log | claude -p "..."30,500$0.047
파일 경로만 주고 알아서 찾게90,600$0.064

답은 세 개 다 똑같았다. “결제 게이트웨이가 2초 안에 응답 안 하고, 재시도가 0번이라 바로 실패”.

통째로 넘기면 12배 비싸다. 파일 경로만 줘도 Claude 가 알아서 grep 해서 꽤 싸다. 제일 나쁜건 로그나 파일 내용을 대화창에 복붙하는거다. 첫 번째 방법이랑 같은 거다.

4. 큰 걸 읽은 뒤엔 /clear

두 가지 경우를 재봤다.

작은 질문 네 개를 한 세션에서 계속

요청당 컨텍스트가 3.0만 → 3.2만. 거의 안 늘었다. 비용도 새 세션 네 번이랑 거의 같았다($0.102 vs $0.106). 캐시 덕분인듯

로그 전체를 읽은 다음, 같은 세션에서 README 질문 하나

요청당 컨텍스트
같은 세션에서 이어서173,800
새 세션에서30,200

README 한 줄 물어보는데 로그 17만 토큰을 계속 끌고 다닌다.. 5.8배다.

작은 일은 이어서 해도 괜찮다. 큰 파일을 읽었거나 주제가 바뀌면 /clear 하자. 캐시는 시간이 지나면 풀린다. 그때는 17만 토큰을 제값 주고 다시 보낸다.

지금까지 내용을 이어가야 하면 /compact 에 아래처럼 지시를 붙이면 된다.

1
/compact 결정한 것과 수정한 파일 목록만 남겨

5. 모델과 effort

같은 버그 수정을 모델별로 3번씩. 전부 성공했다.

모델비용시간요청 수
Haiku 4.5$0.05420.5초9
Sonnet 5$0.11721.3초9
Opus 5.5 low$0.09613.8초6
Opus 5.5 medium (기본)$0.1689.6초4
Opus 5.5 high$0.1699.3초4
Opus 5.5 max$0.24158.1초12
  • 이 정도 버그면 Haiku 로 충분했다. 제일 싸다
  • Opus 는 비싸도 헤매지 않는다. 요청 4번에 끝났다
  • max 는 느리기만 했다. 6배 오래 걸리고 결과는 같다. 쉬운 일에 max 는 낭비다

Opus low 가 medium 보다 싸게 나온건 캐시 저장 비용 차이가 커서 그렇다. effort 자체 차이라기보다는 운인듯

바꾸는 법

1
2
/model haiku      # 모델 변경
/effort low       # low, medium, high, xhigh, max

평소엔 Sonnet 이나 Opus medium, 단순 반복 작업은 Haiku, 진짜 막힐 때만 올리는게 무난할듯

6. MCP 서버는 도구 검색을 켜둔다

도구 40개짜리 가짜 MCP 서버를 붙여봤다.

조건“hi” 입력 토큰
MCP 없음27,900
MCP 40개, 도구 검색 켬 (기본)28,500
MCP 40개, 도구 검색 끔52,800

요즘 버전은 MCP 도구 설명을 미리 안 올리고 필요할 때 찾아 쓴다. 그래서 +600 토큰밖에 안 늘었다. ENABLE_TOOL_SEARCH=false 로 끄면 +2.5만 토큰이 매 요청에 붙는다.

  • Claude Code 를 최신으로 유지한다
  • 도구 검색을 끄는 설정이 있으면 지운다
  • 안 쓰는 서버는 /mcp disable 서버이름
  • gh, aws 처럼 CLI 가 있는건 MCP 대신 CLI 를 쓰게 하는게 낫다

7. 서브에이전트는 돈 아끼는 용도가 아니다

“모듈 파일 전부 열어보고 요약해줘” 를 직접 시킨 것과 서브에이전트에게 맡긴 것.

직접서브에이전트
끝났을 때 메인 컨텍스트47,20031,800
총비용$0.158$0.197

메인 대화는 깨끗해졌다. 근데 총비용은 오히려 늘었다. 서브에이전트도 따로 시스템 프롬프트를 깔고 시작해서 그런듯

긴 작업 중간에 “이거 어디서 쓰는지 찾아봐” 같은 탐색을 맡겨서 메인 컨텍스트를 지키는 용도로 쓰자. 이름만 보면 다 아껴줄 것 같은데 아니다

8. 하네스 설정

측정은 안 했지만 해두면 편한 것들.

테스트 명령어를 하나로 만들어둔다

이번 테스트도 ./test.sh 하나만 만들고 CLAUDE.md 에 적어뒀다. Claude 가 고치고 → 돌려보고 → 다시 고치는걸 알아서 한다. 검증 방법이 있으면 덜 헤매는듯

자주 쓰는 명령은 허용 목록에

.claude/settings.json

1
2
3
4
5
6
{
  "permissions": {
    "allow": ["Bash(./test.sh)", "Bash(git diff:*)", "Bash(npm run lint)"],
    "deny": ["Read(./.env)", "Read(./secrets/**)"]
  }
}

매번 허락 버튼 누를 필요가 없다. 이번 테스트도 --allowedTools "Bash(./test.sh)" 로 테스트 명령만 열어주고 돌렸다. --dangerously-skip-permissions 로 다 여는건 편하지만 위험하다.

포맷터는 hook 으로

파일 수정할 때마다 포맷터를 자동으로 돌린다. Claude 한테 “포맷 맞춰” 라고 시킬 토큰이 안 든다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }
        ]
      }
    ]
  }
}

큰 작업은 plan 모드부터

Shift+Tab 을 누르다 보면 plan 모드가 나온다. 코드 건드리기 전에 계획만 먼저 받는다. 다 짜고 나서 방향이 틀린걸 알면 그만큼 토큰이 날아간다.

잘못 가면 바로 멈춘다

  • Esc 한 번: 지금 하던거 멈춤
  • Esc 두 번: 이전 시점으로 되돌리기

엉뚱한 파일을 열기 시작하면 바로 끊는게 제일 싸다.

쓴 돈 확인

  • /usage: 지금 세션 비용
  • /context: 컨텍스트 뭐가 차지하는지
  • 스크립트로 돌릴 땐 --max-budget-usd 1 로 상한을 걸 수 있다

정리

할 것테스트 결과
CLAUDE.md 짧게, 긴 절차는 스킬로비용 1.9배 차이
로그·파일 통째로 넘기지 말고 경로나 grep 결과만12배 차이
큰 파일 읽은 뒤 주제 바뀌면 /clear컨텍스트 5.8배 차이
쉬운 일은 Haiku, max 는 아껴서Haiku 가 Opus medium 의 1/3
MCP 도구 검색 켜두기끄면 요청당 +2.5만
서브에이전트는 메인 컨텍스트 지키는 용도총비용은 오히려 +25%
/context 부터 한번 쳐보기뭐가 새는지 바로 보인다

반대로 “대충 말해도 되냐” 는 작은 프로젝트에선 차이가 없었다. 깨진 테스트가 하나뿐이라 모호하게 시켜도 바로 찾았다($0.111 vs $0.115). 큰 레포에선 다를꺼 같다. 파일 경로 하나 적어줘서 손해 볼 일은 없다.

제일 효과 컸던건 CLAUDE.md 다이어트랑 로그 복붙 안 하기. 이 블로그 CLAUDE.md 부터 다시 봐야 할듯