Claude Code는 단지 while loop일 뿐 — API를 가로채어 증명했다

발행: (2026년 4월 25일 PM 03:49 GMT+9)
9 분 소요
원문: Dev.to

Source: Dev.to

죄송합니다만, 번역할 텍스트가 제공되지 않았습니다. 번역이 필요한 본문을 알려주시면 한국어로 번역해 드리겠습니다.

Claude Code가 요청당 ~80 KB의 JSON을 전송하는 방식

한 줄을 Claude Code에 입력하고 Enter를 누릅니다.
백그라운드에서는 ~80 KB의 JSON이 Anthropic에 전송됩니다:

  • 시스템 프롬프트
  • 도구 정의
  • 당신의 CLAUDE.md
  • 전체 대화 기록

흥미로운 부분은 크기가 아니라 내부 내용, 구조화된 이유, 그리고 청구가 페이로드와 선형적으로 증가하지 않는 이유입니다.

1️⃣ 트래픽 가로채기

핵심은 Claude Code의 HTTPS 트래픽을 mitmweb이라는 브라우저 기반 MITM 프록시를 통해 라우팅해 요청을 실시간으로 복호화하는 것입니다.

# Terminal 1 – 프록시 시작
mitmweb --listen-port 8080

명령이 표시하는 주소에서 인스펙터 UI를 엽니다.

# Terminal 2 – Claude Code를 프록시로 지정
export HTTPS_PROXY=http://localhost:8080
export NODE_EXTRA_CA_CERTS=~/.mitmproxy/mitmproxy-ca-cert.pem   # ← 대부분 놓치는 부분
claude

Note: NODE_EXTRA_CA_CERTS는 Node가 프록시의 자체 서명 인증서를 신뢰하도록 지정합니다. 그렇지 않으면 Claude Code가 조용히 실패합니다.

이제 간단한 질문을 해봅니다, 예:

package.json을 읽고 어떤 테스트 프레임워크가 사용되는지 알려줘.”

프록시가 활성화됩니다. POST /v1/messages 요청을 클릭하면 – 한 문장에 대해 약 ~80 KB임을 확인할 수 있습니다.

2️⃣ 페이로드 디코딩

프록시 인스펙터에 표시되는 원시 JSON은 읽기 어렵습니다. 저는 Claude Code 페이로드를 네 개의 깔끔한 섹션으로 나누는 작은 파서를 만들었습니다. 가로챈 요청을 복사해 붙여넣기만 하면 됩니다.

#섹션포함 내용캐싱
1System prompt (서버‑측 캐시)"You are Claude Code, Anthropic's official CLI tool…"Deterministic → cached for 5 min
2Tool definitions (서버‑측 캐시)Bash, Edit, Grep, …, Agent에 대한 JSON 스키마Heavy static payload → cached for 5 min
3CLAUDE.md (메시지를 통해 주입)프로젝트 루트에 있는 CLAUDE.md 파일의 정확한 내용매 요청마다 그대로 전송; 최적화 필요
4Conversation historymessages 배열 – 프롬프트, 응답, 도구 호출 및 결과반복될수록 커짐

3️⃣ 에이전트 루프 (실제 플래너)

Claude Code는 본질적으로 while‑loop입니다:

while not done:
    payload = assemble(system_prompt, tools, claude_md, history)
    response = api_call(payload)

    if response.contains_tool_call:
        result = execute_tool_locally(response.tool_call)
        history.append(response)   # 모델 출력
        history.append(result)     # 도구 출력
    else:
        done = True

별도의 플래너는 존재하지 않습니다.
각 반복마다 모델이 답변을 할 수 있는지, 아니면 도구를 호출해야 하는지를 판단합니다. 도구가 호출되면 그 결과가 history에 추가되고 루프가 다시 실행됩니다.

페이로드 증가 예시

반복대략적인 크기발생 상황
1️⃣80 KB간단한 파일 읽기 요청
2️⃣95 KBBash → 테스트 실행 (실패)
3️⃣110 KB실패한 파일 읽기
4️⃣130 KB파일 편집 후 재실행

단순히 비용이 매번 두 배가 될 것처럼 보이지만, 프롬프트 캐싱이 경제성을 크게 바꿔줍니다.

4️⃣ 토큰 경제학 및 프롬프트 캐싱

세션 로그에 cclogviewer를 실행하면 실제 토큰 구성을 확인할 수 있습니다:

요청캐시 쓰기신규 입력
1~8 023 토큰 (cached)~2 000 토큰
2~12 203 토큰 (cache read)~300 토큰
3~12 500 토큰 (cache read)~250 토큰
  • Cache write는 신규 입력보다 약 25 % 더 비쌉니다 (한 번만 발생).
  • Cache read는 신규 입력보다 약 10 배 저렴합니다.

따라서 매 요청마다 전체 시스템 프롬프트 + 도구 정의 + CLAUDE.md를 다시 전송하더라도, 첫 번째 요청만이 해당 바이트에 대해 전체 비용을 지불합니다. 이후 호출은 훨씬 낮은 비율로 청구되므로 비용이 새로운 대화 내용에 대해 거의 선형으로 증가하고, 이차적으로 증가하지 않습니다.

5️⃣ 세션 로깅 및 재생 도구

Claude Code는 모든 요청과 응답을 세션 로그에 저장합니다. 이를 활용하면:

  • 요청/응답을 그대로 재현
  • 특정 단계만 추출해 디버깅
  • 비용 분석을 위한 토큰 사용량 확인

다음 섹션에서는 이러한 로그를 어떻게 추출하고, cclogviewer와 같은 도구로 시각화하는지 다룹니다. (계속)

session locally as JSONL:

~/.claude/projects//.jsonl

Each line = one request or response. The raw file is unreadable, but the community has built helpers:

도구수행 기능
claude-replayJSONL 파일을 드래그‑앤‑드롭 → 깔끔한 시각 재생 (도구 호출 및 결과 포함).
cclogviewer요청당 토큰별 비용 분해를 보여주는 터미널 UI.

These are invaluable for debugging runaway sessions or auditing what your team actually sent to Anthropic.

TL;DR (요약)

사실
요청당 80 KB – 대부분은 툴 스키마와 당신의 **CLAUDE.md**이며, 프롬프트는 아닙니다.
Agent = while‑loop – 각 반복에서 “지금 답변할지?” 혹은 “툴을 호출할지?”를 결정합니다.
페이로드는 messages 배열이 누적되므로 툴 호출마다 증가합니다.
프롬프트 캐싱으로 첫 요청 이후 성장 비용이 약 10배 저렴해집니다.
로컬 JSONL 로그claude-replaycclogviewer로 읽을 수 있습니다.
AI 코딩 툴을 구축한다면, 이 아키텍처를 복사하는 것이 좋은 시작점입니다.
# Claude Code Optimization

You're just using **Claude Code**—optimizing your `CLAUDE.md` is the highest‑leverage thing you can do, since it ships on every request.

I'm a **Senior Platform Engineer** publishing unfiltered breakdowns of how AI coding tools actually work in production. Follow along on **YouTube** if that's your kind of thing.

🛠️ **Tools mentioned**

- **Request Parser** — built for this video, free to use  
- **mitmproxy** — the MITM proxy  
- **claude-replay** — JSONL session replay  
- **cclogviewer** — token‑level cost breakdown

🛠️ 언급된 도구들

  • Request Parser — 이 비디오용으로 제작되었으며, 무료로 사용할 수 있습니다.
  • mitmproxy — MITM 프록시
  • claude-replay — JSONL 세션 재생
  • cclogviewer — 토큰 수준 비용 분석
0 조회
Back to Blog

관련 글

더 보기 »

내가 마침내 봇에게 '지루한' 일을 맡긴 방법

Google Cloud NEXT ’26에 대한 나의 견해: 우리 모두를 위한 “Agentic” 시대 NEXT ’26에 참석한 모든 사람들은 “Agents”에 대해 이야기하고 있습니다. 이것이 공상과학 용어처럼 들린다면, …