본문 바로가기
AI/Claude code

[Claude Code] rtk-ai (token-killer)

by Machine-Geon 2026. 3. 13.
반응형

rtk (Rust Token Killer) 직접 써보고 비교 테스트한 결과

테스트 일시: 2026-03-13
rtk 버전: 0.29.0


1. rtk 개요

항목 내용
GitHub https://github.com/rtk-ai/rtk
스타 6.6k
라이선스 MIT (완전 오픈소스)
언어 Rust (단일 바이너리, 의존성 없음)
원리 CLI 명령어 출력을 LLM에 전달 전 필터링/압축하는 프록시
연동 방식 PreToolUse 훅으로 Claude Code 명령어를 rtk <명령어>로 자동 치환

2. 설치 및 연동 방법

2.1 설치

macOS (Homebrew, 권장):

brew install rtk

Linux / macOS (curl):

curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh

Cargo (Rust 환경):

cargo install --git https://github.com/rtk-ai/rtk

2.2 Claude Code 연동

rtk init --global
  • ~/.claude/settings.json에 PreToolUse 훅이 자동 등록됨
  • 이후 Claude Code가 Bash 명령어 실행 시 자동으로 rtk <명령어>로 치환
  • 설정 변경 전 백업 파일 자동 생성

2.3 사용 확인

rtk gain    # 토큰 절감 통계 확인

2.4 제거

rtk uninstall --global    # Claude Code 훅 해제
brew uninstall rtk        # 바이너리 제거

3. 명령어별 Before/After 비교

실제 Spring Boot/Gradle 프로젝트(변경 파일 10개, unstaged 상태)에서 테스트했다.

3.1 git status

항목 Before (원본) After (rtk) 절감율
바이트 1,385 709 48.8%
줄 수 18 9 50.0%

차이점 분석:

  • rtk가 힌트 메시지(use "git add...", use "git restore...") 제거
  • 📌 branch...remote 형식으로 브랜치 정보 압축
  • 📝 Modified: 10 files 요약 추가, 5개 이상 파일은 ... +5 more로 축약
  • 주의: 파일 5개 이상이면 뒷부분이 잘림 → Claude가 변경 파일 전체 목록을 모를 수 있음

3.2 git diff

항목 Before (원본) After (rtk) 절감율
바이트 32,443 22,498 30.7%
줄 수 536 415 22.6%

차이점 분석:

  • diffstat 요약을 상단에 배치 (파일별 변경 줄 수)
  • diff 헤더(diff --git a/... b/..., index ..., --- a/..., +++ b/...) 제거
  • 파일별 변경사항만 📄 파일명 + 변경 라인으로 정리
  • 핵심 변경 내용(+/- 라인)은 유지됨 → 정보 손실 적음

3.3 git diff --stat

항목 Before (원본) After (rtk) 절감율
바이트 752 751 0.1%
줄 수 11 11 0.0%

분석: 이미 요약된 출력이므로 압축 효과 없음.

3.4 git log --oneline -20

항목 Before (원본) After (rtk) 절감율
바이트 1,462 1,013 30.7%
줄 수 20 20 0.0%

차이점 분석:

  • Merge 커밋을 자동 필터링 (3개 Merge 커밋 제거, 일반 커밋으로 대체)
  • 줄 수는 동일하지만 Merge 커밋의 긴 메시지가 제거되어 바이트 감소
  • 주의: Merge 이력이 필요한 경우 정보 손실 가능

3.5 ./gradlew compileJava

항목 Before (원본) After (rtk) 절감율
바이트 1,020 690 32.4%
줄 수 14 10 28.6%

차이점 분석:

  • deprecation/unchecked 경고 메시지 제거
  • BUILD SUCCESSFUL 결과만 유지
  • 단, 두 번째 실행은 UP-TO-DATE로 원래 출력이 짧아 차이가 작음

3.6 ./gradlew clean build -x test

항목 Before (원본) After (rtk) 절감율
바이트 434,050 431,633 0.6%
줄 수 4,836 4,814 0.5%

분석: rtk가 Gradle을 fallback 모드로 처리 (전용 필터 없음). 거의 효과 없음.
JAR 서명/SBOM 생성 등의 출력이 대부분이라 필터링 대상이 아님.


4. rtk gain 통계 (실제 측정)

Total commands:    6
Input tokens:      9.1K
Output tokens:     6.2K
Tokens saved:      2.9K (31.5%)

 #  Command                   Saved    Avg%
 1. git diff                  2.7K    32.2%
 2. git status                 189    54.5%
 3. git log --oneline            1     0.4%
 4. git diff --stat              0     0.0%
 5. gradlew compileJava          0     0.0%  (fallback)
 6. gradlew clean build          0     0.0%  (fallback)

핵심 발견: Gradle 명령어는 fallback 처리되어 절감 효과가 거의 없음.
토큰 절감의 대부분은 git diff에서 발생.


5. Java/Spring Boot 프로젝트 기준 효과 예측

Claude Code 세션의 토큰 소모 구성 (추정)

카테고리 비중 rtk 적용
파일 읽기 (Read/Grep/Glob) ~35%
파일 편집 (Edit/Write) ~25%
대화 컨텍스트 (분석/설명) ~20%
Bash 명령어 (git, gradle) ~15%
Agent/서브에이전트 ~5% ⚠️ 부분적

예상 절감 계산

  • Bash 명령어 비중: ~15%
  • Bash 중 rtk 효과 있는 명령어 (git 계열): ~60%
  • 해당 명령어의 평균 절감율: ~35%
  • 전체 세션 절감율: 15% × 60% × 35% ≈ 3~5%

시나리오별 효과

시나리오 예상 절감율 설명
코드 분석/리뷰 위주 1~3% Read/Grep 위주, Bash 적음
일반 개발 (편집+빌드+커밋) 3~5% git 명령어 빈도 중간
대규모 리팩토링+빈번한 git 5~8% git diff 대량 발생 시 효과
테스트 반복 실행 2~4% Gradle은 fallback이라 효과 제한적

6. 추가 테스트: rtk test (범용 테스트 필터) vs Gradle

핵심 발견: 호출 방식에 따라 결과가 완전히 다름

호출 방식 바이트 줄 수 절감율 설명
./gradlew test (원본) 3,123 49 - 에러 3개 + 경고 + 보일러플레이트
rtk ./gradlew test (fallback) 3,123 49 0% Gradle 전용 필터 없어서 그대로 통과
rtk test ./gradlew test (test 모드) 225 7 95.1% 실패 요약만 출력

rtk test 적용 시 출력 비교

Before (원본 49줄):

Configuration on demand is an incubating feature.
> Configure project :
The 'sonarqube' task depends on compile tasks...
> Task :compileJava FROM-CACHE
...
ApplicationControllerTest.java:340: error: no suitable method found for thenReturn(...)
ApplicationHandlerTest.java:714: error: incompatible types...
ApplicationHandlerTest.java:734: error: incompatible types...
Note: Some input files use or override a deprecated API...
3 errors
> Task :compileTestJava FAILED
FAILURE: Build failed with an exception.
* What went wrong: ...
* Try: Run with --info option...
BUILD FAILED in 6s

After (rtk test, 7줄):

📊 OUTPUT (last 5 lines):
  * Try:
  > Run with --info option to get more log output.
  > Run with --scan to get full insights.
  BUILD FAILED in 3s
[full output: ~/Library/Application Support/rtk/tee/...log]

문제점: rtk test는 에러 상세를 제거함

  • 원본에는 어떤 파일, 어떤 줄, 어떤 에러인지 나오지만
  • rtk test는 마지막 5줄만 남겨서 "BUILD FAILED" 사실만 전달
  • Claude가 에러를 수정하려면 원본 에러 메시지가 필요 → 테스트 실패 디버깅 시 오히려 역효과
  • full output 경로를 제공하지만, Claude가 해당 파일을 다시 읽어야 함 → 토큰 절감 무의미

7. 테스트를 자주 돌리는 경우 시나리오 분석

시나리오: 테스트 반복 실행이 잦은 경우

항목 일반 개발 테스트 중심
세션 내 테스트 실행 비율 ~10% 4060%
git 명령어 비율 ~15% ~10%
파일 읽기/편집 비율 ~60% ~30%

테스트 러너별 rtk 지원 현황

테스트 러너 rtk 지원 예상 절감율 비고
vitest ✅ 전용 필터 높음 rtk vitest 명령어 존재
playwright ✅ 전용 필터 높음 rtk playwright 명령어 존재
cargo test ✅ 전용 필터 높음 rtk cargo test
npm test ✅ 전용 필터 높음 rtk npm test
dotnet test ✅ 전용 필터 높음 rtk dotnet test
Gradle test ❌ fallback 0% 전용 필터 없음
Maven test ❌ fallback 0% 전용 필터 없음

프로젝트 유형별 예상 효과

JS/TS 프로젝트 (vitest, playwright 등):

항목 추정
테스트 출력 비중 ~50%
rtk 절감율 (테스트) ~90%
전체 세션 절감율 2535%
도입 추천도 ★★★★★

Java/Spring Boot 프로젝트 (Gradle/Maven):

항목 추정
테스트 출력 비중 ~50%
rtk 절감율 (Gradle) 0% (fallback)
rtk test 사용 시 95% 절감이지만 에러 상세 손실
전체 세션 절감율 35% (fallback) / 위험 (rtk test)
도입 추천도 ★★☆☆☆

rtk test 사용의 딜레마

테스트 성공 시: 95% 절감 → 효과 큼 (통과 메시지만 있으면 됨)
테스트 실패 시: 95% 절감이지만 에러 정보 소실 → Claude가 수정 불가
                → full log 파일을 다시 읽어야 함 → 토큰 절감 무의미

"테스트 통과 확인"만 하는 경우에는 rtk test가 유효하지만,
"테스트 실패 원인 분석 및 수정"이 목적이라면 오히려 방해가 됩니다.

다만, vitest나 playwright 같은 전용 필터가 있는 러너는 범용 rtk test와 다르게
에러 메시지를 보존하면서 노이즈만 제거하도록 설계되어 있어서 이 문제가 덜하다.


8. 장단점 정리

장점

  • 설치/제거가 간편 (brew install/uninstall, rtk init/uninstall --global)
  • git diff 출력 압축이 실질적으로 유용 (헤더 제거, 핵심 변경만 전달)
  • 오픈소스이고 보안 리뷰 프로세스가 체계적
  • 서브에이전트에서도 훅 기반으로 자동 적용
  • JS/TS 생태계 (vitest, playwright, npm, tsc, next) 지원이 강력

단점

  • Gradle/Maven 미지원 (fallback) → Java/Spring Boot 프로젝트에서 효과 제한
  • rtk test 사용 시 에러 상세 정보 손실 → 디버깅 품질 저하
  • git status에서 파일 목록이 잘릴 수 있음 (5개 이상 시 +N more)
  • git log에서 Merge 커밋 자동 제거 → 이력 추적에 영향 가능

SNS 게시글 vs 실제 테스트

주장 실측 판정
토큰 70% 절감 (30분 세션) Java 프로젝트 기준 3~5% ⚠️ JS/TS 프로젝트에서는 가능할 수 있으나, 도구 생태계에 따라 편차 큼
git add/commit/push 92% git status 54.5%, git diff 32.2% ⚠️ 명령어에 따라 편차 큼
npm test 90% 절감 rtk test 95.1% (단, 에러 상세 손실) ⚠️ 수치는 맞지만, 실패 시 디버깅 품질 저하

9. 결론 및 권장사항

프로젝트 유형별 도입 추천

프로젝트 유형 추천도 이유
JS/TS (Next.js, React 등) ★★★★★ vitest, tsc, next, playwright 전용 필터 지원
Python ★★★★☆ pytest는 rtk test로 대응 가능
Rust ★★★★☆ cargo 전용 필터 지원
.NET ★★★★☆ dotnet 전용 필터 지원
Java/Spring Boot (Gradle) ★★★☆☆ Gradle fallback, git 계열만 효과
Java/Spring Boot (Maven) ★★★☆☆ Maven fallback, git 계열만 효과

Java/Spring Boot 프로젝트 기준

도입 추천도: ★★★☆☆ (보통)

  • Gradle이 fallback이라 빌드/테스트 출력 압축 불가
  • git diff에서의 소소한 절감 (32%) 정도가 실질적 효과
  • 비용이 거의 없으므로 설치해두면 손해는 아님
  • 테스트를 자주 돌려도 Java/Gradle 기반이면 극적 효과 없음

JS/TS 프로젝트 기준

도입 추천도: ★★★★★ (강력 추천)

  • vitest/playwright 전용 필터로 테스트 출력 90%+ 압축
  • 반복 실행이 잦을수록 누적 절감 효과 큼
  • 단, 테스트 실패 디버깅 시에는 rtk test 비활성화 고려

도입 시 명령어

brew install rtk
rtk init --global    # Claude Code 훅 연동
# 사용 후 확인
rtk gain
# 제거 시
rtk uninstall --global
brew uninstall rtk
반응형

'AI > Claude code' 카테고리의 다른 글

[Claude Code] btw  (0) 2026.03.13
Claude 2월 업데이트 정리  (0) 2026.03.06
[Claude Code] Claude Remote Control  (0) 2026.02.25
[Claude Code] Claude Code 실행 직후 종료되는 문제  (0) 2026.02.09
[Claude code]6.CLAUDE.md  (1) 2025.09.23