⚙️
🌱
💻
🚀
Skip to content

"안녕" 한마디에 최고급 모델이 돌고 있었습니다 — LLM 비용 라우팅

"안녕" 한마디에 최고급 모델이 돌고 있었습니다 — LLM 비용 라우팅




TL;DR

  • 증상: AI 집사의 모든 응답에 최상위 모델을 고정해두니, 일상 잡담에도 가장 비싼 모델이 호출됨
  • 원인: “좋은 모델 = 항상 좋다”는 단일 기준. 질문 난이도와 모델 등급을 매칭하지 않음
  • 해결: 질문을 trivial / normal / deep 세 단계로 분류해 모델 티어를 라우팅
  • 효과: normal(일상) 쿼리당 약 40% 비용 절감, 전체 API 비용 약 20~28% 절감 예상
  • 한계: 무조건 싼 모델로 내리면 품질이 깨지는 구간이 있다(감정·민감 대화). 분류 기준에 예외를 넣어야 함

토큰 내역을 보다가 멈칫했습니다

저는 Jarvis라는 AI 집사를 혼자 만들어서 24시간 돌립니다. 처음엔 단순하게 생각했어요. 기왕이면 제일 똑똑한 모델로 답하게 하자. 그래서 모든 응답을 최상위 모델(Opus급)에 고정해뒀습니다.

한동안 잘 썼습니다. 그러다 어느 날 토큰 사용 내역을 들여다보다 멈칫했어요. “오늘 일정 뭐 있어?”, “안녕”, “응 고마워” 같은 한 줄짜리에도 가장 비싼 모델이 풀로 돌고 있었습니다. 이런 건 훨씬 가벼운 모델로도 충분한데 말이죠.

식당에서 물 한 잔 따르는 데 수석 셰프를 부르는 격이었어요. 물은 누가 따라도 물입니다.


“좋은 모델은 항상 좋다”는 함정

제가 깔고 있던 가정은 “비싼 모델 = 항상 더 나은 선택”이었습니다. 틀린 말은 아니에요. 같은 질문이면 더 좋은 모델이 더 잘 답합니다. 문제는 모든 질문이 같은 난이도가 아니라는 것이죠.

질문을 실제로 들여다보니 세 종류로 갈렸습니다.

  • 사소한 것: “응”, “고마워”, “지금 몇 시야” — 누가 답해도 똑같음
  • 보통: “오늘 일정 정리해줘”, “이거 어떻게 생각해” — 무난한 모델로 충분
  • 어려운 것: 코드 리뷰, 아키텍처 설계, 장애 원인 분석 — 여기서만 최상위 모델이 값을 함

최상위 모델의 진짜 가치는 세 번째 칸에서 나옵니다. 첫 번째, 두 번째 칸에 최상위 모델을 쓰는 건 품질은 거의 안 오르는데 비용만 몇 배로 내는 거예요. “좋은 모델은 항상 좋다”는 프레이밍이 이 차이를 가려버렸습니다.


질문을 분류해서 모델을 갈아 끼웠습니다

해결은 질문을 받자마자 난이도로 분류하고, 그에 맞는 모델 티어로 보내는 거였습니다. 라우팅 규칙은 이렇게 잡았어요.

text
deep    → 최상위 모델 유지 (품질 보장)
normal  → 중간 모델로 합리적 다운 (비용 최적화)
trivial → 가장 가벼운 모델 (비용 절감)

분류 기준은 무겁지 않게 만들었습니다.

  • deep: 코드 블록이 있거나, 리뷰·설계·아키텍처·트레이드오프·디버그·최적화·장애·성능 같은 키워드가 잡히는 질문
  • trivial: 20자 미만이면서 yes/no·숫자·상태 요약 같은 짧은 패턴
  • normal: 나머지 전부

핵심은 deep만 비싼 모델을 유지하고, 나머지는 과감히 내린다는 거예요. 어려운 질문에서 품질을 깎는 건 절대 안 되니까, 거기만 안 건드리고 나머지에서 아끼는 식입니다.

비용 차이를 따져보면 이렇습니다. 일상(normal) 응답 하나를 최상위 모델 대신 중간 모델로 처리하면 출력 비용이 대략 60% 수준으로 떨어집니다. 응답당 약 40% 절감이에요. 제 사용 패턴을 보니 전체 대화의 절반 이상이 normal·trivial이었습니다. 그래서 전체 API 비용으로는 약 20~28% 절감이 예상됐습니다.

숫자만 보면 별거 아닌 것 같죠. 응답 하나에 몇십 원 차이입니다. 그런데 24시간 돌아가는 봇이라 이게 쌓입니다. 매일 커피값 하나가 그냥 새던 게, 한 잔이 반 잔으로 줄어든 셈이에요. 한 달이면 무시 못 합니다.


싸게 내렸다가 한 번 데였습니다

여기까지면 깔끔한 성공담인데, 사실 중간에 한 번 크게 데였습니다.

“normal은 무조건 중간 모델로 내린다”를 너무 곧이곧대로 적용했더니, 감정적인 대화에서 품질이 뚝 떨어졌어요. 힘든 일을 털어놓는 메시지에까지 기계적으로 싼 모델이 배정됐고, 답변이 영혼 없이 건조해졌습니다. 비용은 아꼈는데 집사로서는 빵점이었죠.

그래서 규칙에 예외를 넣었습니다. 길이나 키워드로는 “보통”으로 분류되더라도, 감정·민감한 맥락은 품질을 지켜야 하는 구간으로 빼뒀어요.

데이고 나서 안 건데, 절감률만 보고 달리면 아껴서는 안 될 곳까지 아끼게 됩니다. “어디까지 깎아도 되나”의 선을 같이 정해두지 않으면, 비용 그래프 내려가는 거 보면서 흐뭇해하다가 정작 써야 할 자리에서 봇이 무성의해지는 걸 한참 뒤에야 알게 돼요. 저는 사용자가 저 혼자라 며칠 만에 알아챘지, 실제 서비스였으면 더 늦게 걸렸을 겁니다.


시스템 점검 체크리스트

LLM을 서비스에 붙여 쓰고 있다면 점검해보세요.

  • 모든 요청에 같은(최상위) 모델을 쓰고 있진 않은가?
  • 들어오는 질문이 난이도별로 어떻게 분포하는지 측정해봤는가?
  • 쉬운 질문을 더 싼 모델로 내릴 여지가 있는가?
  • 싼 모델로 내렸을 때 품질이 깨지는 구간(감정·민감 대화 등)을 예외로 뒀는가?
  • 모델별·태스크별 비용을 추적하는 수단이 있는가? (안 보이면 최적화도 못 한다)

마무리

제일 똑똑한 모델을 모든 자리에 박아둔 건, 처음엔 “타협 안 한다”는 멋진 결정처럼 보였습니다. 알고 보니 타협을 안 한 게 아니라 그냥 생각을 안 한 거였어요. “안녕”에 Opus를 부르는 게 멋질 리가 없잖아요.

백엔드를 9년 했으면 DB 사양도 트래픽 보고 정하고 캐시도 패턴 보고 거는데, 정작 LLM은 한 줄로 “다 최상위” 박아두고 잘했다고 생각했습니다. 새로운 도구가 오니까 옛날에 다 알던 습관을 까먹더라고요.

그래도 한 번 데이고 나니 분류기에 예외 넣는 감각이 생겼습니다. 다음에 새 모델 티어가 또 나와도 이번엔 처음부터 난이도부터 나눠놓고 시작할 것 같아요. 비용은 줄었고, 감정 대화 품질도 지켰으니 저한테는 남는 장사였습니다.





참고 :

Anthropic Docs - Pricing
Anthropic Docs - Choosing a model




읽어주셔서 감사합니다.🖐


Ramsbaby
Written byRamsbaby
이 블로그는 직접 개발/운영하는 블로그이므로 당신을 불쾌하게 만드는 불필요한 광고가 없습니다.

#My Github#소개 페이지#Blog OpenSource Github#Blog OpenSource Demo Site