Claude Code의 두 가지 캐시 버그: API 비용을 10-20배 올리는 원인과 우회법
PSA: Claude Code has two cache bugs that can silently 10-20x your API costs — here's the root cause and workarounds
TL;DR Highlight
Claude Code 스탠드얼론 바이너리와 --resume 옵션의 캐시 버그 두 개가 API 비용을 10-20배 증가시킨다.
Who Should Read
Claude Code를 CLI나 자동화 스크립트에서 사용하는 개발자. 특히 --resume으로 대화를 이어가거나 CLAUDE.md에 내용을 많이 넣어두고 쓰는 사람.
Core Mechanics
- 버그 1: 스탠드얼론 바이너리에는 Anthropic의 커스텀 Bun 포크에 네이티브 레이어 문자열 치환 로직이 있는데, 대화 히스토리에 특정 sentinel 문자열이 포함되면 매 API 요청마다 메시지 내용이 바뀐다.
- sentinel 문자열은 CC 소스 코드를 읽었거나, 빌링 관련 헤더를 언급했거나, CLAUDE.md 파일에 관련 내용이 있을 때 대화에 포함될 수 있다.
- 메시지 내용이 매번 달라지면 캐시 prefix(이전 대화를 캐시해서 재사용하는 기능)가 깨져서 매 요청마다 전체 토큰을 다시 과금한다.
- 버그 1 우회법: 스탠드얼론 바이너리 대신 `npx claude` 방식으로 실행하면 이 치환 로직을 거치지 않아서 캐시가 정상 동작한다.
- 버그 2: v2.1.69부터 --resume 옵션을 쓰면 항상 캐시 미스가 발생한다. deferred_tools_delta의 순서가 fresh session과 resumed session 사이에 달라지는 게 원인이다.
- --resume 시 시스템 프롬프트만 캐시되고 전체 대화 히스토리는 매번 처음부터 다시 읽혀서, resume 요청 하나에 10-20배 비용이 발생할 수 있다.
Evidence
- 버그 2는 v2.1.69 이후 --resume 사용 시 항상 재현된다고 보고됨. 시스템 프롬프트를 제외한 전체 대화 히스토리가 캐시 미스 처리됨.
- 두 버그 모두 API 비용을 10-20배까지 증가시킬 수 있다고 명시됨. 대화가 길수록 손해가 커짐.
- 버그 1은 스탠드얼론 바이너리에만 존재하며, npx 실행 방식에서는 동일 증상이 재현되지 않음.
How to Apply
- 지금 당장: Claude Code를 스탠드얼론 바이너리로 실행 중이라면 `npx @anthropic-ai/claude-code` 방식으로 바꿔라. CLAUDE.md에 빌링/소스코드 관련 내용이 있는 경우 특히 중요하다.
- --resume을 자주 쓰는 자동화 스크립트가 있다면 v2.1.69 이전 버전으로 다운그레이드하거나, resume 없이 새 세션으로 시작하는 방식으로 임시 우회한다.
- Claude API 비용이 갑자기 치솟았는데 원인을 모르겠다면, Claude Code 버전과 실행 방식(standalone vs npx), --resume 사용 여부를 먼저 확인한다.
Code Example
# 버그 1 우회: 스탠드얼론 바이너리 대신 npx 사용
# Before (캐시 버그 있음)
claude "your prompt here"
# After (캐시 정상 동작)
npx @anthropic-ai/claude-code "your prompt here"
# 버그 2 확인: 현재 설치된 버전 체크
claude --version
# v2.1.69 이상이면 --resume 사용 시 캐시 미스 발생
# 임시 우회: resume 대신 새 세션 시작
# claude --resume <session-id> <- 비용 폭탄 가능
claude # 새 세션으로 시작Terminology
관련 논문
Swift로 LLM 학습시키기 Part 1: 행렬 곱셈을 Gflop/s에서 Tflop/s로 끌어올리기
Apple Silicon에서 Swift로 직접 행렬 곱셈 커널을 구현하며 CPU, SIMD, AMX, GPU(Metal)를 단계별로 최적화해 Gflop/s에서 Tflop/s 수준까지 성능을 높이는 과정을 상세히 설명한 글이다. 프레임워크 없이 LLM 학습의 핵심 연산을 밑바닥부터 구현하고 싶은 개발자에게 Apple Silicon의 성능 한계를 체감할 수 있는 드문 자료다.
fsync 없이 로컬 스토리지 엔진을 crash-consistent하게 만든 방법
FractalBits가 fsync 없이 SSD 전용 KV 스토리지 엔진을 구현해 동일 조건 대비 약 65% 높은 쓰기 성능을 달성한 설계 방법을 공유했다. fsync의 메타데이터 오버헤드를 피하기 위해 사전 할당, O_DIRECT, SSD 원자 쓰기 단위 정렬 저널을 조합한 구조가 핵심이다.
Google Chrome, 사용자 동의 없이 4GB AI 모델(Gemini Nano)을 몰래 설치
Google Chrome이 사용자 동의 없이 Gemini Nano 4GB 모델 파일을 자동 다운로드하고, 삭제해도 재다운로드되는 문제가 발견됐다. GDPR 위반 가능성과 수십억 대 기기에 적용될 때의 환경 비용 문제가 제기되고 있다.
OpenAI가 대규모 저지연 Voice AI를 제공하는 방법
OpenAI가 9억 명 이상의 사용자에게 실시간 음성 AI를 제공하기 위해 WebRTC 스택을 어떻게 재설계했는지 설명하는 글로, relay + transceiver 분리 아키텍처의 설계 결정과 trade-off를 상세히 다룬다.
Truncated Decoding Tree의 결정론적 탐색을 통한 효율적인 Test-Time Inference
Self-consistency의 중복 샘플링 낭비를 없애는 결정론적 트리 탐색 디코딩 기법 DLE로 수학/코드 추론 성능과 속도를 동시에 개선
GoModel – Go로 작성된 오픈소스 AI Gateway
OpenAI, Anthropic, Gemini 등 여러 AI 프로바이더를 하나의 OpenAI 호환 API로 묶어주는 Go 기반 오픈소스 AI 게이트웨이로, LiteLLM의 컴파일 언어 대안이다.