코드 한 줄도 바꾸지 않고 AI 앱 비용을 52% 절감한 방법

발행: (2026년 1월 7일 오후 02:33 GMT+9)
12 min read
원문: Dev.to

Source: Dev.to

The Problem: Zero Visibility Into What Was Actually Expensive

  • Stack: Next.js 프론트엔드 → Node 백엔드 → 직접 OpenAI chat/completions 호출.
  • Pain point: 전체 OpenAI 청구액과 요청 수는 확인할 수 있었지만 어떤 기능이 비용을 유발했는지 전혀 알 수 없었습니다.
    • 이메일 요약?
    • 제안‑응답 생성?
    • 모든 메시지에 대한 감정 분석?

개별 기능별 비용 데이터가 없으면 최적화 우선순위를 정할 수 없었습니다.

내가 처음 시도한 방법 (실패한 경우)

시도수행 내용결과
1. 수동 로깅모든 LLM 호출마다 로깅을 추가하여 토큰 사용량을 추적했습니다.출력 토큰을 놓쳤고, 스트리밍 응답은 끝까지 토큰 수를 표시하지 않아 → 신뢰할 수 없는 데이터.
2. 저렴한 모델“간단한” 작업을 GPT‑4에서 GPT‑3.5‑Turbo로 전환했습니다.약 15 % 절감 효과만 있었고, 품질이 눈에 띄게 떨어져 사용자가 불만을 제기했습니다.
3. 프롬프트 최적화프롬프트를 짧게 하고, 예시를 제거하며, 시스템 메시지를 축소했습니다.약 10 % 토큰 감소를 달성했지만, 모델이 지시를 오해하는 버그가 발생했습니다. 엔지니어링 노력 대비 가치가 없었습니다.

그때 나는 Bifrost를 발견했다

LLM 관측 도구를 찾고 있었고 Bifrost가 “LLM 게이트웨이”로 설명되는 것을 계속 보았습니다. 제 필요는 비용 가시성뿐이라 과도하다고 생각했지만, 설정이 매우 간단해 보여서 시도해 보았습니다.

한 줄 코드 변경

Before

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY
});

After

const openai = new OpenAI({
  baseURL: "http://localhost:8080/openai",
  apiKey: "bifrost-key"
});

Bifrost는 이제 내 앱과 OpenAI 사이에 위치하며, 나머지는 그대로 유지됩니다.


첫 주에 배운 것

Bifrost의 대시보드는 비용을 엔드포인트당, 사용자당, 모델당 표시합니다. 최종적으로 확인한 데이터는 충격적이었습니다:

  • 이메일 요약 = 전체 비용의 61 % – 모든 수신 이메일에 대해 실행되었으며, 한 문장 질의에도 GPT‑4가 과도하게 사용되었습니다.
  • 한 고객이 월 청구액의 18 %를 차지 – 해당 고객이 API를 과도하게 호출했으며, 나는 속도 제한을 적용하지 않았습니다.
  • 감성 분석은 쓸모 없고 비용이 많이 듦 – 점수가 전혀 사용되지 않았습니다. 이 기능을 제거하면 ≈ $800/mo를 절감할 수 있었습니다.

내가 한 변경 사항 (그리고 결과)

  1. 이메일 요약을 GPT‑3.5‑Turbo로 전환

    • 100 단어 이하 이메일에만 적용; 긴 이메일은 GPT‑4를 유지.
    • 이 기능으로 비용이 42 % 감소했으며 품질 저하가 없었습니다.
  2. 고객별 속도 제한 추가

    • Bifrost는 가상 키당 속도 제한을 제공합니다.
    • tiered 키(무료, 유료, 엔터프라이즈)를 만들었습니다.
    • 예산의 18 %를 차지하던 “무료‑tier” 고객을 하루 100 요청으로 제한했으며, 그들은 유료 플랜으로 업그레이드했습니다.
  3. 시맨틱 캐싱 활성화

    • Bifrost는 벡터 유사성을 기반으로 요청을 캐시하므로, 표현이 달라도 의미가 같은 쿼리는 캐시 히트합니다.
    • 예시 캐시 히트:
      • “비밀번호를 어떻게 초기화하나요?”
      • “비밀번호를 잊어버렸어요, 어떻게 해야 하나요?”
      • “로그인 안 돼요, 비밀번호 재설정이 필요해요”
    • ≈ 47 % 캐시 히트율을 달성해 거의 절반에 해당하는 LLM 호출을 없앴습니다.
  4. 비용 알림 설정

    • 키당 예산 한도와 월 예산의 80 %에 도달하면 알림을 보냅니다.
    • 이제 비용 급증이 있으면 몇 시간 안에 경고를 받습니다.

60일 후 결과

기간LLM 비용
Month 1 (pre‑Bifrost)$6,200
Month 2 (post‑changes)$2,950

전체 감소: ≈ 52 % 동일한 기능과 품질을 유지하면서, 단 한 줄의 엔드포인트 변경만으로.

절감 내역

출처월간 예상 절감액
의미 기반 캐싱$1,800
더 스마트한 모델 선택$900
남용 사용 제한$400
쓸모 없는 기능 제거 (감정)$800

예상치 못한 부가 혜택

  • Automatic Failover – Bifrost는 여러 공급자를 라우팅할 수 있습니다. 저는 Anthropic(Claude)을 백업으로 추가했는데, 지난달 OpenAI가 4시간 동안 중단되었을 때 트래픽이 자동으로 Claude로 전환되어 사용자에게 전혀 영향을 주지 않았습니다.
  • Unified Observability – 모든 LLM 트래픽(향후 추가될 공급자 포함)이 이제 하나의 대시보드에서 확인 가능해져 향후 확장 결정을 간소화했습니다.

TL;DR

간단한 “게이트웨이” 레이어(Bifrost)를 도입함으로써 다음을 실현했습니다:

  1. 낭비되는 기능을 식별.
  2. 모델 수준 비용 최적화 적용.
  3. 고객별 한도 적용.
  4. 의미 기반 캐싱 활용.

결과: 월 $3.2 k의 LLM 비용 절감, 마진 개선, 신뢰성 향상—모두 코드 한 줄만 변경하면 됩니다.

New – 대시보드를 확인했을 때 트래픽 전환을 확인했습니다.

Bifrost를 도입하기 전이라면, 해당 중단은 4시간 동안 제품이 완전히 다운되는 상황을 의미했을 것입니다.

더 나은 디버깅

Bifrost의 요청 로그는 모든 호출에 대해 전체 프롬프트, 응답, 토큰 수 및 지연 시간을 표시합니다. 사용자가 문제를 보고하면, 해당 대화를 검색하여 LLM이 정확히 어떤 입력을 받고 어떤 출력을 반환했는지 확인할 수 있습니다.

이전에는 애플리케이션 로그를 grep해서 올바르게 로그를 남겼는지 확인하려고 했던 설정보다 훨씬 좋습니다.


벤더 종속성 없음

Bifrost가 공급자를 추상화하기 때문에 코드를 변경하지 않고도 다양한 모델을 테스트할 수 있습니다. 저는 트래픽의 **10 %**를 Claude로 라우팅하여 품질을 비교하는 실험을 진행했습니다. OpenAI 가격이 변동되면 코드베이스가 아니라 설정 파일에서 공급자를 전환할 수 있습니다.


내가 다르게 할 일

만약 다시 시작한다면, 6개월이 아니라 첫날에 Bifrost를 배포하겠습니다.

  • 가시성만으로도 충분히 가치가 있습니다.
  • 아직 비용 최적화를 하지 않더라도, 돈이 어디에 쓰이는지 아는 것이 더 나은 제품 결정을 내리는 데 도움이 됩니다.

또한 즉시 의미적 캐싱을 활성화하겠습니다. 현재 보고 있는 47 % 캐시 적중률은 처음 6개월 동안 중복 요청으로 ≈ $3,000을 낭비했다는 의미입니다.


기술 설정 (궁금한 분들을 위해)

  • 인프라 – Bifrost를 t3.small EC2 인스턴스에 자체 호스팅 ($15 / 월).
  • 로드월 15 000 요청을 문제 없이 처리합니다.
  • 메모리 – 약 120 MB.
  • 시맨틱 캐싱 – 벡터 저장소로 Weaviate를 사용 (무료 자체 호스팅 버전).

LLM 게이트웨이의 전체 인프라 비용: $15 / 월.

비용 절감 효과는 첫 주에 이미 회수되었습니다.

이것이 비용 최적화만을 위한 것인가?

아니요. 비용 이야기가 눈길을 끌었지만, Bifrost는 내 LLM 인프라 레이어가 되었습니다. 그것은 다음을 처리합니다:

기능설명
라우팅대부분의 요청은 OpenAI, 긴 컨텍스트는 Claude 사용
캐싱의미 유사도
속도 제한고객별 티어
페일오버Claude로 자동 백업
가시성요청 로그, 비용 추적, 지연 시간
거버넌스예산 한도, 사용 알림

애플리케이션 코드에 복잡성을 추가하지 않고도 모두 처리됩니다. 백엔드는 여전히 openai.chat.completions.create()만 호출하고 나머지는 투명하게 이루어집니다.


핵심 요약

제품을 바꾸거나 품질을 저하시키지 않고, 최적화에 몇 주를 들이지도 않으면서 AI 비용을 절반으로 줄였습니다.

핵심은 실제로 비용이 많이 드는 부분을 가시화하고, 추측이 아니라 목표를 정해 변경하는 것이었습니다.

프로덕션에서 LLM 기반 기능을 운영하면서 엔드포인트별 비용 추적이 없다면, 눈을 가리고 날아다니는 겁니다. Bifrost는 불필요한 비용을 줄이는 데 필요한 데이터를 제공했습니다.


설정

  • GitHub:
  • Docs:

로컬에서 실행하는 데 약 10 분 정도 걸립니다.

LLM으로 무언가를 구축하는 모든 분들께: 필요하기 전에 가시성을 추가하세요. 청구서가 도착했을 때 미래의 여러분이 감사할 것입니다.

Back to Blog

관련 글

더 보기 »