gpt-4o 모델 교체, 진짜 병목은 원가가 아니라 분당 토큰 한도였다
대화 1건 14원이 아까워 모델을 재봤더니, 120회 중 18회가 분당 한도로 실패하고 있었다
운영 중인 서비스에서 챗봇 원가가 슬슬 눈에 걸리는 시점이 온다. 대화 1건에 14원. 며칠 전에 토큰 사용량 표를 만들어 두고 보다가, 새로 나온 모델들이 더 싸 보여서 갈아탈지 재보기로 했다. 쓰던 건 gpt-4o였다.
2026-08-05 밤이었다.
프롬프트를 새로 만들지 않은 이유
비교 방식을 먼저 정했다. 모델별로 프롬프트를 따로 만들어 던지면 안 된다 — 답이 갈렸을 때 그게 모델 차이인지 프롬프트 차이인지 구분이 안 된다.
그래서 실제 채팅방이 타는 경로를 그대로 태우고 모델만 갈아끼우는 개발 전용 통로를 만들었다.
1차로 질문 10개. 지어낸 말은 세 모델 다 0건이었다. 그런데 10개로 판단하기엔 얇아서 40개로 늘렸다. 40문항 × 3모델 = 120회.
유형을 갈라서 던진 게 중요했다. 자료에 있는 사실 / 자료에 없는 것 / 틀린 전제("이 작품 수채화 맞죠?" — 유화다) / 개방형 / 같은 질문 3번(답이 얼마나 흔들리나) / 외국어.
120회 중 18회가 실패했다
에러를 열어 보니 「분당 토큰 한도 초과」였다.
쓰던 모델 한도가 분당 30,000 토큰인데, 우리 프롬프트가 한 번에 6,450 토큰을 쓴다. 나눠보면 분당 4~5명. 여섯 번째 사람이 질문하면 답이 아예 안 나간다.
원가는 조금 더 내는 문제지만 이건 서비스가 멈추는 문제다. 새 모델은 같은 계정에서 분당 500,000 — 17배였다.
이 숫자는 응답 헤더에 그냥 들어 있다. 재보기 전까지 안 봤다. 나도 원가표를 만들면서 이 항목은 넣지 않았다.
「나중에 나온 모델이 왜 더 싸냐」
새 모델이 −72%로 나왔다. 그런데 여기서 걸렸다. 나중에 나온 모델이 왜 더 싸지.
확인해 보니 전제가 반쯤 틀렸다.
- 새 세대에도 등급이 셋 있고, 맨 위 등급은 옛 모델보다 3배 비싸다
- 내가 고른 중간 등급은 출력 단가가 오히려 20% 비싸다
그런데 총원가는 −72%다. 이유는 캐시 할인율이었다. 우리 프롬프트는 앞부분이 매번 같아서 입력의 94~98%가 캐시에 맞는다. 원가를 정하는 건 정가가 아니라 캐시 단가인데, 거기서 6.25배 벌어져 있었다.
「나중 모델이라 싸다」가 아니라 「우리가 캐시를 잘 맞히는 구조라 그 할인율 차이가 그대로 원가 차이가 됐다」가 맞다.
캐시를 못 맞히는 서비스였다면 오히려 조금 비쌌을 것이다.
유일한 망설임이 검증에서 뒤집혔다
새 모델은 답을 보수적으로 하게 조이는 손잡이를 못 쓴다. 값이 고정이다. 우리는 그걸 낮춰 두고 있었으니 그걸 잃는 게 걱정이었다.
같은 질문을 3번씩 던져 답 길이 편차를 재봤다.
옛 모델 (보수적으로 조여 둠) 538 / 436 / 392자 → 편차 146자
새 모델 (고정값) 256 / 278 / 271자 → 편차 22자
조여 둔 쪽이 더 들쭉날쭉했다.
내용도 그랬다. 「이 작품 투자 가치 있나요?」에 옛 모델은 근거 없이 "주목받고 있습니다" 를 붙이고 투자 얘기를 이어갔다. 새 모델은 "단정하기 어렵다" 로 끊었다. 「어느 학교 나왔다던데 맞나요?」에는 옛 모델이 자료에 답이 있는데도 "등록되어 있지 않아요" 로 시작했다.
안 재고 겁냈으면 더 나쁜 쪽에 그대로 남았다.
상수 한 줄이 아니었다
모델 이름만 바꾸면 끝일 줄 알았는데 400 에러를 세 번 맞았다.
- 출력 상한 옵션 이름이 다르다
- 온도 값이 고정이라 지정하면 거절당한다
- 도구 호출을 쓰려면 옵션을 하나 더 내려야 한다
특히 세 번째는 지금 화면에서 꺼져 있는 기능이 타는 경로였다. 그대로 뒀으면 그 기능을 켜는 날 터졌을 것이고, 그날은 왜 터지는지 한참 헤맸을 것이다.
바꾼 것
- 모델 교체. 대화 1건 13.7원 → 3.8원, 동시 처리 4~5명 → 77명, 응답 속도는 같다
- 파라미터 분기를 함수 하나에 모았다. 호출 지점이 둘이었는데 한쪽만 고쳐 두면 평소엔 멀쩡하다가 그 경로를 처음 쓰는 날 터진다
- 전역 규칙 파일에 두 절을 추가했다 — 「모델을 고를 때 원가보다 분당 한도를 먼저 본다」 「모델 교체는 이름 한 줄이 아니다」
- 비교 도구를 지우지 않고 남겼다. 단가와 한도는 계속 바뀌니 다시 잴 일이 온다. 개발 환경에서만 열리고, 실행하면서 만든 대화는 스스로 지운다 — 안 그러면 그게 실제 이용 통계에 섞인다
「비싸다」에 대한 첫 반응이 「싼 걸로 바꾸자」였는데, 재고 나서 드러난 병목은 원가가 아니라 동시 접속 한도였다. 원가표를 아무리 들여다봐도 안 보이는 항목이었다.