#운영 #프로덕트 #커리어
Claude Code의 편의 기능은 공짜가 아니에요


 

TLDR
- 편의를 위해 에이전트에 기능과 도구를 더하면, 그 설명이 메시지마다 함께 실려요. 이 기본 토큰 사용량은 생각보다 훨씬 많아요. Claude Code는 설치 직후에도 37.1k 토큰이 실렸고, 그중 27.2k 토큰이 도구 정의였어요.
- 기본 토큰은 요청마다 다시 실려요. 캐시로 비용은 줄어도 컨텍스트는 그대로 길어지고, 컨텍스트가 길수록 성능은 떨어져요(GPT-5.4: 86.0% → 36.6%).
- 쓰지 않는 기본 기능을 끄는 것만으로 37.1k에서 10.9k로, 약 71% 줄였어요. 글에 공유한 `settings.json` 설정을 본인에게 맞게 조정해서 쓰세요. `CLAUDE.md`나 `AGENTS.md` 같은 지침 파일에서 불필요한 문장을 지우면 기본 토큰은 더 줄어요.

새로운 Claude Code 세션을 열고 `/context`를 입력해 보세요. 저는 아무 메시지도 입력하지 않았는데 이미 46.8k라는 적지 않은 토큰이 잡혀 있었어요. 이 토큰(46.8k)은 메시지를 보낼 때마다 요청에 함께 실려 가요. 그래서 비용이 늘고, 컨텍스트가 길어진 만큼 성능은 떨어져요.

기능을 하나 켜 둘 때 우리는 편해지는 것만 봐요. 그 기능의 설명이 메시지마다 함께 실린다는 건 잘 보이지 않아요.

Claude Code는 설치만 해도 37.1k 토큰을 소비해요

그렇다면 글 첫머리에서 본 46.8k 토큰은 어디서 왔을까요? 제가 작성한 system prompt(`CLAUDE.md`, `AGENTS.md` 같은 markdown 파일)나 skill, MCP 때문일까요? Claude Code를 설치한 직후에 `/context`를 입력해 보면 답이 나와요. 설치 직후인데도 이미 37.1k 토큰이 기본 사용량으로 잡혀 있어요.

에이전트의 실수가 늘어나기 시작하는 지점을 대략 125K~150K 토큰으로 보는 경험적 기준이 있어요. 이 기준으로 보면 37.1k 토큰은 그 지점까지의 약 25~30%예요. 메시지를 하나도 보내기 전에 그만큼을 쓰고 시작하는 셈이에요.

Claude Code나 Codex 같은 에이전트에는 LLM을 호출하고 도구 실행을 처리하는 뼈대가 있어요. 이를 harness(하네스)라고 불러요. 이 harness에는 개발사가 미리 넣어 둔 system prompt와 도구 정의가 들어 있어요. 기본 harness는 결코 가볍지 않아요. 다양한 사용자의 요구에 맞추려고 넓은 범위의 기능을 담고 있기 때문이에요. 기능 하나하나는 누군가에게 편의를 주지만, 그 기능의 설명은 쓰든 안 쓰든 매 요청에 실려요. 위 화면에서도 도구 정의(System tools)만 27.2k 토큰을 차지해요.

어떤 기능이 기본으로 들어 있는지 보면, 개발사가 모든 사용자를 염두에 두고 넣었다는 게 드러나요. 아래는 설치 직후의 MCP 도구 목록이에요. 코딩 에이전트인데 Claude Docs 문서 도구 3개가 744 토큰을 차지하고, Gmail, Google Calendar, Google Drive 연결 도구도 대기하고 있어요. 저는 Claude Code에서 이 도구들을 연결한 적이 없어요.

System tools 27.2k 토큰에도 이런 도구가 섞여 있어요. 예를 들어 `NotebookEdit`은 Jupyter 노트북을 편집하는 도구라서, 노트북을 쓰지 않는 사람에게는 필요가 없어요. 누군가에게는 유용한 기능이지만, 나에게도 필요한지는 직접 판단해야 해요.

그래서 쓰지 않는 기능은 꺼 두길 권해요. 이것만으로도 기본 토큰 사용량을 크게 줄일 수 있어요. 저는 이렇게 해서 37.1k를 10.9k로 줄였어요. 어떤 기능을 껐는지는 글 뒷부분에서 보여 드릴게요.

기본 토큰 사용량은 변해요

설정을 하나도 바꾸지 않아도, 에이전트의 버전이 바뀌면 기본 토큰 사용량은 달라질 수 있어요. Anthropic, OpenAI 같은 개발사가 버전을 올릴 때마다 system prompt와 도구 정의를 수시로 바꾸기 때문이에요. 

Claude Code를 만든 Boris Cherny도 새 모델이 나올 때마다 system prompt와 도구 정의를 바꾼다고 말해요. (출처: Boris Cherny: Building Claude Code - Root Access) Claude Code의 내장 프롬프트를 버전별로 추적하는 저장소를 보면, v2.1.288 한 버전에서만 프롬프트 텍스트가 4,051 토큰 늘었어요. (출처: Claude Code System Prompts Changelog - Piebald-AI)

기본 토큰은 메시지를 보낼 때마다 다시 소비돼요

LLM은 이전 대화를 기억하지 못해요. 이런 방식을 stateless(무상태)라고 불러요. 그래서 에이전트는 대화를 이어 가려고 지금까지 주고받은 사용자 메시지와 LLM 응답을 모두 모아 요청마다 다시 보내요. 글 첫머리에서 본 46.8k 토큰도 system prompt와 도구 정의처럼 기본으로 실리는 내용이라, 매 요청의 맨 앞에 함께 들어가요.

예를 들어 '안녕'과 '오늘 날씨가 어때?'를 차례로 보내면, LLM에 전달되는 내용은 이렇게 늘어나요.

1. 첫 번째 요청: 46.8k 토큰 + '안녕'
2. 두 번째 요청: 46.8k 토큰 + '안녕' + LLM의 첫 번째 응답 + '오늘 날씨가 어때?'

이렇게 대화가 이어질수록 요청은 계속 커져요. 다만 매 요청의 앞부분은 똑같이 반복되기 때문에 prompt caching(프롬프트 캐싱)이 적용돼요. 서버는 이전 요청과 똑같은 앞부분(prefix)을 새로 처리하지 않고 캐시에서 읽어 와요. 그래서 반복되는 부분의 비용은 크게 줄고 응답 속도는 빨라져요. Anthropic API 기준으로 캐시에서 읽은 토큰은 일반 입력 가격의 10%이고, 글 첫머리의 화면 속 Opus 5.5 모델은 5%예요. (출처: Prompt caching - Claude Platform Docs)

하지만 캐시가 줄여 주는 건 비용과 속도뿐이에요. 캐시에서 읽은 토큰도 LLM이 실제로 보는 내용이라, 컨텍스트 창 사용량에는 그대로 포함돼요. (출처: Context windows - Claude Platform Docs)

기본 토큰이 많을수록 성능은 떨어져요

아래 그래프는 컨텍스트 길이에 따라 GPT-5.2와 GPT-5.4의 성능이 어떻게 변하는지 보여 줘요. 여기서 성능은 긴 텍스트 속에 형식이 똑같은 요청과 응답 8쌍을 숨겨 두고, 그중 지정한 하나를 정확히 찾아내는 시험(MRCR v2 8-needle)의 점수예요. GPT-5.4는 64K~128K 구간에서 86.0%였다가, 512K~1M 구간에서는 36.6%까지 떨어져요. (출처: yage.ai, Long Context Benchmarks: All Three Hit 1M (2026-03-15))


Claude 모델도 마찬가지예요. 같은 시험에서 Claude Opus 4.6은 256K에서 93.0%였던 점수가 1M에서는 76.0%로 떨어져요. (출처: yage.ai, Long Context Benchmarks: All Three Hit 1M (2026-03-15))

왜 컨텍스트가 길어질수록 성능이 떨어질까요? LLM은 입력된 컨텍스트를 바탕으로 적절한 다음 토큰을 골라 출력하는 모델이에요. 이때 모델은 컨텍스트 안의 각 토큰이 다른 모든 토큰과 얼마나 관련 있는지 따져서, 어느 토큰에 얼마나 주목할지 정해요. 이 과정을 attention(어텐션)이라고 불러요. 따져야 할 관계의 수는 토큰 수의 제곱으로 늘어나요. 토큰이 1천 개면 100만 개, 10만 개면 약 100억 개의 관계가 생겨요. (출처: Effective context engineering for AI agents - Anthropic)

컨텍스트가 길어질수록 모델이 주목해야 할 토큰이 많아져서, 토큰 하나하나에 주목할 수 있는 정도는 줄어요. 그러면 정작 중요한 토큰에도 충분히 주목하기 어려워져요. 이렇게 컨텍스트가 길어질수록 그 안의 정보를 정확히 떠올리는 능력이 떨어지는 현상을 context rot(컨텍스트 부패)라고 불러요. 중요한 토큰을 놓치면 적절한 다음 토큰을 고르기 어려워지고, 그만큼 에이전트의 성능도 대화가 길어질수록 떨어져요.

그렇다면 토큰을 얼마나 쓰면 많은 걸까요? GitHub star가 27만 개가 넘는(2026년 10월 기준) skill 저장소 `mattpocock/skills`를 운영하는 Matt Pocock은 세션의 토큰 사용량을 Smart Zone과 Dumb Zone으로 나눠 설명해요. 세션 초반의 에이전트는 집중력이 좋고 앞의 내용을 잘 기억해요(Smart Zone). 세션이 길어질수록 앞의 지시를 잊고 실수가 늘어나요(Dumb Zone). (출처: Smart zone - AI Coding Dictionary)

Matt Pocock은 최신 모델에서 Dumb Zone이 대체로 125K~150K 토큰 무렵부터 시작된다고 봐요. 엄밀한 기준이 아니라 경험적 기준이고, 그 스스로도 이견이 있다고 밝혀요. 그래서 이 지점에 가까워지면 지금 세션의 작업을 마무리하거나 새 세션으로 넘기라고(handoff) 권해요. 애초에 작업을 한 세션 안에 끝낼 수 있는 크기로 나눠서 시작하라고도 해요.

앞에서 설치 직후의 37.1k 토큰이 약 25~30%라고 한 것도 이 기준으로 계산한 값이에요.

결국 기본 토큰 사용량이 많으면, 메시지를 많이 보내지 않아도 상대적으로 많은 비용을 내고 성능이 낮은 에이전트를 쓰게 돼요.

직접 추가한 기능만큼 기본 토큰은 더 늘어나요

같은 Claude Code라도 기본 토큰 사용량은 사람마다 크게 달라요. 사용자가 추가한 system prompt, MCP, skill, 그리고 에이전트 자체의 설정에 따라 매 요청에 실리는 양이 바뀌기 때문이에요. 글 첫머리의 제 화면에서는 `CLAUDE.md`, `AGENTS.md` 같은 지침 파일이 잡히는 Memory files만 16.6k였어요. 설치 직후에는 1.5k였던 항목이에요. 설정을 자세히 들여다보지 않으면, 모르는 사이에 많은 토큰을 기본으로 소모하면서 비용을 낭비하고 낮은 성능의 에이전트를 쓰고 있을 수 있어요.

토큰 절약 도구는 해결책이 될까요?

토큰 사용량을 줄여 주는 도구도 여럿 나와 있어요. `caveman`, `ponytail`, `context-mode`, `rtk`, `serena`, `headroom` 같은 도구들이에요. 입출력을 압축하거나, 코드베이스를 효율적으로 검색하거나, 에이전트가 코드를 덜 쓰게 만드는 방식으로 LLM에 보내는 내용을 덜어 내요.

저는 이 도구들을 모두 써 봤지만, 체감할 만큼 토큰이 줄거나 성능이 좋아지지는 않았어요. 도구가 원본 입출력을 걸러 내는 만큼, 잘못 동작하면 LLM이 사용자의 의도와 다르게 움직일 수도 있어요. 제가 생각하기에 그보다 먼저 볼 곳은 이미 켜 둔 기능이에요.

기본 기능도 꺼 보길 권해요

그래서 직접 더한 기능뿐 아니라 에이전트가 기본으로 켜 둔 기능까지 적극적으로 꺼 보길 권해요. 이유는 두 가지예요. 켜 둔 기능과 설정이 많을수록 성능이 떨어지고, 결과물도 일관되지 않게 돼요.

성능 저하

앞에서 본 것처럼 LLM은 컨텍스트가 길어질수록 성능이 떨어져요. 설정이 복잡하다는 건 매 요청에 실리는 텍스트가 많다는 뜻이고, 곧 컨텍스트가 길어진다는 뜻이에요. 설정을 복잡하게 쌓아 본 분이라면, 분명히 지시해 둔 내용을 에이전트가 따르지 않는 경험을 한두 번은 해 보셨을 거예요.

저도 여러 번 겪었고, 불필요하게 긴 설정이 이 문제와 깊은 관련이 있다고 생각해요. 제가 토큰 절약 도구를 모두 걷어낸 것도 같은 이유예요. 쓸수록 설정은 복잡해지고, 제가 제어하지 못하는 영역은 늘어나고, 성능은 좋아지기는커녕 떨어진다고 느꼈거든요.

Claude Code를 만든 Boris Cherny도 비슷한 이야기를 해요. 그는 새 모델이 나올 때마다 system prompt를 지우고 한 줄씩 다시 넣어 보며 각 줄의 효과를 확인하는데, 프롬프트가 없을 때 모델이 오히려 조금 더 똑똑했다고 말해요. 그리고 Claude Code 사용자에게도 6개월마다 `CLAUDE.md`, skill, hook을 지워 보고 모델이 어떻게 하는지 보라고 권해요. (출처: Boris Cherny: Building Claude Code - Root Access)

결과물의 비일관성

어제와 똑같은 지시로 정기 작업을 맡겼는데, 결과가 너무 다르게 나온 적 있으신가요? 이 중 일부는 LLM의 기본 성질 때문이에요. LLM은 비결정적이라서, 같은 질문을 해도 매번 같은 답을 내지 않아요.

> [!NOTE] LLM은 왜 비결정적일까요
> 모델은 다음에 올 수 있는 토큰 후보마다 확률을 매기고, 샘플러(sampler)가 그중 하나를 골라요. 이때 샘플러는 일부러 무작위성을 섞어요. 확률이 가장 높은 답만 고르게 하면 오히려 응답 품질이 나빠질 수 있기 때문이에요. 이야기나 대화처럼 답이 열린 과제에서 확인된 현상이고, 이를 우도 함정(likelihood trap)이라고 불러요. (출처: Trading Off Diversity and Quality in Natural Language Generation)

이런 성질을 감안해도 같은 지시에 완전히 다른 결과가 나온다면, 에이전트의 기본 설정과 관련이 있을 수 있어요. 앞에서 본 것처럼 개발사는 버전을 올릴 때마다 system prompt와 도구 정의를 수시로 바꿔요. 몇 달 동안 잘 돌던 작업이 어느 날 갑자기 기대와 다른 결과를 낼 수 있다는 뜻이에요.

AI 비서 OpenClaw의 에이전트 엔진으로 쓰였던 코딩 에이전트 Pi를 만든 Mario Zechner도 같은 문제를 겪었어요. (출처: OpenClaw 2026.2.21 Changelog - openclaw/openclaw) 그는 Claude Code를 그만 쓰고 자기 에이전트를 직접 만든 이유로, system prompt와 도구 정의가 릴리스마다 바뀌고, 엉뚱한 위치에 끼워 넣는 system reminder가 모델을 헷갈리게 해서 자기 작업 흐름이 깨졌다는 점을 들어요. (출처: Building pi in a World of Slop - Mario Zechner)

쓰지 않는 기능은 이렇게 꺼요

에이전트가 기본으로 켜 둔 기능 중 일부를 끄는 것만으로도 기본 토큰 사용량을 크게 줄일 수 있어요. 설치 직후 37.1k였던 Claude Code에서 쓰지 않는 기능을 끄고 나니, 기본 토큰 사용량이 10.9k로 약 71% 줄었어요.

| 카테고리 | 설치 직후 | 최적화 후 |
|---|---|---|
| System prompt | 2.4k | 2.4k |
| System tools | 27.2k | 1.6k |
| MCP tools | 744 | 없음 |
| MCP server instructions | 717 | 없음 |
| Memory files | 1.5k | 1.5k |
| Skills | 4.6k | 5.5k |
| Messages | 10 | 10 |
| **합계** | **37.1k** | **10.9k** |

`/context`는 항목별 값과 합계를 각각 반올림해서 보여 줘요. 그래서 항목을 더한 값과 합계가 조금 다를 수 있어요.

최적화 후에 Skills가 오히려 0.9k 늘었는데, 스크린샷을 찍기 전에 제가 skill을 하나 추가했던 것 같아요. 그렇다면 설정만 바꿨을 때의 기본 토큰 사용량은 10.9k보다 더 적을 거예요.

`settings.json`으로 쓰지 않는 기능 끄기

아래는 Matt Pocock이 자신의 강의 [AI Coding Crash Course - AI Hero](https://www.aihero.dev/workshops/ai-coding-crash-course)의 'Killing Bloat' 편에서 공유한 Claude Code 설정을 바탕으로 한 설정이에요. `~/.claude/settings.json`에 넣으면 돼요. `deny`에 넣은 도구와 `disable`로 시작하는 기능들은 없어도 큰 문제가 없어요. 켜 두면 조금 편해지지만, 그보다 잃는 성능이 더 크다고 본 것들이에요.

```json
{
   "permissions": {
       "deny": [
           "NotebookEdit",
           "DesignSync",
           "CronCreate",
           "CronDelete",
           "CronList",
           "EnterPlanMode",
           "ExitPlanMode",
           "PushNotification",
           "RemoteTrigger",
           "ReportFindings",
           "ScheduleWakeup",
           "AskUserQuestion"
       ]
   },
   "disableClaudeAiConnectors": true,
   "disableWorkflows": true,
   "disableBundledSkills": true,
   "enableArtifact": false
}
```

`disableClaudeAiConnectors`는 앞에서 본 Claude Docs, Gmail 같은 claude.ai 커넥터 도구를 끄는 설정이에요. 표에서 MCP tools가 744 토큰에서 없음으로 바뀐 것도 이 설정 때문이에요.

위 설정부터 시작해서 본인에게 맞게 조정해 보세요. 자주 쓰는 도구가 있다면 `deny` 목록에서 빼고, 쓰지 않는 도구가 더 있다면 추가하면 돼요. Claude Code가 아닌 다른 에이전트에도 이와 비슷한 기본 설정이 있으니, 쓰고 있는 에이전트의 설정도 한번 확인해 보세요.

`CLAUDE.md`와 `AGENTS.md` 정리하기

매 요청에 실리는 기본 토큰에는 개발사가 harness에 넣어 둔 system prompt와 도구 정의 말고도, 사용자가 직접 쓰는 system prompt가 있어요. 대표적으로 `CLAUDE.md`와 `AGENTS.md` 파일이에요. 이 파일들은 `/context` 화면의 Memory files 줄에 잡혀요. 앞에서 본 것처럼 제 화면에서는 이 항목만 16.6k였어요. (출처: Memory - Claude Code Docs)

이 파일들은 의식적으로 관리하지 않으면 세 가지가 쌓여요.

- no-op: 지침이 없어도 알아서 하는 일을 굳이 시키는 문장이에요. 지워도 에이전트의 동작이 바뀌지 않아요.
- 중복: 같은 내용이 파일 여기저기에 흩어져 있어요.
- sediment(퇴적물): 최신 코드와 맞지 않는 옛 정보가 층층이 쌓여 있어요.

이런 문장은 지우세요. 그리고 특정 상황에서만 필요한 내용은 별도 파일로 옮기고, `CLAUDE.md`에는 언제 그 파일을 읽을지만 한 줄로 남기세요. 이 방식을 progressive disclosure(점진적 공개)라고 해요. Claude Code 공식 문서도 오래되거나 서로 충돌하는 지시를 주기적으로 지우라고 권해요. (출처: Memory - Claude Code Docs) 지침 파일을 다듬는 구체적인 방법은 다음 글에서 다룰게요.

설정을 바꾸고 파일을 정리했다면, 새 세션을 열고 `/context`를 다시 입력해 보세요. 정리하기 전에 본 숫자와 비교하면 매 요청에 실려 가던 기본 토큰이 얼마나 줄었는지 바로 확인할 수 있어요.

여러분의 기본 토큰 사용량은 정리하기 전과 후에 각각 몇 토큰이었나요? 어떤 기능을 끄고 어떤 기능은 남겨 두셨는지 댓글로 알려 주세요. 토큰 절약 도구로 효과를 보신 분이 있다면, 어떤 도구를 어떻게 쓰셨는지도 궁금해요.
 

링크 복사
맼디 만들어드림 · 개발자

댓글 0
댓글이 없습니다.
추천 아티클
맼디 만들어드림 · 개발자