AI 에이전트가 토큰을 소모하는 것을 알고 계신가요?
요약
Claude Code 사용 시 발생하는 막대한 토큰 비용을 관리하기 위해, 세션 종료 시 실행되는 Stop hook을 활용한 데이터 추적 프레임워크를 소개합니다. 단순한 비용 확인을 넘어, 세션 횟수에 따른 데이터 신뢰도 계층(L0~L30)을 설정하여 의사결정에 활용하는 방법을 다룹니다.
핵심 포인트
- Claude Code의 토큰 비용을 관리하기 위한 대리 지표로 '수정 횟수(edit count)' 활용
- 세션 횟수에 따라 데이터의 신뢰도를 구분하는 계층적 프레임워크 제안
- Stop hook과 Python을 이용한 저비용·고효율의 운영 지표 수집 방식
- 결정 위험(decision risk)에 맞춰 데이터 양을 조절하는 원칙 강조
저는 몰랐습니다. 몇 주 동안 Claude Code 세션을 실행하면서 3만~10만 개의 토큰을 비용을 확인하지 않고 사용했습니다. 어떤 것은 모든 토큰을 정당화할 만한 깊은 아키텍처 작업이었지만, 다른 것들은 '이 파일 이름 바꿔줘' 같은 요청으로 단지 15초 분량의 작업을 수행하기 위해 제 전체 1,200줄짜리 페르소나 설정(personality config)을 로드하는 것이었습니다.
문제는 AI 에이전트가 돈이 든다는 것 그 자체가 아닙니다. 우리가 비용 데이터에 언제 따라 행동해야 하는지 모르고, 심지어 그런 결정을 내릴 데이터조차 없다는 것입니다.
그래서 저는 대사(metabolic) 계층을 구축했습니다. 대시보드도 아니고, 엔터프라이즈 관측 가능성 플랫폼(enterprise observability platform)도 아닙니다. 그저 모든 세션 끝에서 이미 실행되는 Stop 훅(hook)에 임베딩된 15줄의 Python 코드일 뿐입니다.
가장 어려웠던 부분은 코드가 아니었습니다. 데이터가 실제로 저에게 무언가를 말해주고 있다는 것을 파악하는 것이었습니다.
데이터는 언제 결정이 되는가?
세션 5회? 이건 노이즈입니다. 생산 환경 문제(production issue)를 디버깅하느라 3시간을 보낸 하나의 이상치(outlier)가 모든 것을 왜곡시킵니다. 패턴과 일회성 사건의 차이를 구별할 수 없습니다.
세션 15회? 이제 무언가를 갖게 되었습니다. 세션 유형을 비교할 수 있습니다. 실제 이상치를 포착할 수 있습니다. 하지만 여전히 장기적인 추세에 대해서는 추측하는 단계입니다.
세션 30회? 결정 영역(Decision territory)입니다. 월별 비용을 예측하고, 설정 변경 사항을 평가하며, 3주 전에 했던 최적화가 실제로 도움이 되었는지 알 만큼 충분한 이력이 있습니다.
제가 정착한 프레임워크는 다음과 같습니다:
L0 (1-4 세션): 수집만 한다. 분석이나 결론은 없다.
먼저 추적하는 습관을 만든다.
...
이 기준점들은 마법의 숫자가 아닙니다. 원칙은 다음과 같습니다: 결정 위험(decision risk)에 데이터 양을 맞추는 것입니다. 5세션일 때는 불안정한 평균에 의존하지 않는 고정 임계값(fixed threshold)을 사용하여 이상치를 플래그 지정할 수 있습니다. 15세션일 때는 카테고리를 비교하기에 기준선이 충분히 안정적입니다. 30세션일 때는 앞으로 예측할 만큼 충분한 이력을 갖게 됩니다.
제가 실제로 추적하는 것
Claude Code의 Stop hooks는 실제 토큰 수를 직접적으로 노출하지 않습니다. 그래서 저는 대리 지표(proxy)로 '수정 횟수(edit count)'를 사용합니다. 세션 트랜스크립트(transcript) 내의 모든 Edit 또는 Write 호출을 정규 표현식(regex)으로 추출하는 방식입니다. 복잡한 세션은 50120회의 수정을 기록할 수 있고, 단순한 세션은 02회에 그칩니다.
이 방식이 완벽할까요? 아닙니다. 제가 수동으로 교차 검증한 10번의 세션 결과, 수정 횟수는 실제 토큰 소모량의 약 30% 오차 범위 내에서 추적되었습니다. "코드베이스의 절반을 다시 작성했다"와 "변수 이름을 변경했다"를 구분하기에는 충분한 수치입니다. 또한 비용도 들지 않습니다. 저의 학습 기록 습관을 강제하는 것과 동일한 Stop hook이 이제 한 줄짜리 JSON 기록을 추가할 뿐입니다.
데이터는 ~/.claude/session-data/cost-log.jsonl에 저장됩니다. 프로젝트 메모리에 저장되지 않으며, 정성적인 학습 로그와 섞이지도 않습니다. 운영 지표(operational metrics)와 지식 산출물(knowledge artifacts)은 서로 다른 목적을 수행하므로, 서로 다른 곳에 위치해야 합니다.
계층적 추적(Layered tracking)이 원시 데이터(Raw numbers)가 보여주지 못하는 것을 드러내는 방식
원시 추적(Raw tracking): "#47 세션에서 85K 토큰을 사용했습니다."
계층적 추적(Layered tracking): "지난 20번의 세션을 살펴보면, 복잡한 세션은 단순한 세션보다 평균 3배의 비용이 발생합니다. 단순한 작업을 위해 전체 페르소나 설정(personality config)을 로드하는 세션에서는 유효 출력당 비용(cost-per-useful-output)이 40% 더 높습니다. 이는 월간 약 2,000토큰의 피할 수 있는 오버헤드입니다."
첫 번째는 데이터입니다. 두 번째는 의사결정을 유도하는 프롬프트(decision prompt)입니다.
이것은 돈에 관한 문제가 아닙니다. 현재의 API 가격을 고려할 때 월 2,000토큰은 아주 적은 금액입니다. 핵심은 원시 모니터링으로는 놓칠 수 있는 비효율성을 잡아내는 방법론에 있습니다. 가치는 달러 금액에 있는 것이 아닙니다. 당신이 대시보드를 뚫어지게 쳐다보지 않아도, 시스템이 스스로의 낭비를 감지할 수 있다는 사실을 아는 데 있습니다.
코드
기록 로직은 기존의 품질 게이트(quality-gate) hook에 내장되어 있습니다. 모든 체크를 통과한 후, 세션 종료 시점에 실행됩니다. 표준 라이브러리(stdlib)만 사용한 15줄의 코드입니다:
cost_log = os.path.expanduser('~/.claude/session-data/cost-log.jsonl')
os.makedirs(os.path.dirname(cost_log), exist_ok=True)
record = {
...
레이어별 계산, 누적 통계, 주간/월간 세부 내역, 그리고 L3 단계의 자동 생성 보고서가 포함된 전체 스크립트는 약 170줄 정도입니다. 외부 의존성(external dependencies)이 없으며, API 키도 필요하지 않습니다. 구성해야 할 서비스도 없습니다.
세션이 시작될 때, 단 한 줄로 현재 상태를 보여줍니다:
[L1] 12 sessions · avg 34 edits · 2 outliers flagged
This week: 4 sessions · 142 edits | This month: 12 sessions · 408 edits
Last: 2026-06-29 15:58 · 120 edits · complex
더 큰 패턴
자기 최적화(self-optimizes)를 수행하는 모든 시스템은 동일한 질문에 직면합니다: "변경을 정당화할 만큼 내 데이터가 충분한가?"
정답은 고정된 숫자가 아닙니다. 그것은 당신이 결정할 수 있는 범위와 당신이 관찰한 양에 맞춘 계층적 임계값(layered threshold)입니다.
만약 당신이 AI 사용량(비용, 품질, 속도, 정확도 등)에 대해 무엇인가를 추적하고 있다면, 계층(layers)이 필요합니다. 제가 제시한 특정 L0-L3 수치가 아니라, "나는 수집하고 있다"와 "나는 관찰하고 있다"와 "나는 결정하고 있다"를 분리하는 규율이 필요합니다.
추적을 시작하세요. 네 번의 세션이 지나면, 당신은 L1 단계에 도달할 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기