LLM에 돈을 흘리는 것을 멈추세요: Go용 Otellix 소개

발행: (2026년 3월 30일 AM 07:08 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

프로덕션 환경에서 대규모 언어 모델(LLM)을 다루는 것은 마법과 같습니다. 신혼 시기는 보통 한 달 정도 지속되는데, 그때가 바로 피할 수 없는 API 청구서가 도착하는 순간입니다.

만약 여러분이 실수로 깊게 중첩된 백그라운드 루프 안에 LLM 생성 호출을 넣어본 적이 있다면(거짓말하지 마세요, 우리 모두 해봤죠) 혹은 한 명의 무거운 사용자가 조직의 일일 예산을 모두 소진하는 것을 방지하고 싶다면, 그 고통을 잘 아실 겁니다.

현재 LLM 가시성 플랫폼은 자체 이벤트당 요금이 있는 무거운 SaaS 제품이거나, 예산 강제 집행 기능이 전혀 없습니다. 저는 비용이 제한된 Go 애플리케이션을 위해 무료이고 OpenTelemetry‑네이티브이며, 강력한 예산 제한에 초점을 맞춘 무언가가 필요했습니다.

그래서 저는 Otellix 를 만들었습니다.

Otellix란?

Otellix는 OpenTelemetry 위에 완전히 구축된 프로덕션 급 LLM 가시성 SDK로, Go용입니다. Anthropic, OpenAI, Gemini, Ollama의 공식 SDK를 래핑하여 코드베이스를 크게 변경하지 않고도 비용을 가로채고 추적할 수 있게 해줍니다.

통합 트레이싱 & 메트릭

모든 LLM 생성 호출은 통합된 OTel 스팬과 Prometheus 메트릭을 방출합니다. 지난 주에 사용자가 생성한 입력 토큰, 출력 토큰, 캐시된 토큰 수를 정확히 알고 싶나요? Otellix는 네 개의 완전히 다른 벤더의 응답 페이로드를 표준화하여 바로 제공해 줍니다.

제로 레이턴시 비용 엔진

LLM 제공업체마다 컨텍스트‑윈도우 캐싱에 따라 가격 모델이 크게 다릅니다. Otellix는 2026년 현재 USD 가격 모델에 맞춰 동기화된 인‑메모리 비용 엔진을 제공합니다. 요청 비용은 반환되는 CallResult 구조체에 즉시 포함되므로, 추상적인 토큰이 아니라 센트 단위로 다룰 수 있습니다.

res, err := otellix.Trace(ctx, cfg, provider, params)
fmt.Printf("That request cost $%.6f\n", res.CostUSD)

강력한 예산 가드레일

이것이 핵심 기능입니다. 사용자가 하루 $5의 LLM 할당량을 초과하면 어떻게 할까요?

복잡한 Redis 제한자를 직접 구현하는 대신, Otellix의 BudgetEnforcer 를 연결하면 됩니다. 이 엔포서는 세 가지 폴백 메커니즘을 제공합니다:

  • FallbackBlock – LLM 실행을 즉시 중단하고 벤더 API를 호출하는 대신 otellix.ErrBudgetExceeded 오류를 반환합니다.
  • FallbackNotify – 요청은 진행하되, 비동기 onLimitReached 콜백 웹훅을 트리거합니다(슬랙 알림에 최적).
  • FallbackDowngrade – 사용자가 claude-3-opus의 “프리미엄” 토큰을 소진하면, Otellix가 자동으로 요청을 가로채어 더 저렴한 제공자/모델(gemini-1.5-flash 혹은 로컬에 호스팅된 ollama 컨테이너 등)로 실행합니다.

코드 예시

기존 OpenAI 로직을 감싸는 것이 얼마나 쉬운지 보여드립니다:

store := otellix.NewInMemoryBudgetStore(map[string]float64{
    "user_123": 2.50, // Hard limit of $2.50
})
enforcer := otellix.NewBudgetEnforcer(store, otellix.FallbackBlock, nil)

cfg := otellix.NewConfig(
    otellix.WithBudgetEnforcer(enforcer),
)

// Your existing OpenAI client logic
p, _ := openai.NewClient("sk-...")

// Wrap the request in Otellix!
res, err := otellix.Trace(ctx, cfg, p, params)
if err != nil {
    log.Fatalf("LLM tracking failed: %v", err)
}

시작하기

Otellix는 완전 오픈 소스(MIT)이며 지금 바로 사용할 수 있습니다! 저장소에는 로컬 테스트를 위한 Prometheus와 Grafana 대시보드가 포함된 전체 docker-compose 환경도 포함되어 있습니다.

유용하다고 생각되시면 별(star)을 눌러 주세요:

👉 GitHub: oluwajubelo1/otellix

여러분이 Go 백엔드에서 난폭한 LLM 비용을 어떻게 관리하고 있는지 궁금합니다—아래 댓글로 알려 주세요!

0 조회
Back to Blog

관련 글

더 보기 »