실시간 음성 대화 앱을 만들고 있습니다. 사용자가 말하면 모델이 소리 내어 답하는 구조라, 원가는 통화 시간에 정비례합니다. 규모의 경제가 없습니다. 그래서 분당 원가 하나가 사업 전체를 결정합니다.
그 숫자를 실측했습니다. 분당 $0.1885. 애플 수수료를 빼면 순매출은 분당 $0.1416. 구독 세 종류가 전부 적자였습니다.
대응은 빨랐습니다. 구독에 포함된 분량을 1/3로 줄였습니다(60/120/300분 → 20/40/100분). 소모성 분 팩도 새로 붙였습니다. 서버와 앱을 함께 고쳐 배포했습니다.
그리고 다음 날, 그 원가가 틀렸다는 걸 알았습니다.
여러분의 가격표 뒤에도 이런 숫자가 하나 있을 겁니다. 그 값은 몇 건에서 나왔습니까?
표본이 2분이었습니다
원가를 다시 잰 건 다른 이유 때문이었습니다. 조직 사용량 API를 읽을 권한이 없어서, 그동안은 대시보드 숫자와 DB 기록을 맞춰 보는 방식이었습니다. 권한이 있는 키를 확보하고 서버 정본을 처음 봤습니다.
일자별로 갈라 보니 이렇게 나왔습니다.
- 08-22: 통화 122초, 비용 $0.41 → 분당 $0.20
- 08-25: 통화 1,052초, 비용 $4.28 → 분당 $0.25
- 08-24: 통화 1,300초, 비용 $1.11 → 분당 $0.05
같은 앱, 같은 모델인데 5배가 벌어집니다. 08-24가 싼 이유는 금방 찾았습니다. 그날은 결제 테스트를 46세션 돌린 날이라 대화 없이 시간만 흐른 세션이 분모를 부풀렸습니다. 알려진 함정이었고, 메모리에도 적혀 있었습니다.
문제는 반대쪽이었습니다. 08-22의 122초는 2분짜리 통화 두 건이었습니다.
짧은 통화는 원가가 비쌉니다
분 단위로 사용량을 뜯어보니 원인이 보였습니다. 08-25의 34분짜리 연속 대화에서, 입력 토큰 499,252개 중 373,632개가 캐시였습니다. 캐시 단가는 오디오 입력의 1/80입니다.
대화가 길어질수록 앞선 턴이 캐시에 얹히고, 분당 원가는 계속 떨어집니다. 반대로 2분짜리 통화는 캐시가 거의 0입니다. 세션을 여는 고정 비용(페르소나 지시문 전송)이 짧은 통화에 통째로 실립니다.
제가 잰 "실측 원가"는 가장 비싼 구간의 값이었습니다.
실사용에 가까운 표본으로 다시 계산하니 분당 약 $0.12였습니다. 현재 가격에서 분당 순매출은 $0.4246이니, 마진은 71%입니다. "전부 적자"가 아니라 건강한 구조였습니다.
당신이라면 어느 쪽을 믿겠습니까
여기서 갈립니다. 이미 가격을 고쳐서 나갔습니다. 되돌릴 것인가, 둘 것인가.
저는 두기로 했습니다. 분량 축소는 결과적으로 옳은 방향이었고(분당 소매가가 3배 올랐습니다), 되돌리면 이미 그 조건으로 산 사람들과 어긋납니다. 다만 왜 옳았는지에 대한 설명이 틀렸다는 건 기록해 뒀습니다. 다음에 이 숫자를 근거로 뭔가를 결정할 사람이 같은 착각을 하지 않도록요.
자가진단 세 가지
원가나 전환율 같은 단가를 근거로 결정을 내리기 전에, 이 세 가지를 확인해 보세요.
- 분모가 몇 건입니까? 두 건이면 그건 측정이 아니라 일화입니다.
- 그 표본이 사용자의 전형입니까? 개발자가 테스트로 만든 짧은 세션은 실사용과 원가 구조가 다릅니다.
- 비용이 규모에 따라 변합니까? 캐시·고정 오버헤드가 있으면 짧은 표본은 항상 비싸게 나옵니다.
솔직한 부분
이 글의 교훈이 "더 큰 표본을 쓰라"는 건 아닙니다. 그건 누구나 압니다. 진짜 문제는 제가 틀린 숫자로 이미 행동했다는 것입니다. 코드를 고치고, 서버를 배포하고, 앱을 새로 올린 뒤에 숫자가 틀렸다는 걸 알았습니다.
측정과 결정 사이에 하루만 두었어도 달랐을까요. 아마 아닐 겁니다. 다음 날에도 표본은 2분이었을 테니까요. 필요했던 건 시간이 아니라 "이 숫자가 몇 건에서 나왔나"를 묻는 습관이었습니다.
분모를 놓쳐 결론이 뒤집힌 이야기는 전에도 쓴 적이 있습니다 — 제 판정 기준은 게임을 죽이려던 게 아니었습니다 — 노출 1회를 죽이려 했습니다.
지금 여러분의 대시보드에서 가장 중요한 숫자 하나를 고르고, 그게 몇 건에서 나온 값인지 확인해 보세요. 저는 그걸 안 해서 하루를 썼습니다.