한 번의 API 호출로 고객별 AI API 비용을 추적하는 방법

발행: (2026년 3월 26일 AM 02:31 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

번역하려는 전체 텍스트(본문 내용)를 제공해 주시면, 요청하신 대로 마크다운 형식과 코드 블록, URL은 그대로 유지하면서 한국어로 번역해 드리겠습니다.

문제

기능을 배포했습니다. 작동합니다. 고객이 사용합니다. 그 다음 가격이 변하거나, 고객의 사용량이 급증하거나, 한 기능에 대한 토큰 비용이 해당 요금제 등급의 마진을 잠식하고 있다는 것을 깨닫게 됩니다.

문제는 비용 데이터를 전혀 갖고 있지 않다는 것이 아니라—AI 제공업체가 매달 청구서를 보내줍니다—그 데이터가 귀하의 고객이나 귀하의 기능별로 구분되지 않는다는 것입니다. 당신은 전체 지출을 볼 수 있습니다. 각 고객이 당신에게 얼마나 비용이 들었는지는 볼 수 없습니다.

고객당 마진을 알기 위해서는 AI 호출이 발생하는 순간에 비용을 캡처하고, 그때의 컨텍스트를 함께 저장해야 합니다.

Source:

하나의 이벤트 호출

각 AI API 응답 후, Tanso에 하나의 이벤트를 전송합니다:

await fetch('http://localhost:8080/api/v1/client/events', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer sk_test_67d9fb04f0344036ba92ecc973f1445a'
  },
  body: JSON.stringify({
    eventIdempotencyKey: crypto.randomUUID(),
    eventName: 'chat_completion',
    customerReferenceId: 'cus_123',
    featureKey: 'ai_summarization',
    costInput: {
      model: 'gpt-4o',
      modelProvider: 'openai',
    },
    usageUnits: response.usage.total_tokens,
    costAmount: 0.05,
  })
})

핵심 필드

  • eventIdempotencyKey – 필수. 동일한 이벤트가 두 번 전송될 경우(네트워크 재시도, 중복 웹훅) Tanso가 자동으로 중복을 제거합니다. 호출당 crypto.randomUUID()를 사용하거나, 안정적인 중복 제거가 필요하면 자체 요청 ID에서 파생시켜 사용하세요.
  • customerReferenceId – 귀하가 이미 사용하고 있는 고객 ID입니다. Tanso는 이를 고객 계정에 매핑합니다.
  • featureKey – 이벤트를 고객 플랜의 특정 기능에 연결합니다(예: ai_summarization, document_export, chat_completion).
  • costAmount – 달러 단위이며, 센트가 아닙니다. 5 센트를 나타내려면 5가 아니라 0.05를 전달하세요.
  • costInput – 모델 및 제공자 메타데이터. 사용량 기반으로 비용을 계산하도록 Tanso에 전달할 때 사용됩니다.

그게 전부입니다. 배치 작업도, ETL도, 제공자 청구서 스크래핑도 필요 없습니다.

얻을 수 있는 것

이벤트가 흐르기 시작하면, Tanso는 고객별 및 기능별로 실시간으로 이벤트를 집계합니다.

  • 고객별 마진cus_123이 이번 청구 기간에 얼마만큼 비용이 발생했는지, 기능별로 상세히 확인할 수 있습니다. 고객이 지불하고 있는 금액과 비교해 보세요.
  • 기능별 마진 – Starter 플랜의 ai_summarization이 지속적으로 손실을 보고 있다면, 분기 실적이 나쁘게 나오기 전에 이를 파악할 수 있습니다.
  • 플랜 한도 대비 사용량 – Tanso는 고객 플랜의 기능 한도에 대한 usageUnits 사용량을 추적합니다. 권한‑검사 API(POST /api/v1/client/entitlements/check)는 현재 사용량과 한도를 실시간으로 반환하므로, 고객이 할당량을 초과하기 전에 접근을 차단할 수 있습니다.
  • 자동 Stripe 동기화 – 이벤트가 Stripe Billing Meters로 전달되어 다음 청구서에 반영됩니다. 청구 측면을 별도로 관리할 필요가 없습니다.

어디서든 작동

이벤트를 전송하기 위해 전용 서비스가 필요하지 않습니다. Tanso의 이벤트 API는 HTTP POST이며, 따라서 다음 환경에서 작동합니다:

  • 귀하의 백엔드 – 모든 AI API 응답 후에 호출을 추가합니다
  • 귀하의 터미널 – 일회성 테스트나 백필링을 위한 curl
  • AI 에이전트 – Tanso는 MCP 서버를 제공하므로 Claude Code 및 기타 에이전트가 자체 AI 호출을 네이티브하게 계측하거나 작업 중 비용 데이터를 조회할 수 있습니다
curl -X POST http://localhost:8080/api/v1/client/events \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk_test_67d9fb04f0344036ba92ecc973f1445a" \
  -d '{
    "eventIdempotencyKey": "550e8400-e29b-41d4-a716-446655440000",
    "eventName": "chat_completion",
    "customerReferenceId": "cus_123",
    "featureKey": "ai_summarization",
    "costInput": {
      "model": "gpt-4o",
      "modelProvider": "openai"
    },
    "usageUnits": 1847,
    "costAmount": 0.05
  }'

시작하기

  1. API 키를 얻으세요 Tanso 대시보드에서.
  2. 플랜에 기능을 구성하세요 (예: ai_summarization) 예상 가격 모델과 함께.
  3. 이벤트 호출을 추가하세요 각 AI API 응답 후 코드에.
  4. 대시보드를 확인하세요 — 비용 및 사용 데이터가 즉시 표시됩니다.

이벤트가 올바르게 기록됐는지 확인하려면, 대시보드에서 고객별 원시 이벤트 기록을 볼 수 있습니다. 또한 entitlement API를 통해 언제든지 고객의 현재 권한 상태를 확인할 수 있습니다.

Tanso는 여러 AI API 위에서 제품을 제공하며 고객 수준에서 경제성을 파악해야 하는 팀을 위해 구축되었습니다 — 청구서 수준이 아니라. 이벤트 API가 기반이며, 그 외 모든 것 — 권한 확인, 사용량 기반 청구, 플랜 적용 — 은 동일한 데이터를 기반으로 작동합니다.

대화 환영합니다! 도움이 되었는지 알려 주세요. 15분 예약하기.

The docs:

0 조회
Back to Blog

관련 글

더 보기 »