Claude Code 쓰다 보면 어느 순간 월 청구서가 무섭다. 토큰이 뭔지도 모르게 사라진다.

이 글은 이론 없이 실전만 다룬다. 지금 바로 적용 가능한 것들.


토큰이 어떻게 소비되는지 먼저

Claude Code의 컨텍스트 윈도우는 200k 토큰. 이 안에 이것저것 다 들어간다:

  • 대화 전체 히스토리
  • Claude가 읽은 파일 내용
  • 실행한 명령어 결과
  • CLAUDE.md 전체
  • MCP 서버 도구 정의
  • 시스템 프롬프트

문제는 매 메시지마다 이 전체를 처리한다는 것. 세션 초반에 디버깅하다 나온 스택트레이스, 읽었다가 안 쓴 파일, 이미 해결된 에러 로그 — 이게 다 뒤에 오는 질문의 비용에 포함된다.

현재 사용량 확인 방법:

명령어 대상 내용
/context 모든 사용자 컨텍스트 윈도우 사용량 상세 분류 (시스템/도구/파일/대화)
/cost API 키 사용자 세션 토큰 수 + 비용
/stats 구독제 사용자 일별 사용량, 세션 히스토리, 모델 선호도
/usage 구독제 사용자 플랜 한도 및 현재 속도 제한 상태

Claude Max/Pro 구독제는 토큰당 과금이 아니라 월정액이라 /cost가 의미 없다. /stats/usage를 쓴다.


1. 세션 관리 3가지 명령어

/clear — 주제 바꿀 때 무조건

다른 작업으로 넘어갈 때 이전 대화를 끌고 가는 건 낭비다. 인증 버그 디버깅하다가 UI 작업하면, Claude는 UI 질문 하나에도 인증 디버깅 전체를 같이 처리한다.

작업 A 완료 → /clear → 작업 B 시작

세션 기록은 남는다. 컨텍스트만 초기화된다. /resume으로 다시 돌아올 수 있으니 /rename으로 이름 붙여두면 찾기 쉽다.

언제 쓰나:

  • 완전히 다른 기능/영역으로 이동할 때
  • 같은 문제로 2번 이상 틀린 방향으로 갔을 때 (오염된 컨텍스트 초기화)
  • 하루 시작할 때

/compact — 컨텍스트 50% 찼을 때

대화 전체를 요약해서 압축한다. 40개 메시지 디버깅 세션이 500토큰짜리 요약으로 줄어든다.

자동 압축은 95%에서 발동하는데, 그때까지 기다리면 늦다. 50~60% 즈음에 수동으로 하면 더 많은 맥락이 보존된다.

/compact 코드 변경 사항과 실패한 테스트 목록 위주로 요약해줘

무엇을 보존할지 지시할 수 있다. 그냥 /compact만 해도 되지만 중요한 정보가 있으면 명시하는 게 좋다.

/rewind — 잘못된 방향 즉시 차단

Claude가 엉뚱한 방향으로 가고 있다 싶으면 Esc 두 번. 체크포인트로 되돌아간다.

왜 중요하냐: 잘못된 방향으로 10턴 더 가면 그 10턴 비용이 다 낭비다. 조기에 끊는 게 최선.


2. CLAUDE.md 다이어트

CLAUDE.md는 매 메시지마다 컨텍스트에 들어간다. 길면 길수록 모든 작업이 비싸진다. 게다가 너무 길면 Claude가 중요한 규칙을 놓친다.

목표: 150줄 이하.

들어가야 하는 것

## 빌드/테스트 명령어
- 빌드: `npm run build`
- 테스트: `pytest tests/ -v`
- 린트: `npm run lint:fix`

## 헷갈리기 쉬운 것
- `api/` vs `services/`: api는 HTTP 클라이언트, services는 비즈니스 로직
- `Button` vs `BaseButton`: Button은 스타일 포함, BaseButton은 래퍼만

## 금지사항
- any 타입 사용 금지
- console.log 커밋 금지
- 외부 라이브러리 추가 전 확인

빼야 하는 것

  • Claude가 코드 읽으면 알 수 있는 것 → 빼라
  • 표준 언어/프레임워크 컨벤션 → 빼라 (Claude가 이미 안다)
  • 상세 API 문서 → 링크로 대체
  • 자주 바뀌는 정보
  • 프로젝트 역사, 배경 설명

리트머스 테스트: “이 줄 지워도 Claude가 실수를 안 할까?” → 그럼 지워라.

경로별 규칙으로 분리

.claude/rules/ 폴더에 파일을 만들면 특정 경로 작업할 때만 로드된다.

---
paths:
  - "src/api/**/*.ts"
---

# API 개발 규칙
- 모든 엔드포인트에 입력 유효성 검사 필수
- 에러 응답은 표준 형식 사용: { error: string, code: string }

프론트엔드 작업할 때 백엔드 규칙이 컨텍스트에 없다. 반대도 마찬가지.

자주 안 쓰는 절차는 Skills로

.claude/skills/ 안에 넣으면 호출할 때만 로드된다.

<!-- .claude/skills/deploy/SKILL.md -->
---
name: deploy
description: 스테이징/프로덕션 배포 시 사용
---

# 배포 절차
1. `npm run build` 실행
2. 테스트 통과 확인
3. ...
(상세 배포 절차 전체)

CLAUDE.md에는 deploy skill이 있다는 것만 알면 된다. 내용 전체가 항상 로드될 필요 없다.


3. MCP 서버 — 가장 큰 낭비 원인

실측 데이터가 충격적이다.

한 개발자가 측정한 결과: MCP 도구들이 66,000+ 토큰을 소비 — 첫 메시지 전에. 200k 컨텍스트의 33%가 메시지 한 줄 쓰기 전에 사라진다.

다른 케이스: 20개 도구 → 14,214토큰. 8개로 줄이니 → 5,663토큰. 도구 하나에 평균 710토큰.

MCP 서버는 도구 스키마 전체가 시스템 프롬프트에 들어간다. 사용 안 해도 항상 자리 차지한다.

안 쓰는 MCP 서버 비활성화

/mcp

여기서 현재 서버 목록 확인하고 안 쓰는 거 끄면 된다.

CLI 도구 우선

MCP보다 CLI가 훨씬 효율적이다.

# MCP GitHub 서버 대신
gh pr view 123
gh issue list --state open

# MCP AWS 서버 대신
aws s3 ls s3://my-bucket
aws logs get-log-events --log-group-name /app/prod

CLI 도구는 실제로 실행할 때만 토큰 소비. MCP는 접속만 해도 스키마 전체가 컨텍스트에 올라간다.

현재 컨텍스트 사용량 확인

/context

무엇이 얼마나 먹고 있는지 보인다. MCP가 대부분인 경우가 많다.


4. 서브에이전트로 탐색 작업 격리

코드베이스 탐색, 파일 읽기, 리서치 — 이런 작업은 토큰을 많이 쓴다. 근데 결과만 알면 된다.

서브에이전트는 자기 컨텍스트 윈도우에서 작업하고 요약만 돌려준다.

서브에이전트로 우리 인증 시스템 분석해줘.
토큰 리프레시 로직이 어디 있는지, 재사용할 수 있는 OAuth 유틸리티가 있는지 알려줘.

탐색하면서 읽은 파일 수십 개 — 전부 서브에이전트 컨텍스트에서 처리. 내 세션에는 결론만 온다.

built-in Explore 에이전트는 Haiku 모델로 동작한다. 빠르고 저렴하다.


5. .claudeignore — 안 읽어도 되는 파일 차단

.gitignore처럼 동작한다. Claude가 스캔하면 안 되는 디렉토리/파일 정의.

# .claudeignore
node_modules/
build/
dist/
.cache/
coverage/
*.log
*.lock
*.min.js
*.min.css
__pycache__/
.pytest_cache/

node_modules는 특히 중요하다. Claude가 거기서 뭔가 찾으려 하면 토큰이 폭발한다.


6. 훅으로 출력 전처리

테스트 실패 로그, 빌드 에러, API 응답 — Claude에게 raw 데이터 그대로 주면 비효율적이다.

훅을 쓰면 Claude가 보기 전에 전처리할 수 있다.

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/filter-output.sh"
          }
        ]
      }
    ]
  }
}
#!/bin/bash
# filter-output.sh
# 테스트 명령어 결과면 실패한 것만 필터링
input=$(cat)
cmd=$(echo "$input" | jq -r '.tool_input.command // empty')

if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then
  # FAIL, ERROR, error 포함 줄만 앞뒤 5줄씩
  echo "$input" | jq -r '.content' | grep -A 5 -B 1 -E "(FAIL|ERROR|error:)" | head -100
else
  echo "$input"
fi

10,000줄 테스트 로그 → 실패한 100줄. 극단적인 절감이다.


7. 프롬프트 습관

비용 차이가 나는 프롬프트 패턴들.

파일 경로 직접 명시

# 나쁜 예
로그인 버그 고쳐줘

# 좋은 예
src/auth/tokenRefresh.ts 에서 세션 만료 후 로그인 실패하는 버그.
재현 테스트 먼저 작성하고 수정해줘.

경로 모르면 Claude가 파일 탐색부터 시작한다. 탐색 = 토큰.

계획 먼저, 구현 나중

Shift+Tab으로 plan mode 진입. 코드 건드리기 전에 접근법 합의.

계획을 수정하는 건 저렴하다. 여러 파일에 퍼진 잘못된 코드를 되돌리는 건 비싸다.

단, 단순한 수정(오타, 간단한 리네임)은 plan mode 오버헤드가 더 크다. 복잡한 작업에만 쓴다.

검증 기준 제공

validateEmail 함수 만들어줘.
테스트 케이스: user@example.com → true, invalid → false, user@.com → false
구현 후 테스트 실행해줘.

검증 기준이 있으면 Claude가 스스로 확인한다. 없으면 내가 결과 확인하고 수정 요청하는 왕복이 생긴다.


8. 모델 선택

태스크마다 맞는 모델이 다르다. Opus가 항상 필요하지 않다.

작업 추천 모델
파일 읽기, 탐색, 단순 질문 Haiku
대부분의 코딩 작업 Sonnet
복잡한 아키텍처 설계, 어려운 버그 Opus
설계는 Opus, 구현은 Sonnet (하이브리드) opusplan

/model로 세션 중에도 전환 가능. Haiku는 Opus 대비 최대 5배 저렴하다.

opusplan — 플래닝 Opus, 실행 Sonnet

opusplan은 Claude Code가 공식 지원하는 하이브리드 모델 앨리어스다.

  • Plan mode 진입 시: Claude Opus 4.6 사용 → 아키텍처 결정, 복잡한 분석, 설계
  • 코드 실행 시: Claude Sonnet으로 자동 전환 → 파일 수정, 명령어 실행

Opus의 추론 품질은 유지하면서 구현 단계에서 Sonnet 비용으로 내려온다. 순수 Opus 대비 약 60% 비용 절감 효과.

# 세션 중 전환
/model opusplan

# 시작부터 설정
claude --model opusplan

복잡한 작업 구조: Shift+Tab으로 plan mode 진입 → Opus가 설계 → plan mode 해제 → Sonnet이 구현.

단순한 작업에는 오버킬이다. 아키텍처 결정이나 어려운 버그 분석이 포함된 세션에서 가치가 있다.

CI/CD 파이프라인이나 스크립트에서 Claude Code 쓴다면:

claude -p "테스트 실행하고 실패한 것만 보고해줘" --model claude-haiku-...

9. settings.json으로 영구 설정

매번 환경변수 export하기 귀찮다면 settings.json에 박아두면 된다.

파일 위치

범위 경로 용도
개인 전역 ~/.claude/settings.json 모든 프로젝트에 적용
프로젝트 공유 .claude/settings.json git에 커밋, 팀 공유
프로젝트 로컬 .claude/settings.local.json .gitignore 처리, 개인 오버라이드

우선순위: 로컬 프로젝트 > 공유 프로젝트 > 개인 전역

토큰 절약 관련 설정 예시

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "opusplan",
  "env": {
    "DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
    "MAX_THINKING_TOKENS": "8000",
    "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "70"
  }
}

각 설정의 의미:

DISABLE_NON_ESSENTIAL_MODEL_CALLS 팁, 제안 등 백그라운드 모델 호출을 끈다. 소량이지만 쌓인다.

MAX_THINKING_TOKENS Extended thinking 토큰 예산. 기본값 31,999. 복잡한 작업 아니면 줄여도 된다. 0으로 설정하면 thinking 완전히 비활성화. Opus 4.6 사용 시엔 이 대신 CLAUDE_CODE_EFFORT_LEVEL 사용 권장 ("low" / "medium" / "high").

CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 자동 압축 발동 기준. 기본값 95(%). 낮출수록 더 일찍 압축한다. 70 정도로 설정하면 컨텍스트가 많이 차기 전에 압축돼서 중요한 맥락이 더 잘 보존된다.

팀 프로젝트 공유 설정

.claude/settings.json을 git에 커밋하면 팀 전체에 동일한 설정이 적용된다.

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "model": "opusplan",
  "env": {
    "DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1"
  },
  "permissions": {
    "deny": ["Read(./.env)", "Bash(rm -rf *)"]
  }
}

.claude/settings.local.json.gitignore에 추가해서 개인 설정 분리.


10. 기타 소소한 것들

# CI/CD에서 구조화된 출력으로 토큰 트래킹 (API 키 사용자)
claude -p "API 엔드포인트 목록 뽑아줘" --output-format json

input_tokens, output_tokens, total_cost 메타데이터가 같이 나온다. 자동화된 작업 비용 모니터링에 유용하다 (API 키 과금 방식일 때만 의미 있음).


실질적인 절감 순위

체감 임팩트 기준으로 정리:

방법 임팩트
안 쓰는 MCP 서버 비활성화 ★★★★★
/clear 주제 전환 시 사용 ★★★★★
서브에이전트로 탐색 격리 ★★★★☆
/compact 50%에서 수동 실행 ★★★★☆
CLAUDE.md 150줄로 다이어트 ★★★☆☆
.claudeignore 설정 ★★★☆☆
파일 경로 명시 프롬프트 ★★★☆☆
훅으로 출력 전처리 ★★★★☆ (자동화 환경)
경로별 규칙 분리 ★★☆☆☆
settings.json CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 설정 ★★☆☆☆
DISABLE_NON_ESSENTIAL_MODEL_CALLS ★☆☆☆☆

MCP 서버 하나가 700토큰이다. 20개면 14,000토큰. 안 쓰는 거 정리하는 게 제일 빠른 지름길이다.

나머지는 습관이다. /clear, /compact, 경로 명시 — 이 세 가지만 잘 해도 체감이 확연히 다르다.