effidevFlutter · Cloudflare 엣지 · 클라우드 비용 최적화
한국어

Cloudflare AI Gateway로 LLM API 비용·장애 제어

Cloudflare AI Gateway로 LLM API 비용과 장애를 제어하기

OpenAI, Anthropic, Google Gemini API를 프로덕션에 붙이면 처음엔 괜찮다. 그런데 사용자가 늘면서 예상치 못한 세 가지 문제가 동시에 터진다. 첫째, 같은 질문에 대해 같은 응답을 매번 API로 받아오면서 토큰 비용이 선형으로 증가한다. 둘째, 특정 프로바이더에 장애가 나면 앱 전체가 먹통이 된다. 셋째, 누군가가 반복 호출을 하거나 프롬프트 인젝션을 시도해도 트래픽을 제어할 수단이 없다.

이 세 문제를 각각 Redis 캐시, 폴백 로직, 레이트 리밋 미들웨어로 따로 구현할 수도 있지만, Cloudflare AI Gateway는 이 전부를 에지 프록시 한 장으로 해결한다. 코드 한 줄 안 바꾸고 AI Gateway URL로 엔드포인트만 바꾸면, 캐싱·레이트 리밋·자동 폴백·비용 상한·로깅·DLP 가드레일이 즉시 적용된다.

이 글은 AI Gateway의 아키텍처부터 프로바이더별 연결 설정, 캐싱으로 실제 비용을 얼마나 줄일 수 있는지 계산, 폴백 라우팅 전략, 2026년에 새로 추가된 Spend Limits 기능, 그리고 프로덕션 운영 시 로그 한도·보안 설정까지 실제로 배포에 옮길 수 있는 수준으로 다룬다.

핵심 요약

  • AI Gateway는 모든 Cloudflare 플랜에서 무료로 사용할 수 있다. 추가 과금은 Unified Billing의 5% 수수료와 Workers 기반 인프라 비용뿐이다.
  • 에지 캐싱으로 동일 프롬프트 반복 호출 시 레이턴시 최대 90% 단축 + 토큰 비용 0을 달성할 수 있다. 고객 지원 챗봇, FAQ 시나리오에서 효과가 극대화된다.
  • 폴백 프로바이더를 배열로 설정하면, 1순위 모델 장애 시 자동으로 2순위 모델로 라우팅된다. 응답 헤더 cf-aig-step으로 어떤 프로바이더가 처리했는지 확인할 수 있다.
  • 2026년 신규 기능 Spend Limits로 일/월 단위 달러 기반 예산 상한을 설정해 예기치 않은 비용 폭증을 방지할 수 있다.
  • 로그 보존 한도는 Free 월 10만 건, Workers Paid 월 100만 건이다. 초과 시 새 로그가 저장되지 않으므로, 필요한 로그는 별도로 내보내야 한다.

AI Gateway 아키텍처: 코드 변경 없이 에지에서 LLM 트래픽 제어

AI Gateway는 본질적으로 리버스 프록시다. 앱과 AI 프로바이더 사이에 위치해서, 모든 요청을 가로채고(intercept) 캐싱·라우팅·로깅·보안 정책을 적용한 뒤 프로바이더로 전달한다. Cloudflare AI Gateway 공식 문서에 따르면, 지원 프로바이더는 20개 이상이다.

지원 프로바이더 (일부) 연결 방식
OpenAI (GPT-4o, o3 등) Universal Endpoint 또는 전용 URL
Anthropic (Claude Sonnet 5 등) Universal Endpoint
Google (Gemini 2.5 등) Universal Endpoint
Workers AI (Llama, Whisper 등) 네이티브 바인딩
Azure OpenAI Universal Endpoint
AWS Bedrock Universal Endpoint
Hugging Face Universal Endpoint
Groq, Together AI, Perplexity Universal Endpoint

연결은 기존 API 호출의 base URL만 교체하면 된다. 코드 로직은 일절 바꿀 필요가 없다.

// 변경 전: OpenAI 직접 호출
const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: "https://api.openai.com/v1",
});

// 변경 후: AI Gateway 경유 — 이것만 바꾸면 캐싱·로깅·폴백 즉시 적용
const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: "https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/openai",
});

주의할 점: {account_id}{gateway_id}Cloudflare 대시보드에서 AI Gateway를 생성하면 자동으로 발급된다. 게이트웨이는 계정당 여러 개 만들 수 있으므로, 환경별(dev/staging/prod) 또는 앱별로 분리하는 것을 권장한다.

에지 캐싱: 동일 프롬프트 반복 호출 비용을 0으로

AI Gateway 캐싱의 원리는 단순하다. 같은 프롬프트 + 같은 모델 + 같은 파라미터 조합이면, 프로바이더에 요청을 보내지 않고 에지에서 캐시된 응답을 즉시 반환한다. 프로바이더 API 호출이 없으므로 토큰 비용이 0이고, 에지에서 반환하므로 레이턴시가 최대 90% 단축된다.

캐싱이 효과적인 시나리오

시나리오 캐시 적중률 기대치 비용 절감 효과
고객 지원 챗봇 (FAQ 반복 질문) 60~80% 월 토큰 비용 60~80% 절감
코드 어시스턴트 (동일 보일러플레이트 생성) 30~50% 월 토큰 비용 30~50% 절감
번역 API (같은 문장 반복 번역) 70~90% 월 토큰 비용 70~90% 절감
자유 대화형 챗봇 (매번 다른 질문) 5~15% 효과 제한적

캐싱 설정

대시보드에서 게이트웨이를 선택하고 Settings > Cache > Enable 후 TTL(Time-to-Live)을 설정한다. 코드에서도 요청 헤더로 제어할 수 있다.

// 요청별 캐시 TTL 제어 (초 단위)
const response = await fetch(
  `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai/chat/completions`,
  {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${apiKey}`,
      "Content-Type": "application/json",
      "cf-aig-cache-ttl": "3600",  // 1시간 캐시
    },
    body: JSON.stringify({
      model: "gpt-4o",
      messages: [{ role: "user", content: "Cloudflare Workers의 CPU 시간 제한은?" }],
    }),
  }
);

// 캐시 적중 여부는 응답 헤더로 확인
const cacheStatus = response.headers.get("cf-aig-cache-status");
// "HIT" = 캐시에서 반환 (비용 0, 레이턴시 ~10ms)
// "MISS" = 프로바이더에서 새로 받아옴

주의할 점: 캐싱은 비스트리밍 응답에서만 동작한다. stream: true로 설정한 스트리밍 요청은 캐싱되지 않는다. 스트리밍이 필요하면서도 캐싱 혜택을 받고 싶다면, 자주 반복되는 질문은 비스트리밍으로, 사용자 대화는 스트리밍으로 분리하는 전략이 필요하다.

자동 폴백: 프로바이더 장애 시 서비스 연속성 확보

2024년 OpenAI의 대규모 장애, 2025년 Anthropic API의 간헐적 다운타임을 기억한다면, 단일 프로바이더 의존의 위험성은 설명이 필요 없다. AI Gateway의 폴백 기능은 프로바이더 배열을 정의해서, 1순위가 실패하면 자동으로 2순위로 넘어가게 한다.

// 폴백 프로바이더 설정 (Universal Endpoint)
const response = await fetch(
  `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}`,
  {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify([
      {
        // 1순위: Anthropic Claude Sonnet 5
        provider: "anthropic",
        endpoint: "messages",
        headers: { "x-api-key": ANTHROPIC_KEY, "anthropic-version": "2023-06-01" },
        query: {
          model: "claude-sonnet-5-20260514",
          max_tokens: 1024,
          messages: [{ role: "user", content: userMessage }],
        },
      },
      {
        // 2순위: OpenAI GPT-4o (폴백)
        provider: "openai",
        endpoint: "chat/completions",
        headers: { "Authorization": `Bearer ${OPENAI_KEY}` },
        query: {
          model: "gpt-4o",
          messages: [{ role: "user", content: userMessage }],
        },
      },
      {
        // 3순위: Workers AI (자체 인프라, 비용 최소)
        provider: "workers-ai",
        endpoint: "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
        headers: { "Authorization": `Bearer ${CF_API_TOKEN}` },
        query: {
          messages: [{ role: "user", content: userMessage }],
        },
      },
    ]),
  }
);

// 어떤 프로바이더가 처리했는지 확인
const step = response.headers.get("cf-aig-step");
// "0" = Anthropic 성공, "1" = OpenAI 폴백, "2" = Workers AI 폴백

이 구조의 핵심 장점은 앱 코드에 if-else 분기가 없다는 것이다. 프로바이더 우선순위와 폴백 로직이 게이트웨이 레벨에서 처리되므로, 앱은 항상 같은 엔드포인트에 요청하고 같은 형식의 응답을 받는다.

Spend Limits: 달러 기반 예산 상한으로 비용 폭증 방지

2026년에 추가된 Spend Limits 기능은 AI Gateway의 가장 실용적인 신기능이다. 기존의 레이트 리밋은 요청 수 기준이었지만, Spend Limits는 실제 달러 비용 기준으로 상한을 건다.

설정 항목 예시 값 설명
Total Spend Limit $500/일 게이트웨이 전체 일일 비용 상한
Per-User Spend Limit $10/일 사용자별 일일 비용 상한
Action on Limit Block / Fallback 상한 도달 시 요청 차단 또는 저렴한 모델로 폴백
Reset Period 일/월 비용 카운터 초기화 주기

실전 시나리오: SaaS 앱에서 사용자별 $10/일 상한을 설정하면, 특정 사용자가 API를 과도하게 호출해도 전체 비용이 통제된다. 상한 도달 시 요청을 차단하는 대신 더 저렴한 모델(예: Workers AI의 Llama)로 자동 폴백하도록 설정하면, 사용자 경험은 유지하면서 비용만 제한할 수 있다.

레이트 리밋과 Spend Limits는 동시에 적용할 수 있다. 예를 들어 “분당 60 요청 + 일 $50 비용 상한”처럼 이중 안전장치를 거는 것이 프로덕션 권장 패턴이다.

비용 구조와 로그 한도: 프로덕션 운영 체크리스트

AI Gateway 자체는 무료이지만, 운영 시 알아야 할 비용과 한도가 있다. 2026년 8월 기준 Cloudflare Workers 요금 페이지AI Gateway 문서의 수치다.

항목 Free Workers Paid ($5/월)
AI Gateway 사용료 $0 $0
로그 보존 한도 월 10만 건 월 100만 건
Unified Billing 수수료 5% 5%
Workers 요청 일 10만 건 무료 100만 건당 $0.30
Workers CPU 시간 일 10ms 무료 100만 CPU-ms당 $0.02

운영 시 주의할 점 세 가지:

  1. 로그 한도를 반드시 확인한다. Free 플랜에서 월 10만 건을 초과하면 새 로그가 저장되지 않는다. 분석이 필요한 로그는 Workers에서 실시간으로 외부 저장소(R2, BigQuery 등)로 내보내는 파이프라인을 구축해야 한다. Cloudflare Queues를 활용한 비동기 파이프라인 가이드에서 이 패턴을 상세히 다뤘다.

  2. Unified Billing vs BYOK(Bring Your Own Key). Unified Billing을 쓰면 Cloudflare가 프로바이더 API 키를 관리하고 5% 수수료를 부과한다. 직접 키를 관리하면(BYOK) 수수료가 없지만, 키 로테이션·보안 관리를 직접 해야 한다. 소규모 팀은 BYOK, 엔터프라이즈는 Unified Billing이 일반적이다.

  3. DLP 가드레일을 켠다. AI Gateway에 내장된 DLP(Data Loss Prevention) 기능은 프롬프트와 응답에서 민감 정보(개인정보, 소스 코드)를 자동 탐지한다. Llama Guard 3 8B 기반 안전 가드레일도 함께 활성화하면, 프롬프트 인젝션 공격이나 유해 콘텐츠 생성을 게이트웨이 레벨에서 차단할 수 있다.

기존 인프라와의 비교: AI Gateway vs 직접 구현 vs LiteLLM

AI Gateway가 유일한 선택지는 아니다. 직접 프록시를 구현하거나, 오픈소스 LLM 프록시(LiteLLM 등)를 사용하는 옵션도 있다.

비교 항목 Cloudflare AI Gateway 직접 구현 (Node.js + Redis) LiteLLM (오픈소스)
설치·설정 URL 변경 1줄 서버 + Redis + 미들웨어 Docker 컨테이너 배포
캐싱 에지 캐시 내장 Redis 캐시 직접 구현 Redis/DB 연동
폴백 라우팅 배열 선언만으로 자동 if-else 또는 retry 로직 설정 파일로 지원
비용 제어 Spend Limits (달러 기반) 직접 계산·차단 로직 토큰 카운팅 기반
로깅·분석 대시보드 내장 ELK/Grafana 직접 구축 내장 대시보드 (제한적)
글로벌 레이턴시 에지 300+ PoP 서버 위치 의존 서버 위치 의존
벤더 종속 높음 (Cloudflare 전용) 없음 없음
비용 무료 (~Workers 비용) 서버 + Redis 비용 서버 비용

이미 Cloudflare 생태계를 쓰고 있다면 AI Gateway가 가장 빠르고 저렴한 선택이다. 멀티 클라우드 전략이 필수이거나 특수한 커스터마이징이 필요하면 LiteLLM을, 완전한 자유도가 필요하면 직접 구현을 검토한다. Cloudflare Workers vs AWS Lambda 비용 비교 가이드에서 인프라 비용 관점의 상세 비교를 다뤘다.

자주 묻는 질문

AI Gateway를 쓰면 레이턴시가 추가되나?

최소한으로 추가된다. AI Gateway는 Cloudflare의 글로벌 에지에서 동작하므로, 추가 레이턴시는 대부분 1~5ms 수준이다. 캐시 적중 시에는 오히려 프로바이더 직접 호출보다 레이턴시가 크게 줄어든다 (프로바이더 왕복 시간이 사라지므로).

스트리밍 응답도 지원하나?

지원한다. AI Gateway는 스트리밍 응답을 그대로 패스스루(pass-through)한다. 다만 스트리밍 응답은 캐싱되지 않는다. 로깅과 레이트 리밋은 스트리밍에서도 정상 동작한다.

Workers AI와 외부 프로바이더를 하나의 게이트웨이에서 관리할 수 있나?

가능하다. AI Gateway의 핵심 가치가 바로 20개 이상의 프로바이더를 하나의 게이트웨이로 통합하는 것이다. Workers AI(자체 모델)와 OpenAI/Anthropic(외부 API)를 같은 게이트웨이에서 관리하면서, 폴백 순서도 자유롭게 설정할 수 있다.

Cloudflare Free 플랜에서 프로덕션으로 쓸 수 있나?

가능하지만 제한이 있다. Free 플랜의 로그 한도가 월 10만 건이므로, 하루 3,300건 이상의 AI 요청이 발생하면 로그가 유실된다. 프로덕션에서는 Workers Paid 플랜($5/월, 로그 100만 건)으로 시작하는 것을 권장한다.

기존 OpenAI SDK를 그대로 쓸 수 있나?

그대로 쓸 수 있다. OpenAI SDK의 baseURL 파라미터만 AI Gateway URL로 교체하면 된다. SDK의 다른 기능(스트리밍, 함수 호출, 비전 등)은 모두 정상 동작한다. Anthropic, Google Gemini SDK도 동일하게 base URL 교체만으로 연결된다.