API 사용량 트래커 — 흩어진 LLM 비용을 한 화면에, 한도 소진은 미리
Claude API·OpenAI·Gemini·Claude Max 사용량을 로컬에서 한 화면으로 모으고, 정액 플랜 한도는 현재 페이스로 리셋 시점 소진율을 예측하는 상주형 대시보드.
- 날짜
- 역할
- 기획 · 개발
- 기술
- Python · SQLite · pywebview · PyInstaller

왜 만들었나
LLM 을 여러 제공사에서 쓰면 사용량 확인이 순례가 된다. Anthropic 콘솔, OpenAI 대시보드, AI Studio 를 차례로 열어야 하고, 그마저도 “오늘 얼마 썼는지”는 어디서도 바로 보여주지 않는다.
정액제인 Claude Max 는 관심사가 아예 다르다. 금액이 아니라 한도가 언제 소진되는가 — 5시간·주간 사용률이 지금 페이스면 리셋 전에 바닥나는지를 미리 알고 싶었다.
무엇을 만들었나
네 제공사의 사용량을 한 화면에 모으는 로컬 대시보드다. 트레이에 상주하는 데스크톱 앱, 브라우저 탭, Python 없이 도는 단일 exe — 세 가지 형태로 실행된다.
![]()
실사용 화면. 제공사별 카드, 일별 비용 추이, 모델별 사용량(캐시 읽기·쓰기 분리)을 한 화면에 놓았다.
개인 지출 규모라 금액은 블러 처리했다. 토큰 수와 사용률은 그대로 뒀다.
간판 기능은 Claude Max 카드의 한도 페이스 예측이다. 5시간·주간 사용률 바 아래에 “현재 페이스 → 리셋 시점 약 N%“를 표시한다 — 지금 속도로 쓰면 리셋 때 몇 %에 도달하는지를 공식 사용률 기반으로 선형 외삽한 값이다.
![]()
조회할 때마다 일별 스냅샷을 SQLite 에 쌓아 90일 이력을 유지한다. Claude Code 가 30일 지난 로그를 지워도 이쪽 이력은 남는다. 날짜는 전부 한국 시간(KST) 기준으로 통일했다 — 제공사마다 UTC 기준이 달라 날짜가 어긋나면 “오늘 얼마 썼나”라는 질문 자체가 무의미해진다.
어떻게 만들었나
추정과 확정을 시각적으로 구분한다. 오늘·어제 비용은 어느 제공사도 확정값을 주지 않는다.
토큰 × 단가로 추정하되, 추정치에는 금액 앞에 ≈ 를 붙여 확정 비용과 한눈에 구분되게 했다.
단가는 켤 때마다 백그라운드에서 자가 학습해 새 모델이 나와도 표가 크게 어긋나지 않는다.
공식 API 가 없으면 우회로를 문서화한다. Gemini 는 공식 사용량 API 가 없다. 키가 속한 GCP 프로젝트의 Cloud Monitoring 으로 요청 수와 입력 토큰을 가져오는 우회를 만들되, 기본값은 안내 카드다 — 설정하지 않은 사용자에게 빈 숫자를 보여주는 것보다 낫다.
비공식에는 폴백을 깐다. Max 공식 사용률은 비공식 엔드포인트에서 가져온다(5분 캐시). 언제 막혀도 이상하지 않으므로, 실패하면 로컬 기록 기반 계산으로 자동 대체된다.
키는 화면에 나가지 않는다. 서버는 127.0.0.1 전용이고, API 키는 .env 에만 저장되며
어떤 응답에도 포함되지 않는다.
걸렸던 것
사용량 조회에는 다른 키가 필요하다. Anthropic 도 OpenAI 도 일반 API 키로는 사용량·비용을 조회할 수 없고 Admin 키가 따로 필요하다. 개인 계정이라면 조직부터 만들어야 한다. 처음에 이걸 몰라 왜 401이 나는지 한참 헤맸고, 결국 세 제공사의 키 발급 절차를 README 에 단계별로 적었다 — 이런 도구는 절반이 문서라는 걸 인정하게 됐다.
“오늘”은 아직 확정되지 않은 시간이다. 확정 비용만 보여주면 대시보드에서 가장 궁금한
오늘이 빈다. 추정을 보여주기로 하되 확정과 절대 섞이지 않게 — ≈ 마커와 단가 자가 학습은
그 타협의 결과다.
어디까지 왔나
매일 트레이에 상주시켜 놓고 쓰는 중이다. 이 글의 캡처도 글 쓰던 날의 실사용 화면이다. 단일 exe 빌드로 다른 PC 에도 옮겨 뒀다.
남은 것
OpenAI 의 비-completions 비용(이미지·임베딩 등)은 최근 2일 추정에 잡히지 않는다 — 확정된 뒤에야 반영된다. 웹 검색·코드 실행 같은 모델 외 과금을 모델별 표에서 더 잘 구분하는 것도 남아 있다.