Claude Code에서 99.8% 토큰을 절약한 방법 — RTK 실전 분석
실제 프로덕션 모노레포 개발에 RTK(Rust Token Killer)를 도입한 결과, 564.8M 토큰 중 563.8M을 절약(99.8%) 했다. 어떻게 가능했는지, 실제 수치와 함께 분석한다.
프로젝트 소개
분석 대상은 Next.js 15 + React 19 기반의 멀티앱 모노레포다.
| 앱 | 용도 |
|---|---|
| apps/adv | 광고주 서비스 |
| apps/admin | 어드민 대시보드 |
| apps/marketer | 마케터 서비스 |
| apps/partner-admin | 파트너 어드민 |
공통 스택: Turbo 2.5 + pnpm 9 + TypeScript 5.4 + Chakra UI 3 + TanStack Query 5
개발 과정에서 Figma 시안을 코드로 퍼블리싱하는 작업이 빈번했고, Claude Code가 Figma API를 직접 호출하는 구조를 사용했다.
RTK란?
RTK (Rust Token Killer)는 Claude Code가 실행하는 CLI 명령어의 출력을 LLM 컨텍스트에 최적화된 형태로 압축하는 도구다.
예를 들어 git diff의 전체 패치 대신 "변경된 파일 목록과 요약"만 Claude에게 전달한다.
# Claude가 실행하려는 명령
git status
# RTK가 실제로 실행하는 명령
rtk git status
# → 출력을 필터링 후 Claude에게 전달 (55~82% 절약)동작 원리: Claude Code 훅 연동
RTK의 핵심은 Claude Code의 PreToolUse 훅이다.
// ~/.claude/settings.json
{
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "/Users/taehoon/.claude/hooks/rtk-rewrite.sh"
}
]
}
]
}Claude Code가 Bash 도구를 호출할 때마다 훅이 가로채서 명령을 재작성한다.
Claude: "git status 실행해줘"
↓
PreToolUse 훅 발동
↓
rtk-rewrite.sh → rtk rewrite "git status"
↓
"rtk git status" 로 교체
↓
실행 결과를 필터링하여 Claude에게 전달rtk-rewrite.sh 자체는 얇은 래퍼고, 실제 재작성 로직은 Rust 바이너리의 src/discover/registry.rs에 있다. 새 명령 패턴을 추가하려면 Rust 레지스트리를 수정한다.
실제 절약 수치 (30일 기준)
총 실행 명령: 505회
원본 입력 토큰: 564.8M
절약 토큰: 563.8M (99.8%)
평균 실행 시간: 1.4초명령별 절약 현황
| 순위 | 명령 | 실행 횟수 | 절약 토큰 | 절약률 |
|---|---|---|---|---|
| 1 | curl (Figma API) | 3회 | 562.3M | 100% |
| 2 | lint eslint | 3회 | 324.3K | 99.8% |
| 3 | curl (Figma 노드) | 5회 | 288.9K | 96.8% |
| 4 | find | 60회 | 217.5K | 80.2% |
| 5 | curl (Figma 기타) | 2회 | 181.8K | 96.2% |
| 6~10 | curl (Figma 기타) | 14회 | ~308K | 88~98% |
왜 Figma API가 압도적인가
전체 절약량(563.8M)의 99.7%가 Figma API curl 호출 단 3회에서 발생했다.
이유는 Figma API 응답의 구조 때문이다.
// Figma API 원본 응답 (수십 MB)
{
"document": {
"children": [
{
"id": "...",
"name": "Frame",
"type": "FRAME",
"children": [
// ... 수천 개의 중첩 노드
// 각 노드마다: fills, effects, constraints,
// absoluteBoundingBox, relativeTransform,
// style, strokes, cornerRadius, ...
]
}
]
}
}디자인 파일 하나가 수십 MB JSON이 된다. 이것이 Claude 컨텍스트에 그대로 들어가면 단 1회 호출로 컨텍스트 윈도우가 포화된다.
RTK는 이 응답을 Claude가 실제로 필요한 구조 정보만 남기고 압축한다.
원본: 수백만 토큰
RTK 필터링 후: 수천 토큰
절약률: ~100%이 프로젝트에서는 Python 기반의 Figma 퍼블리싱 파이프라인이 있다:
figma_publish.py
├── figma_analyze.py ← Figma API 호출 + 디자인 시스템 맵 생성
├── figma_export_icons.py ← 아이콘 SVG 추출
├── figma_export_images.py ← 이미지 에셋 추출
└── publish_qa.py ← 퍼블리싱 품질 검증이 파이프라인이 Figma 노드 트리를 직접 다루는 만큼, API 응답 압축의 효과가 극단적으로 나타났다.
놓친 절약 기회 (rtk discover 분석)
rtk discover로 30일간 Claude Code가 RTK 없이 실행한 명령을 분석했다.
스캔: 657세션, 5903개 Bash 명령
RTK 사용 중: 5개 (0.08%)아직 RTK를 거치지 않는 명령들
| 명령 | 실행 횟수 | 절약 가능 토큰 |
|---|---|---|
git diff | 555회 | ~240.8K |
cat > (파일 읽기) | 481회 | ~216.7K |
find (미필터) | 586회 | ~148.3K |
grep -n | 567회 | ~131.5K |
curl -s | 132회 | ~33.7K |
ls -la | 681회 | ~23.2K |
| 기타 | — | ~16.6K |
| 합계 | — | ~810.1K |
이 명령들에 RTK를 적용하면 추가로 810K 토큰을 더 절약할 수 있다. 현재까지 절약한 563.8M에 비하면 작지만, 여전히 의미 있는 수치다.
RTK 설정 방법
1. 설치
cargo install rtk
# 또는
brew install rtk-ai/tap/rtk2. Claude Code 훅 등록
rtk install # 자동으로 ~/.claude/settings.json에 훅 추가또는 수동으로 ~/.claude/settings.json에 추가:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/rtk-rewrite.sh"
}
]
}
]
}
}3. 절약 현황 확인
rtk gain # 전체 통계
rtk gain --history # 최근 명령 이력
rtk discover # 놓친 절약 기회 분석비용으로 환산하면
Claude API 기준으로 입력 토큰을 대략 $3/1M 토큰으로 계산하면:
| 항목 | 토큰 | 비용 |
|---|---|---|
| RTK 없이 실행했다면 | 564.8M | ~$1,694 |
| RTK 적용 후 실제 비용 | 1.0M | ~$3 |
| 절약액 | 563.8M | ~$1,691 |
Claude Code 구독 플랜(월정액)을 사용하면 금액이 직접적이지는 않지만, 컨텍스트 포화 없이 더 긴 작업을 이어갈 수 있다는 실질적 가치는 동일하다.
정리
RTK는 단순한 "토큰 절약 도구"가 아니다. Claude Code가 컨텍스트 윈도우를 소진하지 않고 더 복잡한 작업을 이어갈 수 있게 해주는 인프라다.
이 프로젝트에서 가장 큰 효과를 본 포인트:
-
Figma API 응답 압축 — 설계 단계에서 Figma 퍼블리싱 파이프라인이 API를 직접 호출하는 구조였기 때문에, RTK 없이는 세션 하나에서 퍼블리싱 작업을 완료하기 어려웠을 것이다.
-
훅 기반 투명한 적용 — Claude Code의 PreToolUse 훅 덕분에 Claude 프롬프트를 수정하거나 작업 방식을 바꿀 필요가 없었다. 설치 후 자동으로 동작한다.
-
Discover로 개선 기회 파악 —
rtk discover는 현재 어떤 명령에서 토큰이 낭비되고 있는지 보여준다. 이를 통해 추가 최적화 방향을 구체적으로 잡을 수 있다.
분석 일자: 2026-03-30 / RTK 버전: 0.28.2 / Claude Code 사용 기간: 30일