반응형
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% | |
| 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% |
| 전체 세션 절감율 | |
| 도입 추천도 | ★★★★★ |
Java/Spring Boot 프로젝트 (Gradle/Maven):
| 항목 | 추정 |
|---|---|
| 테스트 출력 비중 | ~50% |
| rtk 절감율 (Gradle) | 0% (fallback) |
rtk test 사용 시 |
95% 절감이지만 에러 상세 손실 |
| 전체 세션 절감율 | |
| 도입 추천도 | ★★☆☆☆ |
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 |