모든 제공업체는 키를 하나씩 줍니다. 세 번째쯤 되면 키는 더 이상 편의 기능이 아니라 직접 구축하고 유지해야 하는 시스템이 됩니다. N개의 제공업체가 있고, 각각 고유한 base URL, 고유한 인증 헤더, 고유한 속도 제한 방식, 고유한 오류 코드, 고유한 청구 페이지를 가지고 있습니다. "내가 하드코딩한 모델"이 아니라 "사용 가능한 최선의 모델"로 요청을 라우팅하고 싶어지는 순간, 라우팅 문제가 생기고, 그것이 바로 게이트웨이가 해결하는 문제입니다.
문제는 API가 아니라 운영이다
원시 API 호출은 쉽습니다. 문제는 그 주변의 모든 것이 복리처럼 쌓인다는 점입니다:
•자격 증명 난립. 제공업체마다 키가 하나씩, 서로 다른 주기로 교체되고, 서로 다른 시크릿 관리자에 저장됩니다.
•속도 제한. 각 제공업체는 서로 다르게 스로틀링하고, 오류 응답도 일관성이 없어서 재시도 로직이 각각을 특별 처리해야 합니다.
•사용량 가시성. 모든 제공업체가 자체 대시보드를 가지고 있습니다. 전체 지출을 한곳에서 보여주는 곳이 없습니다.
•장애 조치. 제공업체 A가 다운되면 트래픽을 제공업체 B로 옮기려면 새 키와 새 엔드포인트로 재배포해야 합니다.
이 중 어느 것도 데모에서는 보이지 않습니다. 새벽 2시에 제공업체가 다운되고 재시도 큐가 밀리기 시작할 때 프로덕션에서 드러납니다.
게이트웨이란 실제로 무엇인가
게이트웨이는 애플리케이션과 모델 제공업체 사이에 위치합니다. 앱은 하나의 키로 하나의 엔드포인트와 통신합니다. 게이트웨이는 인증, 라우팅, 속도 제한, 사용량 집계, 폴백을 처리합니다. 코드 입장에서는 단일 LLM API와 똑같이 보입니다.
+------------------+
| Your app |
+--------+---------+
| one key, one base URL
v
+--------+---------+
| LLM gateway |
| auth / routing |
| rate limiting |
| usage metering |
+--+-----+----+----+
| | |
v v v
Provider A B C
(GPT-4o) (DeepSeek) (Qwen)중요한 설계 결정은 게이트웨이가 인바운드 측에서 OpenAI 호환 프로토콜을 사용한다는 점입니다. 즉, 기존 SDK 코드에 새 클라이언트 라이브러리가 필요하지 않습니다. base URL과 키만 바꾸면 평소처럼 chat.completions.create 호출을 계속 작성할 수 있습니다.
하나의 키, 하나의 엔드포인트, 여러 모델
클라이언트 측 통합 전체는 다음과 같습니다:
from openai import OpenAI
client = OpenAI(
base_url="https://api.token8341.com/v1",
api_key="sk-one-key-for-everything",
)
for model in ["gpt-4o", "claude-3-5-sonnet", "deepseek-chat", "qwen-max"]:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "Reply with the word 'ok'"}],
)
print(model, "->", resp.choices[0].message.content)같은 키가 카탈로그의 모든 모델을 승인합니다. 계정 네 개를 프로비저닝하거나 잔액 네 개를 추적할 필요가 없습니다. 하나의 사용량 기반 청구서를 지불하고, 사용량은 모델별로 분류되어 토큰이 실제로 어디에 쓰였는지 확인할 수 있습니다.
게이트웨이는 또한 라우팅을 코드 변경이 아닌 설정 결정으로 만들어 줍니다. 대량 트래픽 레인에는 저렴한 모델을, 어려운 레인에는 최전선 모델을 쓰고 싶으신가요? 한곳에서 매핑하면 됩니다:
ROUTES = {
"summarize": "deepseek-chat",
"reason": "qwen-max",
"frontier": "gpt-4o",
}그리고 폴백은 여러 제공업체 통합이 아니라 평범한 제어 흐름이 됩니다:
def call_with_fallback(prompt, primary, backup):
try:
return ask(primary, prompt)
except Exception:
return ask(backup, prompt)게이트웨이가 필요할 때와 필요하지 않을 때
게이트웨이는 필요하지 않다면 떠맡지 말아야 할 오버헤드입니다. 제공업체 하나와 모델 하나를 사용하고 장애 조치 요구 사항이 없다면 직접 키를 쓰는 것이 더 단순하고 그것이 올바른 선택입니다. 크리티컬 패스에 추가 홉과 추가 벤더를 넣는 데는 비용이 따릅니다.
게이트웨이는 다음 중 하나라도 해당할 때 제값을 합니다:
•두 개 이상의 모델을 사용하고 그 사이를 자유롭게 전환하고 싶습니다.
•제공업체가 다운되거나 속도 제한에 걸렸을 때 폴백이 필요합니다.
•단일 청구서와 모델별 지출을 볼 수 있는 단일 장소를 원합니다.
•재배포 없이 라이브 트래픽에서 모델 A/B 테스트를 하고 싶습니다.
이 중 하나라도 해당한다면 운영상의 절감이 추가 홉을 능가합니다. 잘 운영되는 게이트웨이의 실제 추가 지연 시간은 몇 밀리초로, 모델 추론 시간 옆에서는 사라질 만큼 작습니다.
관리형인가, 자체 호스팅인가?
의도적으로 결정할 가치가 있는 한 가지는 자체 게이트웨이를 운영할지 아니면 임대할지입니다. LiteLLM과 one-api 같은 자체 호스팅 라우터는 훌륭하며 라우팅 테이블, 키, 로깅을 완전히 제어할 수 있습니다. 하지만 동시에 운영, 모니터링, 패치, 고가용성 유지가 필요한 서비스를 떠안게 되는데, 이는 바로 여러분이 벗어나려던 운영 부담입니다.
관리형 게이트웨이는 이 거래를 뒤집습니다. 내부에 대한 통제를 포기하는 대신 그것을 운영하지 않아도 되는 이점을 얻습니다. 누군가가 엔드포인트를 계속 살려두고, 업스트림 키를 교체하며, 제공업체 장애를 흡수합니다. 소규모 팀에게는 대개 이것이 올바른 거래입니다. 플랫폼 그룹을 둔 대규모 팀이라면 감사 가능성 하나만으로도 자체 호스팅이 가치 있을 수 있습니다. 어느 쪽이든 인바운드 계약을 OpenAI 호환으로 유지하면 선택은 되돌릴 수 있습니다.
SiCore TokenWorks는 이 아이디어를 중심으로 만들어졌습니다: 하나의 API 키, https://api.token8341.com/v1의 하나의 OpenAI 호환 엔드포인트, 그리고 GPT-4o, Claude, Gemini, DeepSeek, Qwen, ERNIE, Doubao, Spark, Pangu에 걸친 카탈로그를 사용량 기반 청구와 모델별 사용량 분류와 함께 제공합니다.