나는 LLM API 청구서를 70 % 삭감했습니다 : 라우팅 + 캐싱에 대한 AirAi 실전 노트
0. 배경: 결제 문제가 어떻게 발생했는가
저는 몇 개의 사이드 프로젝트를 진행하고 있는데, 초기에는 공식적인 월간 구독 서비스($20/mo)를 구매하거나 국제 신용카드 결제가 거절될 때를 감수해야 했습니다. 월말에 계산을 해보니 두 가지 심각한 문제가 있었습니다:
요청의 80%가 요약, 분류, 포맷ting과 같은 간단한 작업이었는데, 가장 비싼 모델을 사용하는 것은 완전히 낭비였습니다;
구독 비용은 고정된 비용이었기 때문에, 호출 횟수가 적을 때는 손해를 보고, 호출 횟수가 많을 때는 모델이 부족했습니다.
그래서 저는 AirAi로 방향을 바꿨습니다: 자체적으로 API 키를 사용하고, 사용량에 따라 요금을 지불하며, 클라이언트를 AirAi의 OpenAI와 호환되는 인터페이스로 연결했습니다.
여기에도 재미있는 에피소드가 있어요. 저는 항상 제대로 된 국제 신용카드를 가지고 있지 않아서, 공식 결제 방법을 사용할 때마다 거절당했어요. 한동안은 가족의 카드를 빌려서 사용했는데, 그로 인해 신용 위험 평가가 발생해서 계정이 바로 차단되었죠. 2주 가까이 항의한 끝에야 해제되었습니다. 그 후로는 국제 카드에 의존하지 않는 결제 방법만을 찾기로 마음먹었습니다. 결국 찾은 이 웹 게이트웨이는 USDT만을 받아들였는데, 국제 카드가 없는 저에게는 오히려 사용하기 가장 쉬운 방법이었습니다. 코인을 충전하면 바로 사용할 수 있고, 월정액도 없으며, KYC(고객 신원 확인) 절차도 필요하지 않았어요. 가장 중요한 것은 가격이었어요. 제가 계산해보니, 가격이 공식 결제 방법의 약 10% 수준이었거든요. 바로 그 점이 저로 하여금 이 웹 게이트웨이를 계속 사용하게 된 진짜 이유였습니다.
1. 한 줄로 전환: 원하는 호환 가능한 게이트웨이로 전환하기
거의 모든 사용자 정의 엔드포인트를 지원하는 클라이언트(Claude Code, Cursor, Open WebUI, LibreChat, Cline 등)는 코드를 수정하지 않고도 한 줄의 환경 변수를 사용하여 게이트웨이를 전환할 수 있습니다. 아래의 두 변수를 자신의 게이트웨이로 설정하기만 하면 됩니다.
export OPENAI_BASE_URL="https://api.airai.cc/v1" export ANTHROPIC_BASE_URL="https://api.airai.cc/v1"
어떤 게이트웨이를 선택할지는 다른 문제이며, 이 글에서는 구현 방법에만 초점을 맞춥니다.
2. 코드 실전: 라우팅 + 캐싱
빛을 전환하는 것만으로는 충분하지 않습니다. 진정으로 돈을 절약하는 방법은 “올바른 모델이 올바른 작업을 수행하도록 하고 반복적인 요청을 캐싱하는 것”입니다. 다음은 제가 실제 생산 환경에서 사용하는 구조입니다(OpenAI SDK와 호환됨). base_url와 api_key는 모두 환경 변수에서 읽어오며, 코드에 고정되어 있지 않습니다:
import openai, hashlib, os
client = openai.OpenAI(
base_url=os.getenv("OPENAI_BASE_URL"),
api_key=os.getenv("OPENAI_API_KEY"),
)
# Routing: small model for light tasks, flagship only for complex reasoning
CHEAP = "gpt-5.6-luna" # classification / summarization / formatting
STRONG = "gpt-5.6-sol" # only called for complex reasoning
_cache: dict[str, str] = {} # swap for Redis in production
def ask(prompt: str) -> str:
model = STRONG if len(prompt) > 400 else CHEAP
key = hashlib.md5(prompt.encode()).hexdigest()
if key in _cache: # cache hit, 0 cost
return _cache[key]
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
)
answer = resp.choices[0].message.content
_cache[key] = answer
return answerCHEAP/STRONG당신의 예산과 원하는 결과에 맞게 조정하세요. 모델 이름은 사용하는 게이트웨이의 문서를 참고하여 정하시기 바랍니다. 오프라인 작업은 Batch 인터페이스를 사용하면 일반적으로 비용을 절반 이상 절약할 수 있습니다.
3. 비용 비교 (시안)
개조 전후의 비용 비교시안실제 수치는 청구서를 참고하시기 바랍니다:
프로젝트 | 공식 구독 / 직접 연결 | AirAi + 라우팅 캐싱 |
결제 방식 | 고정 월정액 / 공식 가격 | 사용량 기반 결제 |
라이트 모델 | 플래그십 (비효율적) | 소형 모델 (더 저렴함) |
요청 반복 | 전체 비용 재계산 | 캐시 적중률 0, 비용 없음 |
체감 비용 | 기준값의 100% | 약 10–30% (요청량에 따라 다름) |
4. 솔직한 평가 (진실을 말하자면)
모든 사람에게 더 절약되는 것은 아닙니다.: 월간 요청량이 매우 적을 때는 고정 구독이 더 경제적일 수 있습니다; 사용량이 많을 때만 사용량 기반 요금제가 유리합니다. 먼저 자신의 사용량을 계산해 보세요.
지연 및 안정성: 게이트웨이가 한 층 더 추가되면 지연이 조금 증가하며, 핵심 경로에서는 시간 초과와 성능 저하가 발생할 수 있습니다.
키 보안: 키는 환경 변수에 저장하고, 프론트엔드나 공개 저장소에 고정적으로 저장하지 마세요.
5. 요약
성 LLM 비용의 본질은 한마디로 이렇습니다: 저렴한 모델로 대부분의 작업을 처리하고, 비싼 모델은 필요할 때만 사용하며, 낭비되는 토큰을 줄이는 것입니다. “N개의 시스템과 연동”하는 것을 “한 줄의 코드로 수정”하는 것으로 바꾸는 것이죠.base_url"루팅과 캐싱은 무료로 사용할 수 있는 두 가지 도구입니다. 먼저 이것들을 활용해 보는 것이 좋겠습니다."
도움이 되었나요?