-
상주 컨텍스트를 한 번만 압축하면 — 매 세션 영구히 아끼는 입력 토큰IT 2026. 8. 1. 21:00
AI 코딩 에이전트에 토큰 절약 도구를 처음 붙였을 때 반가웠던 건 "말이 짧아진다"였다. 장황한 설명 대신 핵심만 뱉으니 응답당 출력 토큰이 눈에 띄게 줄었다. 한 도구의 벤치마크로는 10개 작업 평균 출력 65% 감소(범위 22~87%)였다. 여기서 토큰(token)은 AI가 글을 읽고 쓸 때 세는 최소 단위이고, 대부분의 API가 이 토큰 수로 비용을 매긴다.
그런데 한참 뒤에 멈칫한 지점이 있었다. 출력 토큰을 아무리 아껴도, 그건 이번 응답 한 번에만 해당하는 절약이었다. 다음 응답에서는 처음부터 다시 벌어야 했다. 반면 매 대화마다 꼬박꼬박 똑같이 지불하는데 아무도 손대지 않는 큰 덩어리가 따로 있었다 — 바로 상주 컨텍스트, 매 세션이 시작될 때마다 자동으로 다시 실려 들어가는 입력이었다.
출력 절감은 일회성, 입력 파일 압축은 복리다
토큰에는 두 종류가 있다. 입력 토큰(input token, AI에게 들여보내는 프롬프트·문서·지시)과 출력 토큰(output token, AI가 생성해 내놓는 답변)이다. 말을 짧게 시키는 압축은 출력 토큰만 줄인다. 그리고 출력은 매번 새로 생성되므로, 그 절약은 응답마다 다시 벌어야 하는 일회성이다.
▲ 출력 압축 — 매 응답마다 새로 버는 절약
다이어그램 설명. 출력 토큰 절감이 왜 일회성인지를 보여준다. "응답 1 생성"이 "출력 토큰 절약"으로 이어지지만, "응답 2 생성"과 "응답 3 생성"은 각자 "또 새로 절약"을 따로 만들어야 한다. 세 갈래가 서로 이어지지 않고 각자 따로 서 있는 게 핵심이다 — 지난 응답에서 아낀 토큰이 다음 응답으로 넘어와 쌓이지 않는다. 응답을 멈추면 절약도 멈춘다.
입력 쪽은 성질이 다르다. `CLAUDE.md`(에이전트가 세션마다 자동으로 읽어 들이는 프로젝트 메모리 파일 — 코딩 규칙·프로젝트 맥락을 적어 둔다) 같은 상주 파일을 한 번 압축해 두면, 그 파일은 이후 모든 세션에서 더 작은 크기로 로드된다. 한 번의 작업이 세션 1, 세션 2, 세션 3에 계속 효력을 미친다.
▲ 입력 파일 압축 — 한 번으로 모든 세션에 효력
다이어그램 설명. 앞의 출력 압축과 정반대 구조다. "CLAUDE.md 한 번 압축"이라는 단 하나의 작업에서 "세션 1 입력 -46%", "세션 2 입력 -46%", "세션 3 입력 -46%"가 모두 뻗어 나온다. 한 뿌리에서 여러 세션의 절약이 갈라져 나온다는 점이 요점이다 — 압축은 한 번 하지만 그 이득은 세션을 거듭할수록 계속 재발생한다. 그래서 이 절감은 일회성이 아니라 복리에 가깝다. 여기서 46%는 어떤 실측 파일 묶음(뒤에서 다룬다)의 입력 감축 평균이다.
상주 컨텍스트는 매 턴 다시 내는 '세금'이다
왜 상주 파일 하나를 줄이는 게 그렇게 크게 돌아올까. 상주 컨텍스트(resident context)는 대화를 시작할 때마다 프롬프트 맨 앞에 자동으로 다시 붙는 고정 블록이다. 프로젝트 메모리, 사용자 선호 설정, 도구 설명 같은 것들이 여기 들어간다. 한 번 쓰면 사라지는 게 아니라, 세션이 열릴 때마다 통째로 다시 실린다.
다이어그램 설명. 상주 파일 하나가 비용으로 바뀌는 경로를 보여준다. "CLAUDE.md 상주 메모리"가 "세션 시작마다 컨텍스트에 자동 주입"되고, 그것이 "매번 입력 토큰으로 다시 지불"로 이어진다. 이 흐름의 핵심은 그 파일을 내가 다시 읽든 안 읽든, 세션이 열릴 때마다 그 크기만큼 입력 비용을 자동으로 낸다는 것이다 — 매 턴 걷히는 고정 세금과 같다. 마지막 "한 번 압축하면 주입량이 영구히 작아짐"이 이 세금의 세율 자체를 낮추는 지점이다. 세금이라 한 번 깎으면 이후 모든 청구서가 함께 줄어든다.
바로 이 지점을 겨냥한 도구가 caveman-compress다. `CLAUDE.md`, 할 일 목록, 선호 설정 같은 자연어 메모리 파일을 훑어 군더더기를 걷어낸다. 관사·상투어("물론입니다", "~하는 게 좋습니다")·에두르는 표현을 빼고, "You should always make sure to run the test suite before pushing"을 "Run tests before push"처럼 골자만 남긴 조각으로 줄인다. 이렇게 압축한 파일이 원본 자리를 대신하니, 다음 세션부터 그 파일의 주입량이 영구히 작아진다.
실측 수치가 있다. 실제 메모리 파일 다섯 개를 압축한 표에서, `claude-md-preferences.md`는 706 → 285토큰(59.6% 감축), 프로젝트 노트는 1145 → 535토큰(53.3%), 전체 평균 46%였다. 문서 저자의 표현을 그대로 옮기면 "Every session after, that file loads ~46% smaller. Input tokens saved forever, not just one reply"(그 파일은 이후 모든 세션에서 약 46% 작게 로드된다. 입력 토큰이 한 번이 아니라 영구히 절약된다)이다.
한 번만, 그리고 안전하게 — 원본 백업과 byte 보존
메모리 파일을 기계가 축약한다니 겁이 날 수 있다. 규칙 하나가 오탈자로 바뀌거나 명령어 한 글자가 깨지면, 그 손상이 이후 모든 세션에 상주하며 계속 잘못을 퍼뜨린다. 그래서 이 압축에는 두 겹의 안전장치가 있다.
다이어그램 설명. 압축이 무엇은 건드리고 무엇은 절대 건드리지 않는지를 보여준다. "원본 메모리 파일"은 두 갈래로 나뉜다. 한쪽은 "FILE.original.md 로 백업" — 손대기 전에 사람이 읽을 수 있는 원본을 그대로 떠 둬서, 압축 결과가 마음에 안 들면 언제든 되돌릴 수 있다. 다른 한쪽 "압축본이 원본 자리를 대체"는 다시 둘로 갈라지는데, "코드·URL·경로는 byte 그대로 보존"과 "산문만 축약"이다. 요점은 축약 대상이 오직 산문뿐이라는 것이다 — 코드 블록, 백틱으로 감싼 명령어, 링크, 파일 경로, 버전 번호는 한 글자도 바꾸지 않고 복사한다. 압축이 손해로 뒤집힐 수 있는 곳(명령어 손상)은 아예 손대지 않고, 안전하게 줄일 수 있는 곳(장황한 설명)만 줄이는 설계다.
이 "한 번만"이라는 성질도 중요하다. 출력 압축은 매 응답마다 모델이 짧게 말하도록 계속 지시해야 하지만, 파일 압축은 말 그대로 한 번의 작업이다. 압축하고 나면 그 뒤로는 아무것도 하지 않아도 세션마다 자동으로 이득이 반복된다. 손이 가는 일은 앞에 한 번뿐이고, 절약은 뒤에서 계속 굴러온다.
정리 — 매 턴 내는 비용부터 깎는다
토큰을 아끼는 두 방식은 성질이 다르다. 출력을 짧게 만드는 절감은 응답마다 새로 벌어야 하는 일회성이고, 상주하는 입력 파일을 한 번 압축하는 절감은 이후 모든 세션에 복리처럼 쌓인다. `CLAUDE.md` 같은 상주 컨텍스트는 내가 쓰든 안 쓰든 매 세션 자동으로 실려 입력 비용을 걷어가는 고정 세금이라, 그 세율을 한 번 낮추면 이후 청구서가 전부 줄어든다.
개인 작업에 AI를 깊게 쓸수록 이 구분이 실용적으로 다가온다. 어떤 절약이 "이번 한 번"이고 어떤 절약이 "앞으로 계속"인지 먼저 갈라 보는 것 — 그리고 매 턴 꼬박꼬박 지불하고 있는데 그동안 손대지 않았던 상주 컨텍스트부터 한 번 깎아 두는 것이 가장 손이 덜 가면서 오래 남는 절약이다.
참고한 공개 자료:
- caveman — why use many token when few do trick (README, 벤치마크·caveman-compress receipts): https://github.com/JuliusBrussee/caveman
- caveman-compress SKILL (압축 규칙·원본 백업·byte 보존): https://github.com/JuliusBrussee/caveman/blob/main/skills/caveman-compress/SKILL.md
- caveman docs — Honest numbers (입력·출력 토큰 절감의 차이): https://github.com/JuliusBrussee/caveman/blob/main/docs/HONEST-NUMBERS.md
- Anthropic — Claude Code / CLAUDE.md 프로젝트 메모리: https://docs.anthropic.com/en/docs/claude-code
이 글은 생성형 AI의 도움을 받아 작성되었습니다. 원본 자료를 기반으로 AI가 초안을 생성하고, 작성자가 검토·편집하였습니다.
'IT' 카테고리의 다른 글
표준이 둘로 갈렸다가 하나로 — ACP가 A2A에 합류한 이야기 (0) 2026.08.02 에이전트 호출의 생명주기 — 왜 그냥 API 호출로는 안 되나 (0) 2026.08.02 에이전트는 서로를 어떻게 찾는가 — 발견, 그리고 에이전트의 '명함' (0) 2026.08.02 AI 에이전트의 두 개의 축 — 도구를 붙이는 일과 동료를 부르는 일은 다르다 (0) 2026.08.02 서브에이전트 출력 압축 — 토큰 절약의 잊힌 세 번째 축, 메인 컨텍스트 예산 (0) 2026.08.01 산문은 손실 압축, 코드는 무손실 — 무엇을 지킬 수 있는지는 '중요도'가 아니라 '식별 가능성'이 정한다 (0) 2026.07.31 축약어는 토큰을 아끼지 못한다 — caveman의 규칙 (0) 2026.07.31 AI 코딩 에이전트의 토큰 절약 — 뇌가 아니라 입을 줄인다 (0) 2026.07.31 자율 에이전트인가, 통제된 하네스인가 — LLM을 부리는 두 가지 모델 (0) 2026.07.30 AI 시스템 테스트, 무엇을 가짜로 두고 무엇을 진짜로 돌릴까 — mock 경계 원칙 (0) 2026.07.29