3. 계산 공식
아래 공식은 lib/pricing.ts의 순수 함수로 구현되어 있고, 손으로 검산한 단위 테스트가 붙어 있습니다. 화면의 모든 숫자는 이 함수들의 반환값이며, 표나 카드 안에서 다시 계산하지 않습니다.
3.1 기호
Pin, Pout — 100만 토큰당 입력·출력 단가 (USD)Pcache, Pwrite — 캐시 읽기·쓰기 단가B — 배치 배수 (0.5 = 50% 할인)Tin, Tout — 호출당 입력·출력 토큰h — 캐시 적중률, b — 배치 처리 비중
3.2 월간 호출 수
calls_per_month
= seats × active_ratio × sessions_per_user_per_day
× calls_per_session × working_days_per_monthactive_ratio가 이 모델의 핵심입니다. 좌석 100개를 사도 실사용률이 60%면 API 비용은 60%지만 구독 비용은 100%입니다. 구독의 미사용 좌석 낭비는 이 비대칭에서 드러납니다.
3.3 1회 호출 단가
input_cost_per_call = (Tin × (1 − h) × Pin + Tin × h × Pcache) ÷ 1,000,000
output_cost_per_call = (Tout × Pout) ÷ 1,000,000
cache_write_cost = (Tin × h × Pwrite ÷ 1,000,000) ÷ calls_per_session
cost_per_call = input_cost_per_call + output_cost_per_call + cache_write_cost
Pcache가 미공개면 h를 0으로 강제하고 그 사실을 표시합니다. 필요한 단가가 미공개면 계산하지 않고 “계산 불가”를 반환합니다 — 절대 0으로 대체하지 않습니다. 그렇게 하면 표에 “무료 모델”이 등장합니다.
3.4 롱컨텍스트 구간
tier = long_context 중 Tin > above_tokens 를 만족하는 가장 큰 구간
Pin, Pout = tier가 있으면 tier의 값, 없으면 기본 단가
경계는 배타적입니다 (Tin = above_tokens에서는 구간이 적용되지 않습니다). 구간 요금을 평균 내어 하나의 단가로 만들면 롱컨텍스트 워크로드가 크게 과소평가됩니다.
3.5 배치 할인 (반드시 마지막)
monthly_base = cost_per_call × calls_per_month
monthly_api_cost = monthly_base × ((1 − b) + b × B)
캐시 계산이 끝난 뒤 배치를 적용합니다. 순서를 바꾸면 값이 달라집니다. B가 없으면 b를 0으로 강제하고 표시합니다.
3.6 구독 좌석 비용
per_seat = 연간 결제면 annual_per_seat_monthly, 아니면 monthly_per_seat
billable_seats = max(seats, min_seats)
monthly_subscription_cost = billable_seats × per_seat
wasted_seat_cost = monthly_subscription_cost × (1 − active_ratio)
요청한 결제 주기의 단가가 없으면 다른 주기의 단가로 대체하지 않습니다. 조용한 치환은 비교를 무너뜨립니다.
3.7 구독 vs API 손익분기
breakeven_calls_per_month = monthly_subscription_cost ÷ cost_per_call
breakeven_calls_per_user_per_day
= breakeven_calls_per_month ÷ (seats × active_ratio × working_days_per_month)
이 계산은 좌석료에 사용량이 포함된 플랜에만 적용합니다. 크레딧 풀· 플랫폼 이용료·번들 유형은 좌석 단가가 있어도 계산하지 않고 사유를 표시합니다 (1.3 참조). 한도 초과 판정에는 공급사가 공개한 좌석당 상한만 씁니다.
여기서 cost_per_call은 배치 할인이 반영된 실효 단가입니다. 실제 예상 사용량이 손익분기보다 많으면 구독이, 적으면 API가 유리합니다. 다만 구독은 사용량이 늘어도 고정이고 API는 비례합니다. 이 비대칭 때문에 손익분기 근처의 결정은 안전하지 않습니다.
3.8 셀프호스팅 원가
tokens_per_hour = throughput_tps × 3600 × utilization
cost_per_1m_tokens = (hourly_usd × overhead_multiplier)
÷ tokens_per_hour × 1,000,000
hourly_usd = GPU 전체를 포함한 인스턴스 한 대의 시간당 총액
→ gpu_count를 다시 곱하지 않는다낙관·기준·보수 값을 각각 같은 등급끼리 짝지어 계산하고, 결과를 재정렬하지 않습니다. 범위가 뒤집혀 있으면 그 사실을 플래그로 드러냅니다.
3.9 비교 정규화
과금 구조가 다른 선택지를 나란히 놓기 위해 두 기준으로 환산합니다. 월 총비용(경영진의 1차 질문)과 1,000회 호출당 비용(효율 비교)입니다. 구독과 셀프호스팅의 1,000회당 비용은 월 비용 ÷ (월 호출 수 ÷ 1000)으로 환산하며, 월 호출 수가 0이면 정의되지 않으므로 “계산 불가”가 됩니다.
계산 불가 항목은 목록에서 제거하지 않고 끝으로 보내 사유와 함께 표시합니다. 조용히 사라진 선택지는 사용자가 검토했다고 착각하게 만듭니다.
4. 시나리오 프리셋과 그 근거
프리셋은 “대표값”이 아니라 출발점입니다. 각 프리셋의 가정이 왜 그 값인지 아래에 그대로 적습니다. 자기 조직의 숫자로 바꾸는 것이 정상적인 사용법입니다 — 계산기에서 모든 값을 조정할 수 있습니다.
사내 지식 챗봇 공통
- 좌석 · 실사용률
- 100명 · 50%
- 1인 사용량
- 하루 3세션 × 세션당 3회 · 월 20일
- 호출당 토큰
- 입력 4K · 출력 500
- 캐시 · 배치
- 적중률 40% · 배치 비중 0%
직원이 사내 문서를 질의하는 RAG 챗봇. 기업의 가장 흔한 첫 도입 사례다. 좌석 100개는 부서 단위 파일럿 규모이며, active_ratio 0.5는 도입 초기 실사용률이 절반을 넘기 어렵다는 관찰에 따른 보수적 가정이다. 입력 4,000토큰은 RAG 검색 결과를 프롬프트에 첨부하기 때문에 크게 잡았고, 캐시 적중률 0.4는 시스템 프롬프트와 자주 조회되는 문서 컨텍스트가 재사용되는 몫이다. 실시간 응답이 필요하므로 배치는 쓰지 않는다. 근무일 20일 기준.
문서 요약·번역 배치 엔지니어
- 좌석 · 실사용률
- 20명 · 100%
- 1인 사용량
- 하루 25세션 × 세션당 1회 · 월 20일
- 호출당 토큰
- 입력 12K · 출력 2K
- 캐시 · 배치
- 적중률 10% · 배치 비중 100%
야간 배치로 대량 문서를 처리하는 워크로드. 배치 할인의 효과가 가장 큰 시나리오다. 좌석 20개는 결과를 소비하는 인원이며 처리량과 무관하므로 active_ratio는 1.0으로 둔다(배치는 사람 수가 아니라 문서 건수로 비용이 결정된다). sessions_per_user_per_day 25는 하루 처리 문서 건수를 세션으로 환산한 값으로, 월 20영업일 × 20명 × 25건 = 10,000건에 해당한다. 입력 12,000토큰은 장문 보고서·계약서를 가정했고, 문서마다 내용이 달라 캐시 효과는 0.1로 낮게 잡았다. 전량 배치 처리(batch_ratio 1.0)이므로 배치 미지원 모델에서는 할인이 사라진다는 점을 표에서 확인해야 한다.
코드 어시스턴트 엔지니어
- 좌석 · 실사용률
- 30명 · 90%
- 1인 사용량
- 하루 12세션 × 세션당 5회 · 월 20일
- 호출당 토큰
- 입력 8K · 출력 1K
- 캐시 · 배치
- 적중률 60% · 배치 비중 0%
개발팀의 코딩 보조. 좌석 구독 상품(Copilot·Claude Code·Cursor류)과 종량 API의 비교가 핵심인 시나리오다. active_ratio 0.9는 개발자가 편집기에 상시 통합된 도구를 실제로 매일 쓴다는 근거로 예외적으로 높게 잡은 값이며, 도입 대상이 자원자가 아니라 전체 개발팀이면 0.7 이하로 낮춰야 한다. 입력 8,000토큰은 열린 파일·주변 코드·에러 로그가 함께 들어가는 컨텍스트 크기이고, calls_per_session 5는 한 작업에서 반복 수정이 잦은 패턴을 반영한다. 캐시 적중률 0.6은 같은 파일 컨텍스트가 연속 호출에서 재사용되기 때문이다. 이 시나리오에서는 캐시 미지원 모델의 비용이 급등하므로 cache_unsupported 플래그를 반드시 확인할 것.
고객지원 자동응답 공통
- 좌석 · 실사용률
- 10명 · 100%
- 1인 사용량
- 하루 60세션 × 세션당 4회 · 월 30일
- 호출당 토큰
- 입력 3K · 출력 400
- 캐시 · 배치
- 적중률 50% · 배치 비중 0%
외부 고객 대응. 트래픽이 내부 인원이 아니라 문의 건수로 결정되는 것이 다른 시나리오와의 결정적 차이다. 좌석 10개는 구독 상품과 비교하기 위한 상담원 수이고 active_ratio는 1.0이다. sessions_per_user_per_day 60은 상담원 1인이 하루에 처리하는 문의 건수로, 실제로는 자동응답이 사람 없이도 동작한다. working_days_per_month를 30으로 둔 이유는 외부 고객 문의가 주말·공휴일에도 발생하기 때문이다(다른 시나리오의 20일과 다름에 주의). 입력 3,000토큰은 대화 이력이 누적된 상태를 가정했고, 캐시 적중률 0.5는 응대 정책·FAQ 컨텍스트가 모든 문의에 공통으로 붙는 몫이다.
전사 도입 경영·기획
- 좌석 · 실사용률
- 1,000명 · 35%
- 1인 사용량
- 하루 2세션 × 세션당 2회 · 월 20일
- 호출당 토큰
- 입력 2K · 출력 400
- 캐시 · 배치
- 적중률 20% · 배치 비중 0%
일반 직원 1,000명 전원에게 좌석을 지급하는 시나리오. 구독 대 API 비교의 대표 케이스이며, 이 프리셋의 목적은 미사용 좌석 비용을 드러내는 것이다. active_ratio 0.35는 전사 배포 시 실사용률을 낮게 잡아야 한다는 원칙에 따른 값으로, 구독료는 좌석 1,000개 전부에 부과되지만 API 비용은 350명분만 발생한다. 즉 구독료의 65%가 미사용 좌석에 지불된다. 일반 업무용 질의를 가정해 입력 1,500토큰·출력 400토큰으로 작게 잡았고, 사용량이 적은 만큼 API 쪽이 유리하게 나오기 쉬우므로 손익분기 해석 시 구독이 제공하는 관리·거버넌스 기능(SSO, 감사로그)의 가치는 이 숫자에 포함되지 않는다는 점을 함께 봐야 한다.
소규모 파일럿 경영·기획
- 좌석 · 실사용률
- 10명 · 80%
- 1인 사용량
- 하루 5세션 × 세션당 3회 · 월 20일
- 호출당 토큰
- 입력 3K · 출력 600
- 캐시 · 배치
- 적중률 30% · 배치 비중 0%
도입 검토 단계에서 최소 비용으로 효과를 검증하는 시나리오. 좌석 10개는 한 팀 규모이며, active_ratio 0.8은 파일럿 참여자가 자원자 중심이라 사용률이 높다는 근거에서 나온 값이다(전사 확대 시에는 company-wide의 0.35에 가까워진다고 보는 편이 안전하다). 입력 2,500토큰·출력 600토큰은 특화되지 않은 일반 업무 질의를 가정한 중간값이다. 이 시나리오의 월 비용은 대개 수십 달러 수준이라 모델 간 절대 금액 차이보다 1,000회 호출당 비용으로 효율을 비교하는 편이 판단에 유용하다.