"ok" 한 마디에 $0.07 — AI 코딩 도구 비용은 어디서 새는가
“ok” 한 마디에 $0.07 — AI 코딩 도구 비용은 어디서 새는가
AI 코딩 도구 비용은 월 구독료로 끝나는 것처럼 보인다. 화면에 금액이 안 뜨니 그렇게 읽힌다.
헤드리스 모드로 실험을 하나 했다. 모델에게 “ok” 한 마디만 시켰다. 청구된 금액은 $0.0697이었다.
실제로 주고받은 토큰은 123개다. 나머지 51,386개는 지시한 적이 없다. 단 이 비율은 가장 나쁜 경우에 가깝다는 점을 미리 적어둔다.
결론부터 적는다. 비용은 대화가 아니라 함께 실려 가는 컨텍스트에 몰려 있고, 그 값은 대부분 기록되지 않는다. 같은 도구인데 실행 방식에 따라 금액이 보이기도 하고 아예 안 남기도 했다.
5월에 발행한 글에서는 이 수집기를 “비용 0원”이라고 적었다. 그때 이미 유료 API가 하루 두 번 돌고 있었다.
청구서를 열어보게 만든 것
한도 경고를 90%에서 처음 본 적이 있다. 어떤 작업이 비쌌는지 되짚지 못한 적도 있다. 매일 도는 자동화의 회당 비용을 모른 채 몇 달을 굴린 적도 있다.
밖에서도 같은 얘기가 올라온다. Hacker News에 “Cursor removed cost information from the usage page and CSV export”라는 글이 걸렸다. 8월 2일 작성이고, 조회 시점 기준 336점에 댓글 154개다. 스레드 본문은 안 읽었으니 제거 의도는 모른다.
같은 날 수집된 제목 중에는 이런 것도 있었다. “I don’t trust agent tools when I can’t understand what the work costs”. 제목만 봤다.
그래서 남의 도구 말고 직접 굴리는 것부터 쟀다.
“ok” 한 마디의 내역
정기권을 끊는 상황을 떠올려보자. 처음에 목돈이 나가고, 많이 탈수록 한 번당 값이 내려간다. 캐시 요금이 그 모양이다. 이번 실측은 끊자마자 한 번만 타고 만 경우였다.
명령은 단순하다.
claude -p "Reply with exactly: ok" --model claude-haiku-4-5 --output-format json
반환된 JSON에 total_cost_usd가 들어 있다. 값은 0.0697113. 함께 온 토큰 내역은 입력 10, 출력 113, 캐시 쓰기 33,683, 캐시 읽기 17,703이었다.
공개 요율로 역산해보자. 입력 100만 토큰당 $1, 출력 $5, 캐시 읽기는 입력의 0.1배, 캐시 쓰기는 1시간 보관 기준 2배다.
| 항목 | 토큰 | 금액 | 비중 |
|---|---|---|---|
| 입력 | 10 | $0.000010 | 0.0% |
| 출력 | 113 | $0.000565 | 0.8% |
| 캐시 쓰기 | 33,683 | $0.067366 | 96.6% |
| 캐시 읽기 | 17,703 | $0.001770 | 2.5% |
| 합계 | 51,509 | $0.0697113 | 100% |
실측 금액과 소수점 열 자리까지 같다. 5분 보관 요율(1.25배)로 계산하면 $0.0444로 어긋난다. 이 실행은 1시간 보관이었다.
요율 자체는 공식 문서 원문을 직접 열어 확인하지 못했다. 다만 계산이 실측과 정확히 맞아떨어져서 역산으로 검증된 상태다.
대화에 쓴 돈은 전체의 0.82%다. 나머지는 컨텍스트를 실어 나른 값이다. 붙어간 토큰이 대화의 418배였다.
다만 이 비율을 그대로 일반화하면 틀린다. 1턴짜리 실행이라 캐시를 만들어놓고 회수할 구간이 없었다. 최악의 경우에 가깝다.
실제 세션은 모양이 다르다. 세션 파일 하나의 누적을 보면 캐시 읽기 20,367,470에 캐시 생성 463,348이다. 읽기가 쓰기의 44배다. 읽기 요율이 0.1배니까 같은 컨텍스트라도 여러 턴을 돌면 단가가 내려간다.
즉 96.6%는 단일 실행의 수치지 평상시 비율이 아니다. 정기권을 끊자마자 한 번 타고 만 셈이다.
그래도 방향은 두 경우가 같다. 청구를 지배하는 쪽은 대화가 아니라 컨텍스트다.
그러니 샌다는 말은 정확하지 않다. 몰려 있는 것이다. 문제는 몰린 자리가 청구서에 안 보인다는 데 있다.
그 금액은 어디에도 안 남는다
여기까지는 숫자가 보인다. 그런데 이 숫자는 헤드리스에서만 나온다.
평소 쓰는 인터랙티브 세션은 기록을 ~/.claude/projects/*/*.jsonl에 남긴다. 메시지마다 usage 블록이 붙는다. 샘플 파일 하나에 131건이 있었다.
거기 담긴 필드는 이렇다. input_tokens, output_tokens, cache_creation_input_tokens, cache_read_input_tokens. 토큰은 다 있다.
금액 필드는 없다.
세션 파일 42개를 전부 훑었다. 금액 문자열이 걸린 파일은 두 개였는데, 하나는 헤드리스 결과를 세션 안에서 읽은 흔적이고 하나는 이번 조사에서 실행한 grep 명령 자체가 기록된 것이다. 세션이 스스로 금액을 남긴 파일은 0개.
디스크에 금액을 남기는 파일이 하나 있긴 하다. ~/.claude/stats-cache.json이다. 열어보니 상태가 이랬다.
| 항목 | 값 |
|---|---|
| lastComputedDate | 2026-05-10 (86일 전) |
| 기록된 모델 | opus-4-7, opus-4-6 두 개 |
| 현재 쓰는 모델 | 없음 |
| costUSD | 0 |
opus-4-7 항목에는 출력 34,567,236 토큰, 캐시 읽기 8,325,996,042 토큰이 적혀 있다. 83억 토큰을 읽고 기록된 금액이 0이다.
왜 0인지는 확인 못 했다. 정액제라 API 과금이 안 잡히는 것인지, 계산 경로가 안 도는 것인지 판단할 자료가 없다. 86일 멈춘 이유도 모른다.
도구가 계산 자체를 못 하는 건 아니다. 실행 파일 문자열을 뒤지면 costUSD가 26회, total_cost_usd가 25회 나온다.
“한 달에 비용 0원”이라고 썼던 글
앞의 두 사례에는 같은 구조가 있다. 값은 이미 도착해 있는데 받는 쪽이 없다.
Claude Code는 금액을 계산해두고 인터랙티브 화면 밖으로 안 내보낸다. 안 주는 게 아니라 안 꺼낸다.
같은 형태가 직접 만든 수집기에도 있었다. 여기서 제일 아픈 게 나왔다.
5월 10일 발행글에 이런 문장이 있다.
trend-scout는 X·Threads·Google Trends 세 곳을 데이터 출처로 삼는다. 한 달에 비용은 0원, 유지 시간은 2~4시간 정도로 굴리는 사이드 수집기다.
그 글 전체에 LLM도 Anthropic도 API 비용도 한 번을 안 나온다. 수집 비용만 따로 떼어 말한 게 아니라 도구 전체를 0원으로 서술했다.
오늘 git 이력을 열어봤다.
| 날짜 | 사건 |
|---|---|
| 2026-03-30 | refactor: switch from litellm to Claude API direct call |
| 2026-04-01 | 스케줄러 등록 — 08:17, 20:17 하루 2회 |
| 2026-05-10 | “한 달에 비용은 0원” 발행 |
글을 쓴 시점에 유료 호출은 이미 6주째 돌고 있었다. 그 글에 적힌 구성을 그대로 따르면 지금도 기록이 안 남는다.
틀린 것보다 나쁜 게 있다. 지금도 맞는지 틀리는지 잴 수가 없다.
분석 코드는 응답을 이렇게 받는다.
response = await client.messages.create(
model=model, max_tokens=16000, temperature=0.3, ...
)
content = response.content[0].text.strip()
response.usage를 어디서도 읽지 않는다. 토큰 수가 응답에 실려 오는데 그냥 버린다. 그래서 회당 비용이 로그에도, 리포트에도, 파일에도 없다.
하루 두 번씩 넉 달을 돌았는데 기록이 0건이다.
당시 실제 청구액이 얼마였는지는 지금도 모른다. 0원이 아니었다는 것까지가 확인된 사실이다.
정정할 대상은 금액이 아니다. 잴 수 없는 상태에서 값을 단정한 서술이다. 실제 청구가 얼마였든 그때도 확인할 방법이 없었고 지금도 없다.
볼 수 있는 것, 볼 수 없는 것, 확인 못 한 것
반박부터 적는다. 정액 구독이면 추가 청구가 없으니 0원이 실질적으로 맞다는 주장이 가능하다. 카드값이 안 늘어나는 건 사실이다.
그런데 값은 다른 통화로 나간다. 구독 한도다. 한도를 태우는 속도가 곧 비용이고, 90%에서 경고를 보고 나서야 그걸 확인하게 된다.
stats-cache.json의 0이 정액제 때문인지도 확인 못 했으니, 이 반박이 맞는지도 아직 모른다.
이 반박이 맞더라도 앞 문단의 정정은 안 바뀐다. 값이 0이었느냐가 아니라 재보지 않고 적었느냐가 문제였다.
비용이 몰린 자리는 특정됐다. 컨텍스트다. 대화가 아니라 함께 실려 가는 것이 청구를 만든다.
안 보인 이유도 특정됐다. 그 값을 받아 적는 곳이 없었다.
나머지는 항목별로 갈라 적는다.
| 분류 | 항목 |
|---|---|
| 볼 수 있는 것 | 헤드리스 실행의 total_cost_usd (소수점까지 정확) · 세션 전사의 토큰 4종 |
| 볼 수 없는 것 | 인터랙티브 세션의 금액 · stats-cache.json의 0이 가리키는 실제 금액 · 수집기 회당 비용 · 발행 API 호출량 |
| 확인 못 한 것 | costUSD가 0인 원인 · 86일 멈춘 이유 · 공식 요율 원문 · 무료 API 쿼터 잔량 |
어느 항목이 비싼지는 알았다. 금액은 아직 안 보인다. 비용 추적 도구를 붙이면 해결된다는 얘기도 아니다. 관측과 통제는 다른 문제고, 지금 상태는 관측 앞 단계다.
지나간 호출은 되돌려 잴 수 없다. 응답에 실려 온 값을 안 받으면 나중에 복구가 안 된다. 넉 달치를 잃은 건 코드가 틀려서가 아니라 받는 곳을 안 만들어서다.
사람이 안 보는 사이 도는 것이 늘수록 안 받아진 값도 같이 늘어날 텐데, 여기서부터는 재본 게 아니라 추정이다.
그래서 수집기에는 response.usage를 읽어 기록하는 줄부터 넣기로 했다. 코드로 치면 두 줄이다. 그런데 두 줄을 넉 달 동안 안 넣은 이유가 난이도일 리 없다. 필요를 안 느꼈다는 쪽이 맞다.
5월 글에도 정정을 단다. 0원이 아니었다.
읽는 쪽에서 해볼 수 있는 것도 한 번이면 된다. 평소 하는 실제 작업 하나에 --output-format json을 붙여 헤드리스로 돌리면 total_cost_usd가 나온다. 짧은 한 마디로 재면 앞에서 본 1턴 최악값이 나오니, 실제로 시키는 작업으로 재야 감이 맞는다.
Q&A
Q. 구독제로 쓰면 토큰 비용을 신경 안 써도 되나.
A. 카드 청구는 안 늘어난다. 대신 구독 한도가 줄어든다. 이번 실측에서 “ok” 한 마디에 51,509토큰이 청구 대상으로 잡혔다. 그중 96.6%가 캐시 쓰기인데 이건 1턴 실행이라 나온 최악값이다. 여러 턴을 돌리면 캐시 읽기 쪽으로 옮겨가고 단가도 내려간다. 그래도 한도를 태우는 쪽은 대화가 아니라 실려 가는 컨텍스트다.
Q. 내 도구가 비용을 기록하고 있는지 어떻게 확인하나.
A. 세 가지를 본다. API 응답 객체에서 usage를 읽는 코드가 있는지, 그 값을 파일이나 로그에 남기는지, 그리고 그 파일의 마지막 갱신일이 언제인지다. 마지막 항목이 특히 중요하다. 이번 조사에서 금액을 담은 파일은 86일 전에 멈춰 있었다.
Q. 내가 방금 시킨 작업이 얼마인지 지금 재보려면.
A. 헤드리스로 한 번 돌리면 된다. 평소 쓰는 명령에 --output-format json을 붙이면 반환 JSON에 total_cost_usd와 모델별 토큰 내역이 들어 있다. 인터랙티브 세션에서는 이 값이 파일에 안 남으니, 한 번 재보고 감을 잡아두는 편이 낫다. 절감 방법은 이 글에서 다루지 않았다.
관련 글
- 패밀리카를 검색어로 하여 6개 수집 도구를 돌려봤다 — 정정 대상. “한 달에 비용은 0원”이 여기 있다
- rm -rf는 안 물어보고 .env는 물어본다 — 같은 분류 방식을 안전장치에 적용한 기록
- AI 코딩 스킬, 많을수록 좋을까 — 스킬이 늘 때 붙는 컨텍스트 세금
측정 환경: macOS, Claude Code 2.1.221. 측정일 2026-08-04. 대상은 개인 하네스로 한정했다. 금액은 헤드리스 실행이 반환한 값과 공개 요율 계산만 사용했고 청구 명세는 열지 않았다. Hacker News 점수와 댓글 수는 공식 API로 조회했다. 8년 차 프론트엔드 개발자이고 이 수집기는 1년째 운영 중이다.
태그: #AI코딩 #토큰비용 #ClaudeCode #프롬프트캐시 #개발자동화 #비용측정 #하네스
댓글
댓글 쓰기