
3가지 hook으로 Claude Code의 비용 폭발을 방지하는 방법 — 월 $200를 넘지 않기 위한 안전장치
요약
Claude Code의 자율 모드 사용 시 발생할 수 있는 비용 폭발을 방지하기 위한 3단계 hook 활용법을 소개합니다. 도구 호출 횟수를 제한하거나 세션 및 일일 사용량을 추적하여 예기치 못한 과금을 막는 실질적인 가이드를 제공합니다.
핵심 포인트
- tool-call-rate-limiter로 분당 도구 호출 폭주 차단
- session-quota-tracker로 세션별 누적 호출량 단계적 경고
- daily-usage-tracker로 일일 총 사용량 모니터링
- 도구 호출 수를 토큰 소비의 실용적 지표로 활용
Claude Code를 자율 모드(Autonomous mode)로 실행하면 비용 폭발이 일어난다. GitHub의 Issue #38335에는 80개 이상의 thumbsup이 달려 있으며, "하룻밤 방치했더니 청구 금액이 치솟았다"라는 보고가 잇따르고 있다.
CLAUDE.md에 "비용을 억제하라"라고 써두어도 의미가 없다. 컨텍스트(Context)가 불어나면 지시는 묻혀버린다. 프로세스 레벨에서 작동하는 hook만이 확실하게 비용을 멈출 수 있다.
이 기사에서는 비용 폭발을 3개 계층으로 방지하는 hook을 소개한다.
| 레이어 | hook 이름 | 방지 대상 |
|---|---|---|
| 순간 | tool-call-rate-limiter | 폭주 루프 (1분 30회 초과) |
| ... | ... | ... |
Claude Code가 루프에 빠지면, 동일한 도구(Tool)를 1분에 수십 번 호출한다. 토큰(Token) 소비는 지수적으로 증가한다. 이 hook은 1분당 도구 호출 횟수를 감시하며, 상한선을 초과하면 차단한다.
#!/bin/bash
# tool-call-rate-limiter.sh — Prevent runaway tool calls
# TRIGGER: PreToolUse
...
PreToolUse 트리거이므로, 도구 실행 전에 실행됨 -
/tmp/에 타임스탬프를 축적하여 최근 60초간의 호출 수를 카운트 -
30회를 초과하면 exit 2로 차단. Claude는 조작을 실행할 수 없음 -
오래된 엔트리는 매번 prune(정리)하므로 파일이 비대해지지 않음
{
"hooks": {
"PreToolUse": [
...
환경 변수로 임계값을 조정할 수 있다:
# 1분 20회까지 (기본값: 30)
export CC_RATE_LIMIT_MAX=20
# 윈도우를 120초로 (기본값: 60)
...
코드 생성과 같은 고속 태스크에서는 분당 30회가 정상적인 경우도 있다. 자신의 사용 방식에 맞춰 조정한다.
루프는 아니지만, 장시간 세션에서 서서히 토큰을 소비하는 패턴도 있다. 이 hook은 세션 누적 도구 호출 수를 추적하여 단계적으로 경고한다.
#!/bin/bash
# session-quota-tracker.sh — Track cumulative tool calls per session
# TRIGGER: PostToolUse
...
PostToolUse 트리거이므로, 도구 실행 후에 실행됨 (차단이 아닌 통지 목적) -
$$ (쉘의 PID)를 파일명으로 사용하므로 세션마다 별도의 카운터 생성 -
50 / 100 / 200 / 500회에서 단계적으로 경고 메시지를 출력 -
exit 0이므로 조작을 차단하지 않음. 어디까지나 "인지"를 제공함
{
"hooks": {
"PostToolUse": [
...
Claude Code는 토큰 사용량을 hook에 전달하지 않는다 (2026년 3월 기준). 직접적인 비용 계산은 할 수 없지만, 도구 호출 수는 토큰 소비와 강하게 상관관계가 있다. 1회의 도구 호출로 수천~수만 토큰을 소비하기 때문에, 호출 수는 실용적인 프록시(Proxy) 지표가 된다.
세션을 몇 번이고 다시 시작하는 경우, 세션 단위의 트래커로는 누적치를 볼 수 없다. 이 hook은 하루 동안의 도구 호출 총수를 기록하여 이상을 감지한다.
#!/bin/bash
# daily-usage-tracker.sh — Track daily tool call count
# TRIGGER: PostToolUse
...
~/.claude/daily-usage/YYYY-MM-DD.log에 시각과 도구 이름을 기록 -
jq를 사용하여 stdin으로부터 도구 이름을 추출 (PostToolUse는 JSON 입력을 받음) -
100 / 250 / 500 / 1000회에서 마일스톤 통지 -
임계값 도달 시 전일과의 비교를 출력 (이상 감지의 참고 자료)
기록된 로그는 나중에 분석할 수 있다:
# 오늘의 도구별 호출 횟수
awk '{print $2}' ~/.claude/daily-usage/$(date +%Y-%m-%d).log | sort | uniq -c | sort -rn
# 지난 7일간의 추이
...
{
"hooks": {
"PreToolUse": [
...
1. hook 디렉터리 생성
mkdir -p ~/.claude/hooks
2. 각 스크립트 배치 (위의 코드를 복사)
...
hook을 설정한 뒤, 비용 감각도 함께 갖추는 것이 더욱 효과적입니다.
| 종류 | 단가 |
|---|---|
| 입력 토큰 (Input Token) | $3 / 1M 토큰 |
| 출력 토큰 (Output Token) | $15 / 1M 토큰 |
출력 비용은 입력보다 5배 높습니다. Claude가 긴 문장을 생성하는 작업일수록 비용이 급증합니다.
— 컨텍스트 윈도우 (Context Window)를 리셋하여 입력 토큰을 절감하는 /compact를 정기적으로 실행
— --max-turns로 상한을 설정: claude --max-turns 20 명령으로 자율 실행 횟수를 제한
— 큰 파일을 통째로 읽게 하지 말 것 — 필요한 행만 지정해서 읽게 함
— 루프(Loop)가 의심되면 즉시 — hook이 작동하기 전에 직접 Ctrl+C로 멈추는 것도 유효함
Max (월 $200) 플랜의 경우, 공식 Usage dashboard에서 실시간 소비량을 확인할 수 있습니다. hook 경고가 뜨면 대시보드를 확인하는 습관을 들이세요.
3개의 hook을 수동으로 배치하는 것이 번거롭다면, cc-safe-setup으로 한꺼번에 도입할 수 있습니다:
npx cc-safe-setup
446개의 hook 템플릿 중에서 필요한 것을 골라 설치할 수 있습니다. 6,099번의 테스트를 통해 동작을 검증했습니다.
비용 관련 3가지 hook 외에도, rm -rf 차단, git push --force 방지, secret 유출 탐지 등 안전 관련 hook도 일괄적으로 포함됩니다.
- Claude Code 실전 가이드 (Zenn Book) — hook의 구조부터 운영 설계까지 체계적으로 해설
npx cc-health-check — 무료 20개 항목 진단. 점수가 80점 미만이라면 개선의 여지가 있음
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기