AI 비서를 운영하다 보면 가장 궁금한 것 중 하나가 “도대체 하루에 얼마나 쓰고 있지?“다. Claude API를 사용하는 OpenClaw 환경에서 토큰 사용량을 자동으로 추적하는 시스템을 만들어보았다.

왜 필요했나?

매일 수백, 수천 개의 AI 응답이 생성된다. 크론잡, 자동화 작업, 실시간 대화까지 포함하면 하루 토큰 사용량이 수백만 개에 달한다. 문제는:

  1. 비용을 모른다 - 입력/출력 토큰이 각각 얼마인지
  2. 트렌드를 모른다 - 어제보다 많이 쓴 건지, 왜 많이 쓴 건지
  3. 최적화를 못 한다 - 어떤 작업이 토큰을 많이 쓰는지 파악 불가

그래서 자동 추적 시스템을 만들기로 했다.

시스템 설계

1. 데이터 수집

OpenClaw는 모든 세션을 JSONL 형식으로 저장한다. 각 메시지마다 usage 정보가 포함되어 있다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "type": "message",
  "timestamp": "2026-02-07T06:00:00.000Z",
  "message": {
    "role": "assistant",
    "usage": {
      "input": 13,
      "output": 292,
      "cacheRead": 31158,
      "cacheWrite": 381
    }
  }
}

이 데이터를 파싱해서 날짜별로 집계하면 된다.

2. DB 스키마

SQLite로 간단하게 설계했다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
CREATE TABLE token_usage (
    date TEXT PRIMARY KEY,
    input_tokens INTEGER,
    output_tokens INTEGER,
    cache_read_tokens INTEGER,
    cache_write_tokens INTEGER,
    response_count INTEGER,
    pure_cost_usd REAL,
    total_cost_usd REAL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  • 순수 비용: 입력 + 출력만
  • 전체 비용: 캐시 포함

이렇게 나누면 “실제로 AI가 일한 비용"과 “시스템 최적화 비용"을 구분할 수 있다.

3. 자동 수집 스크립트

Python으로 간단하게:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
def collect_yesterday_usage():
    yesterday = (datetime.now(KST) - timedelta(days=1)).strftime("%Y-%m-%d")
    
    stats = {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0}
    
    for session_file in SESSIONS_DIR.glob("*.jsonl"):
        with open(session_file) as f:
            for line in f:
                record = json.loads(line)
                if record.get("type") != "message":
                    continue
                
                usage = record["message"].get("usage")
                timestamp = record["timestamp"]
                date = parse_timestamp(timestamp).strftime("%Y-%m-%d")
                
                if date == yesterday:
                    stats["input"] += usage["input"]
                    stats["output"] += usage["output"]
                    # ...

4. 비용 계산

Claude Sonnet 4.5 요금 (2026년 2월 기준):

  • 입력: $3 / 1M tokens
  • 출력: $15 / 1M tokens
  • 캐시 읽기: $0.30 / 1M tokens
  • 캐시 쓰기: $3.75 / 1M tokens
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
pure_cost = (
    input * 3.0 / 1_000_000 +
    output * 15.0 / 1_000_000
)

total_cost = (
    pure_cost +
    cache_read * 0.30 / 1_000_000 +
    cache_write * 3.75 / 1_000_000
)

5. 자동화 (크론잡)

매일 0시에 자동 실행:

1
0 0 * * * python3 /path/to/collect_token_usage.py

실제 데이터 분석

일주일 운영 결과:

날짜입력출력캐시R캐시W순수비용전체비용응답
2/1244,865369,27261.9M14.6M$6.27$79.661,354
2/28,457296,23441.1M13.5M$4.47$67.33890
2/311,964449,61795.2M10.6M$6.78$75.201,425
2/46,536413,76287.4M4.5M$6.23$49.401,084
2/510,837357,25051.8M6.9M$5.39$46.851,115
2/618,873579,662113.0M14.6M$8.75$97.471,804
2/710,133280,15244.9M8.8M$4.23$50.74994

놀라운 발견

  1. 캐시가 91%를 차지 - 전체 비용의 대부분이 캐시
  2. 하지만 10배 절약 - 캐시 읽기가 일반 입력보다 90% 저렴
  3. 순수 비용은 매우 저렴 - 하루 평균 $6 (₩8,000)
  4. 캐시 덕분에 $1,334 절약 - 일주일 기준

결론: 캐시는 비용이 많이 들지만, 그만큼 훨씬 더 많이 절약해준다.

아침 보고서 통합

매일 아침 8시, 자동으로 최근 7일 토큰 사용량을 보고한다:

📊 토큰 사용량 (최근 7일)
[표 형식 데이터]

💬 어제는 평소보다 조용한 날 (-15%), 크론잡 위주로 작동
💬 주간 평균: $66.60 (어제는 평균 대비 -24%)

전일 대비 증감률, 주간 평균, 특이사항을 자동으로 분석해준다.

배운 점

  1. 측정하지 않으면 개선할 수 없다 - 막연한 추측보다 정확한 데이터
  2. 자동화가 핵심 - 수동으로 체크하면 절대 안 한다
  3. 시각화는 나중에 - 표만 있어도 충분히 유용하다
  4. 캐시는 투자다 - 당장은 비싸 보여도 장기적으로 이득

다음 단계

  • 시간대별 분석 (어느 시간대에 토큰을 많이 쓰나?)
  • 작업별 분석 (블로그 글 vs 크론잡 vs 실시간 대화)
  • 예산 알림 (일일 $100 초과 시 경고)
  • 월말 리포트 (트렌드 + 예측)

마치며

AI 비서를 운영한다면 토큰 추적은 선택이 아니라 필수다. 간단한 스크립트와 크론잡만으로도 충분히 강력한 시스템을 만들 수 있다.

코드는 간단하지만, 얻는 인사이트는 크다. 여러분의 AI 비서는 하루에 얼마나 쓰고 있는가?