본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 24. 21:00

SLA를 준수하면서 LLM 비용을 65% 절감한 방법

요약

SLA와 SLO를 준수하면서 LLM 추론 비용을 65% 절감한 아키텍처 최적화 사례를 다룹니다. 멀티 리전 페일오버 패턴과 모델 계층별(Flagship vs Economy) 전략적 활용을 통해 지연 시간을 유지하며 비용을 낮추는 방법을 설명합니다.

핵심 포인트

  • SLA/SLO(가용성 99.9%, p99 지연 시간 2.0초)를 최우선 기준으로 설정
  • 멀티 리전 페일오버 패턴을 통한 시스템 신뢰성 확보
  • 플래그십 모델과 이코노미 모델 간의 가격 차이를 활용한 비용 최적화
  • 출력 토큰 비용이 높은 작업에 적합한 모델 벤치마킹 및 교체

SLA(Service Level Agreement)를 위반하지 않고 어떻게 LLM 비용을 65% 절감했는지에 대한 이야기입니다.

CFO가 클라우드 청구서를 전달해 주었던 어느 월요일 아침을 여전히 기억합니다. LLM 항목이 전 분기 대비 4배나 증가했는데, 사용자 수는 두 배도 늘지 않았습니다. 분명히 무언가 잘못되었습니다. 그 후 6주 동안 저희는 추론 스택(inference stack)을 해체하고, 멀티 리전 페일오버(multi-region failover) 패턴을 중심으로 재구축하며, 무엇보다도 가장 중요한 작업인—p99 지연 시간(latency)이 내부 SLO(Service Level Objective)인 2.0초를 넘지 않도록 유지하면서 토큰당 지출을 절반 이상 절감하는 작업을 수행했습니다.

이 글은 제가 어떻게 그 목표를 달성했는지, 무엇을 다르게 했을 것인지, 그리고 실제로 중요했던 아키텍처 결정들에 대한 가감 없는 이야기입니다.

모든 것을 지배했던 SLA

단 하나의 가격 티어(pricing tier)를 건드리기 전에, 저는 항상 제가 깨뜨려서는 안 되는 SLO에 기준을 둡니다. 저희의 경우, 넘어서는 안 될 벽은 간단했습니다:

  • 30일 이동 평균 기준 추론 경로의 가용성 99.9%
  • 채팅 완성(chat completions)에 대한 p99 엔드 투 엔드(end-to-end) 지연 시간 2.0초 미만
  • p95 스트리밍 첫 토큰 생성 시간(TTFT, Time-To-First-Token) 800ms 미만
  • 세 개 리전(us-east, eu-west, ap-southeast) 전체에서 업무 시간 동안 하드 다운타임(hard downtime) 제로

그 외의 모든 것—모델 품질, 벤더 선정, 비용 최적화—은 협상의 여지가 있었습니다. 하지만 이 네 가지 숫자는 아니었습니다. 그래서 기존 LLM 제공업체의 대안을 평가하기 시작했을 때, 저는 단순히 가장 저렴한 API를 찾고 있었던 것이 아닙니다. 리전 장애(regional outage) 상황에서도 살아남으면서 여전히 800ms의 TTFT를 달성할 수 있는 가장 저렴한 API를 찾고 있었습니다.

이러한 프레임워크 설정은 매우 중요합니다. 만약 이 글을 읽고 있는 클라우드 아키텍트로서, 신뢰성 모델보다 청구서 최적화를 먼저 생각한다면, 여러분은 힘든 분기를 보내게 될 것입니다. 비용은 아키텍처의 상류(upstream)가 아니라 하류(downstream)에 존재합니다.

나를 멈춰 서서 바라보게 만든 카탈로그

저의 시선을 가장 먼저 사로잡은 숫자는 184였습니다. 이는 Global API의 단일 통합 엔드포인트(unified endpoint)를 통해 라우팅할 수 있는 서로 다른 모델의 개수였으며, 카탈로그 전체의 가격은 100만 토큰당 0.01달러에서 3.50달러까지 다양했습니다. 세 개의 별도 엔터프라이즈 계약을 협상하는 데 익숙한 사람에게 이러한 선택권은 매우 매력적이었습니다.

하지만 제 아키텍처 다이어그램(architecture diagram)을 실제로 변화시킨 것은 두 번째 숫자, 즉 플래그십 계층(flagship-tier) 모델과 이코노미 계층(economy-tier) 모델 사이의 가격 차이였습니다. 제가 본격적으로 벤치마킹(benchmarking)한 결과는 다음과 같습니다:

모델입력 (Input)출력 (Output)컨텍스트 (Context)
DeepSeek V4 Flash0.271.10128K
...

출력 토큰 100만 개당 10.00달러인 GPT-4o를 0.80달러인 GLM-4 Plus와 비교해 보십시오. 이는 단순히 2배 차이가 아니라, 실제 우리 청구서의 대부분을 차지하는 출력(output) 측면에서 12.5배의 차이가 나는 것입니다. 우리 제품은 요약, 코드 리뷰, 추론을 포함한 분류(classification with reasoning)와 같이 긴 형태의 구조화된 응답(long-form structured responses)을 많이 생성하며, 출력 토큰은 항상 인보이스(invoice)의 주된 부분을 차지합니다. 저는 솔직히 70%의 경우에는 플래그십 품질이 필요하지 않은 작업임에도 불구하고 플래그십 가격을 지불해 오고 있었습니다.

내가 실제로 구축한 것

제가 최종적으로 결정한 아키텍처는 측면에 서킷 브레이커(circuit breaker)가 장착된 계층형 라우팅 계층(tiered routing layer)이라고 부를 수 있는 구조입니다. 세 가지 계층으로 나뉩니다:

  1. 이코노미 계층 (Economy tier): 분류(classification), 추출(extraction), 포맷팅(formatting), 그리고 짧은 기대 출력과 함께 단일 짧은 프롬프트(short prompt)에 들어갈 수 있는 모든 작업을 위한 계층입니다. 0.20달러/0.80달러 가격의 GLM-4 Plus가 우리의 작업 대부분을 처리합니다.
  2. 미드 계층 (Mid tier): 채팅, RAG 검색 합성(RAG retrieval synthesis), 그리고 과도한 사고 사슬(chain-of-thought) 기반의 다단계 계획은 필요하지 않지만 적절한 추론(reasoning)이 필요한 모든 프롬프트를 위한 계층입니다. 0.27달러/1.10달러 가격의 DeepSeek V4 Flash가 여기서 핵심적인 역할을 수행합니다.
  3. 프리미엄 계층 (Premium tier): 품질이 타협 불가능한 소수의 호출을 위한 계층입니다. 코드 마이그레이션(code migration), 복잡한 다중 문서 분석, 그리고 어차피 인간의 검토로 라우팅되는 내부 "에스컬레이션(escalation)" 프롬프트 등이 여기에 해당합니다. 이곳에는 DeepSeek V4 Pro 또는 GPT-4o가 배치되며, 우리는 이러한 모든 호출을 하나하나 감사(audit)합니다.

라우터(router)는 통합 엔드포인트(unified endpoint) 앞에 위치하여, 가벼운 휴리스틱(heuristic, 프롬프트 길이, 특정 마커의 존재 여부, 고객 등급 등)을 기반으로 들어오는 요청을 분류하고 적절한 티어(tier)로 전송합니다. 결정적으로, 모든 티어는 동일한 베이스 URL(base URL)을 가리킵니다. 즉, 별도의 SDK, 별도의 인증 흐름(auth flows), 별도의 관측성 파이프라인(observability pipelines)이 필요하지 않습니다.

이를 구동하는 코드

다음은 저희 내부 플랫폼 팀을 위해 제가 작성한 Python 래퍼(wrapper)입니다. 이 코드는 의도적으로 지루하게 작성되었는데, 모든 요청의 핫 패스(hot path)에서 실행되는 인프라 코드라면 바로 이런 형태여야 하기 때문입니다.

import openai
import os
import time
...

이 코드에서 주목할 만한 두 가지 사항이 있습니다. 첫째, 폴백 경로(fallback path)는 모든 프로덕션 배포에서 타협할 수 없는 필수 사항입니다. 모델이 다운된다면(실제로 그런 일이 발생합니다), 사용자는 그 사실을 알아서는 안 됩니다. 둘째, time.perf_counter() 호출을 통해 호출당 지연 시간(latency)을 얻어 메트릭 파이프라인(metrics pipeline)으로 전송하며, 이를 통해 추측이 아닌 실시간으로 p99를 추적합니다.

아무도 말하지 않는 신뢰성에 관한 이야기

클라우드 아키텍트(cloud architect)로 일한다는 것은 이런 점이 있습니다. 에러율(error rate)이 0.2%라도 상승한다면, 65%의 비용 절감을 축하할 수 없습니다. 그래서 전환(cutover) 후 첫 일주일 동안, 저는 인정하고 싶지 않을 만큼 Grafana에 매달려 있었습니다. 결과는 다음과 같았습니다.

  • 모든 티어에 걸친 평균 지연 시간(average latency): 1.2s
  • 부하 상황에서의 미드 티어(mid-tier) 모델 처리량(throughput): 320 tokens/sec
  • p99 지연 시간: 1.87s, SLO(Service Level Objective)인 2.0s 이내로 안정적 유지
  • 첫 30일간의 가용성(Availability): 99.94%, 하한선인 99.9%를 약간 상회
  • 평가 스위트(eval suite) 전반의 품질 벤치마크 점수: 평균 84.6%

마지막 수치가 제가 가장 긴장했던 부분이었습니다. 모델 정확도(accuracy)가 퇴보하고 사용자가 이를 눈치채기 시작한다면 비용 최적화는 무의미하기 때문입니다. 저희는 내부 벤치마크에서 84.6%를 유지했으며, 이는 이전 제공업체를 사용할 때와 비교해 2점 차이 이내였습니다. 프리미엄 티어(premium tier)의 경우 가장 까다로운 호출을 위해 GPT-4o를 옵션으로 유지함으로써, 품질이 일정 수준 이하로 떨어지지 않도록 상한선(ceiling)을 확보했습니다.

실제로 비용을 절감해 준 실천 사항들

이 분야에서 5분 이상 일해 보셨다면, "베스트 프랙티스 (best practices)" 관련 글들이 대개 알맹이 없는 내용이라는 것을 알고 계실 겁니다. 하지만 저는 저희에게 진정으로 큰 변화를 가져다준 다섯 가지 요소를 짚어보고자 합니다. 이 요소들은 각각 개별적으로 상당한 비용 절감을 가능하게 했습니다.

  1. 공격적인 캐싱 (Caching). 공통 프롬프트에 대해 40%의 캐시 히트율 (cache hit rate)을 달성했으며, 이는 곧 비용을 아끼는 것과 같습니다. 30%를 넘어서는 수치는 엔지니어링 투자를 할 가치가 충분합니다.
  2. 200 토큰보다 긴 모든 응답에 스트리밍 (Streaming) 적용. 첫 번째 토큰까지의 시간 (Time-to-first-token)이 사용자가 체감하는 지연 시간 (latency)이 됩니다. 전체 응답에 3초가 걸리더라도, 첫 50개 토큰이 400ms 안에 도착한다면 아무도 신경 쓰지 않습니다.
  3. 저렴한 작업은 이코노미 티어 (economy tier)로 라우팅 (Routing). 이것만으로도 전체 볼륨의 약 3분의 1을 차지했던 분류/포맷팅 (classification/formatting) 작업 부하에서 약 50%의 비용 절감 효과를 얻었습니다.
  4. 단순한 느낌 (vibes)이 아닌 실제 평가 (eval) 파이프라인으로 품질 추적. 홀드아웃 세트 (held-out set)를 대상으로 주간 평가 (evals)를 자동화하여, 성능 저하 (regressions)를 7주가 아닌 7일 이내에 포착할 수 있도록 했습니다.
  5. 우아한 성능 저하 (graceful degradation) 구현. 속도 제한 (rate limits)에 걸리면 사용자에게 429 에러를 던지는 대신, 더 저렴한 티어로 단계를 낮춥니다. 응답 품질이 5% 정도 낮아질 수는 있지만, 사용자는 답변을 받을 수 있습니다.

과거의 나에게 해주고 싶은 말

청구서가 이메일함에 도착했던 그 월요일 아침으로 돌아갈 수 있다면, 저는 이렇게 말할 것입니다.

  • 이전 제공업체의 가격을 기준점 (baseline)으로 믿지 마세요. 최소 세 군데에서 견적을 받으세요.
  • 모든 아키텍처 (architectural) 결정은 비용보다 서비스 수준 목표 (SLO) 수치를 최우선으로 고정하세요.
  • 단 하나의 요청을 이전시키기 전에 라우팅 계층 (routing layer)부터 구축하세요. 사후 수정 (Retrofit)은 고통스럽습니다.
  • 제공업체의 가동 시간 (uptime)이 훌륭하다고 생각하더라도, 멀티 리전 페일오버 (Multi-region failover)는 선택이 아닌 필수입니다.
  • 첫 번째 사용자 불만이 접수된 후가 아니라, 첫날부터 자동화된 파이프라인으로 품질을 측정하세요.

통합 SDK (unified SDK)를 사용한 설정 자체는 10분도 채 걸리지 않았는데, 이는 의심스러울 정도로 빠를 정도였습니다. 하지만 그 주변의 아키텍처(architecture) — 라우팅 로직 (routing logic), 폴백 경로 (fallback paths), 관찰 가능성 (observability) — 를 구축하는 데는 6주간의 세심한 작업이 필요했습니다. SDK는 연결을 가능하게 하지만, 아키텍처는 서비스를 지속 가능하게 만듭니다.

현재 상황

8개월이 지난 지금, 우리는 추론 경로 (inference path)에서 99.96%의 가용성 (availability)을 유지하고 있으며, p99는 1.82초를 기록하고 있습니다. 또한, LLM 비용 항목은 이 모든 일을 시작하게 만든 월요일 아침의 청구서보다 61% 낮아졌습니다. 184개의 모델 카탈로그 (model catalog) 덕분에 하부 구조를 다시 설계할 필요 없이 분기별로 라우팅 결정을 재평가할 수 있습니다.

만약 여러분이 자신의 LLM 청구서를 바라보며 더 나은 방법이 있는지 고민하는 클라우드 아키텍트 (cloud architect)라면, 진심으로 Global API를 살펴보라고 권하고 싶습니다. 통합 엔드포인트 (unified endpoint)와 가격 차이 덕분에 마이그레이션 (migration) 과정이 예상보다 훨씬 깔끔했으며, 세 가지 티어 (tiers) 전체에 걸쳐 단일 베이스 URL (base URL)을 지정할 수 있다는 점이 관찰 가능성 (observability) 측면을 상당히 단순화해 주었습니다. 비슷한 상황에 처해 있다면 확인해 보세요. global-apis.com/v1 엔드포인트가 시작점이 될 것입니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0