Claude Code 사용료를 줄이려고 외부 GitHub 저장소나 부가 도구, 복잡한 요령부터 찾는 사용자가 많습니다. 하지만 Claude Code는 처음부터 사용량을 아끼도록 설계됐고, 새 버전이 나올 때마다 비용을 줄이는 장치가 더해지고 있습니다. 사용료가 생각보다 많이 나온다면 도구가 모자라서라기보다 사용 습관이 이미 있는 절약 장치를 무력화하고 있을 가능성이 큽니다. 그런 습관 대부분은 한 가지로 모입니다. Claude가 대화 전체를 정가로 다시 읽게 만드는 일입니다.
비용은 다시 읽기에서 생긴다
token은 Claude가 요금을 매기는 기본 단위로, 크기는 대략 짧은 낱말 하나입니다. 월 구독 요금제에서는 정해진 사용 한도가 줄어들고, API 키로 쓰면 token마다 돈이 나갑니다.
Claude는 실력은 뛰어나지만 기억을 완전히 잃은 시공업자와 비슷합니다. 메시지 사이에 모든 것을 잊기 때문에 새 메시지를 보낼 때마다 첫 prompt(AI에 주는 지시문)부터 지금까지의 대화 전체가 함께 전달됩니다. 이렇게 매번 읽어 들이는 글 전체가 context이고, 요금은 이 context의 token을 읽는 데 붙습니다. 대화가 길어질수록 메시지 하나의 값이 커지고, 초반에 불러온 파일도 매번 다시 읽히는 이유입니다. 반대로 새 대화를 열면 context는 0에서 시작하고 비용도 들지 않습니다.
이 부담을 덜어 주는 장치가 prompt caching(바뀌지 않은 앞부분 대화를 잠시 저장해 두고 다시 쓰는 기능)입니다. 캐시에 남은 대화는 입력 정가의 약 10분의 1이나 그보다 싸게 읽히고, 새로 더한 부분만 정가를 냅니다. 다만 대화 도중 Claude의 모델을 Sonnet과 Opus 사이에서 바꾸는 것처럼 무언가가 달라지면 캐시가 무효가 되고, Claude Code는 대화 전체를 정가로 다시 읽습니다. 캐시의 수명도 짧습니다.
| 이용 방식 | 활동이 없을 때 캐시 유지 시간 |
|---|---|
| 월 구독 요금제 | 약 1시간 |
| API 키 종량제, 추가 크레딧 사용 | 5분 |
Anthropic 엔지니어링 팀이 Claude Code 개발에 관해 공개한 글에 따르면, 내부 엔지니어들은 cache hit rate(입력 가운데 캐시에서 읽어 낸 비율)를 경보로 지켜보고 이 비율이 너무 떨어지면 SEV 등급의 장애로 선언합니다. 사용자에게도 비용을 줄이는 핵심은 캐시를 살려 두고 정가로 다시 읽는 일을 줄이는 데 있습니다.
Claude Code가 이미 하고 있는 절약
prompt caching 말고도 Claude Code에는 context가 불어나지 않게 막는 장치가 기본으로 들어 있습니다.
- connector는 이름만 먼저: connector(Slack, GitHub 같은 외부 앱에 Claude를 연결하는 기능)는 저마다 긴 사용 설명과 형식 정의를 갖고 있습니다. Claude Code는 처음에 connector 이름만 불러오고, 자세한 설명은 실제로 그 도구를 쓸 때 읽습니다. 쓸 수 있는 connector는 더하기 아이콘을 눌러 connector 메뉴에서 찾아볼 수 있습니다.
- 긴 출력은 잘라서 따로 보관: 터미널이나 도구가 아주 긴 결과를 내면 context에는 줄인 결과만 넣고, 원래 결과 전체는 별도 파일로 저장합니다. Claude는 확인이 필요할 때만 그 파일을 엽니다.
- 복잡한 일은 subagent에게: 크고 손이 많이 가는 작업은 subagent(주 대화와 따로 일하는 보조 agent)가 별도 대화에서 처리하고 주 대화에는 짧은 요약만 돌려줍니다. subagent도 자기 token을 쓰므로 간단한 질문보다는 크고 복잡한 작업에서만 이득입니다.
context가 한도에 가까워지면 알아서 대화를 압축하는 auto-compact도 기본 기능입니다. 문제는 이런 장치를 거스르는 사용 습관입니다.
대화를 정가로 다시 읽게 하는 네 가지 습관
compact를 비용 절감용으로 쓰기
/compact 명령으로 대화를 줄이면 요금도 줄어든다고 생각하기 쉽습니다. 랜딩 페이지를 90분 동안 메시지 60개를 주고받으며 만들다가 응답이 느려지자 /compact를 실행하는 경우를 떠올려 봅시다. /compact는 대화를 요약해 원래 대화를 대신하게 하는데, 요약을 쓰려면 Claude가 대화 전체를 처음부터 끝까지 한 번 더 읽어야 합니다. 회의록을 맡은 비서가 회의 기록을 다 읽어야 요약을 쓸 수 있는 것과 같습니다.

▲ 요약 전에 대화 전체 다시 읽기
캐시가 살아 있을 때라면 이 읽기는 싸지만, 캐시가 식은 뒤라면 대화 전체 값을 정가로 냅니다. 새로 만든 요약은 캐시도 처음부터 다시 쌓습니다. compact는 본래 context window(모델이 한 번에 담을 수 있는 글의 양)가 거의 찼을 때나 큰 단계를 넘어갈 때 공간을 비우는 도구이지 돈을 아끼는 도구가 아니고, 한도에 가까워지면 auto-compact가 알아서 처리합니다. 꼭 써야 한다면 /compact 뒤에 ’계획과 파일 이름은 남겨 줘’처럼 남길 내용을 덧붙입니다. 압축하면 초반에 준 세세한 지시가 빠질 수 있으니 Claude가 핵심 요구 사항을 기억하는지 확인합니다.
작업 도중 모델 바꾸기
캐시는 모델마다 따로 있습니다. 돈을 아끼려고 대화 중간에 Opus에서 Sonnet으로 바꾸면 Sonnet은 Opus의 캐시를 읽지 못해 대화 전체를 정가로 다시 읽습니다. 아끼려던 선택이 오히려 비용을 늘리는 셈이므로, 작업을 시작하기 전에 모델 하나를 정해 끝까지 쓰는 것이 원칙입니다.
/model opusplan 설정도 이 점을 알고 써야 합니다. 이 설정에서 Claude는 Plan Mode(파일을 고치기 전에 구현 계획부터 세우는 모드)에서는 Opus로 계획을 짜고, 실제로 코드를 만들 때는 Sonnet으로 자동 전환합니다. 계획을 세우는 데는 쓸모가 있지만, 모델이 바뀔 때마다 context 전체를 다시 읽는 값은 피할 수 없습니다.
캐시가 식은 뒤 돌아오기
모든 대화 뒤에는 보이지 않는 타이머가 돕니다. 오전 내내 랜딩 페이지를 만들다 1시간 점심을 먹고 돌아오면 캐시는 이미 만료돼 있고, 작은 질문 하나에도 Claude Code는 대화 전체를 정가로 다시 읽은 뒤에야 새 캐시를 만듭니다.
최근 Claude Code 버전은 큰 대화가 1시간 가까이 멈춰 있으면 캐시가 만료되기 직전에 대화를 압축해 두고, 사용자가 돌아오면 원래 대화 대신 짧은 요약을 읽습니다. 버전마다 나아지고 있지만 이 압축도 먼저 대화 전체를 한 번 읽어야 하고 세세한 내용이 빠질 수 있습니다. 캐시가 5분이면 만료되는 API 종량제라면 쉬는 시간은 작업 도중이 아니라 작업과 작업 사이에 둡니다.
커다란 CLAUDE.md 두기
새 대화를 열고 ‘hi’ 한마디만 쳐도 prompt보다 먼저 context에 실리는 것이 있습니다. 대표적인 것이 CLAUDE.md(Claude Code가 대화를 시작할 때마다 읽는 프로젝트 지침 파일)로, 한 번 읽힌 뒤 이후 모든 차례에 함께 보내집니다. 600줄짜리 CLAUDE.md도 캐시가 살아 있는 동안에는 싸지만 캐시가 만료될 때마다 정가로 다시 읽힙니다. Anthropic의 공식 문서는 CLAUDE.md에 꼭 필요한 내용만 담아 200줄 아래로 유지하라고 권합니다.
규칙이 많다면 나무처럼 나눕니다. CLAUDE.md는 최상위 지침만 담은 줄기로 두고, 디자인, 테스트, 배포 같은 작업별 지침은 가지 파일로 따로 둡니다. CLAUDE.md를 목차처럼 써서 지금 작업에 필요할 때만 그 파일을 불러오게 하면 됩니다.

▲ 나무 구조로 나눈 지침 파일
compact 대신 고를 세 가지 방법
/compact에 기대는 대신 상황에 맞춰 다음 방법을 고릅니다.
| 상황 | 방법 | 효과 |
|---|---|---|
| 작업 하나를 끝냈을 때 | /clear로 새 대화 시작 |
context가 0에서 다시 시작 |
| Claude가 잘못된 방향으로 갔을 때 | 말로 바로잡는 대신 /rewind |
실수하기 전 지점으로 되돌림 |
| 길고 복잡한 작업을 이어 갈 때 | 인수인계 문서를 쓰게 한 뒤 /clear |
새 대화가 그 문서를 읽고 이어서 작업 |
나중에 다시 찾아볼 대화라면 /clear 전에 /rename으로 이름을 붙여 두면 사이드바에서 찾기 쉽습니다. 다음 대화에 넘길 인수인계 문서에는 목표, 끝낸 일, 남은 일, 내린 결정, 시도했지만 안 된 방법을 담습니다. 새 대화를 시작하기 전에 요약을 직접 읽고 고칠 수 있어, 무엇을 남길지 사용자가 정할 수 있다는 점에서 compact보다 나은 선택으로 보입니다.
context에 쌓이는 짐 줄이기
CLAUDE.md 말고도 대화마다 따라붙거나 쌓이는 짐을 줄일 곳이 있습니다.
- skill에 스크립트 맡기기: skill(필요할 때 불러 쓰는 작업 지침 묶음)은 처음에 한 줄 설명만 context에 올라가고 실제로 부를 때 내용을 읽습니다. 정해진 계산을 skill 안의 로컬 스크립트가 맡으면 모델이 데이터를 한 줄씩 읽을 필요가 없습니다. 매주 판매 수치를 집계하는 skill이라면 스크립트가 컴퓨터에서 스프레드시트 행을 합산하고, Claude는 ‘판매 42건, 38건에서 증가’ 같은 결과만 받습니다. 잘 굴러간 반복 작업은 ’이 작업을 skill로 만들어 줘’라고 요청해 바꿀 수 있습니다.
- 안 쓰는 connector 끄기: 이름과 설명만 올라간다 해도, 연결한 MCP(AI가 외부 도구와 데이터에 연결하는 표준 규격) connector와 skill이 많을수록 모든 대화에 실리는 token이 늘어납니다.
/mcp에서 캘린더, 메모, 메일, 할 일처럼 지금 쓰지 않는 connector를 끕니다. - context 들여다보기:
/context는 사용자 메시지, 읽은 파일, Claude의 답, 도구, 남은 공간이 context를 얼마나 차지하는지 보여 줍니다./doctor는 설정을 진단해 업데이트 여부를 확인하고 필요 없는 connector를 알려 줍니다. - 테스트 출력 거르기: 자동 테스트는 ’통과’만 적힌 줄을 수백 개씩 출력하곤 합니다. Claude Code는 아주 긴 출력만 잘라 내므로 이런 줄이 그대로 context에 들어가 이후 매번 다시 읽힙니다. 해법은 Claude가 읽기 전에 테스트 출력을 가로채 줄이는 hook(정해진 시점에 자동으로 실행되는 처리)입니다. 직접 만들 필요 없이 ’테스트 결과를 실패한 항목만 남기도록 줄이는 hook을 만들어 줘’라고 요청하면 됩니다.
비싼 기본값과 막연한 prompt
유료 요금제에서 Claude Code는 기본으로 Opus 모델에 thinking(답을 내기 전에 내부 추론 과정을 먼저 생성하는 기능)을 켠 채 시작합니다. 추론 과정의 token은 출력 token으로 계산되고, 출력 token은 입력 token보다 5배 비쌉니다. 간단한 일에 Opus와 thinking을 그대로 쓰는 것은 최고 실력의 외과의에게 체온 재기를 맡기는 것과 비슷합니다. 일상적인 코딩에는 Sonnet을 쓰고, /effort로 추론 깊이를 low, medium, high, max 가운데에서 고릅니다. 파일 이름 바꾸기 같은 단순한 일에는 low가 알맞습니다. 파일을 고치기 전에 Plan Mode로 구현 단계를 먼저 합의해 두는 것도 방법입니다.
prompt를 어떻게 쓰느냐도 비용을 가릅니다. 막연한 지시를 받으면 Claude는 여러 파일을 뒤져 읽고, 읽은 파일은 모두 context에 남습니다.
| 지시 | Claude가 읽는 파일 |
|---|---|
| 버그 고쳐 줘 | 장바구니, 결제, 헤더, 푸터, 로그인, 검색 파일 6개 |
| 결제 파일의 날짜 버그 고쳐 줘 | 결제 파일 1개 |
prompt 자체의 길이는 전체 context에서 아주 작은 몫입니다. 비용을 정하는 것은 prompt의 글자 수가 아니라 prompt가 Claude의 주의를 어디로 보내느냐이므로, prompt를 짧게 줄이기보다 고칠 파일을 정확히 짚어 주는 편이 효과적입니다.
정리: 세 가지 규칙과 일주일 뒤 점검
불필요한 비용은 대부분 피할 수 있는 다시 읽기에서 나옵니다. 캐시를 살려 두는 세 가지 규칙부터 지키면 됩니다.
- 한 작업에는 모델 하나만 씁니다.
- 캐시가 살아 있는 동안 이어서 작업하고, 쉬는 시간은 작업과 작업 사이에 둡니다.
- 끝난 작업은
/clear로 비우고 새 대화에서 다음 작업을 시작합니다.
여기에 /compact는 context 공간이 거의 바닥났을 때만 쓰고, CLAUDE.md를 200줄 아래로 줄이고, 안 쓰는 connector를 끄고, 간단한 일에는 Sonnet과 낮은 effort를 고릅니다. 효과는 /usage로 확인합니다. 이 명령은 오늘과 지난 7일 동안 skill, subagent, connector가 쓴 사용량을 보여 줍니다. 지금 한 번 기록해 두고 일주일 뒤에 다시 비교하면, 구독 요금제의 한도에 여유가 생기고 API 요금이 줄었는지 직접 확인할 수 있습니다. 가장 싼 메시지는 Claude가 이미 캐시에 담아 둔 대화 위에서 보내는 메시지입니다.