← All guides

Claude API 502 bad_gateway: 원인과 해결법 (2026)

Claude API 502 bad_gateway 해결: Upstream gateway 오류 · exponential backoff 재시도 권장

Claude API 502 bad_gateway: 원인과 해결법 (2026)

Claude API 502 bad_gateway는 Anthropic의 upstream proxy가 백엔드와 통신 실패 시 (Bedrock에서 흔함)에 발생합니다. Upstream gateway 오류이며, exponential backoff 재시도가 효과적해야 합니다. 이 글은 5가지 흔한 원인과 Python/TypeScript 코드 예시를 다룹니다.

전반적인 Claude API 에러 처리 패턴은 Claude API Error Handling 가이드를 참고하세요.


무엇을 의미하는가?

502 HTTP 상태 코드는 Anthropic의 upstream proxy가 백엔드와 통신 실패 시 (Bedrock에서 흔함)을 의미합니다. Anthropic API의 에러 응답 본문에는 error.type"bad_gateway"로 명시되며, error.message에 구체적 사유가 옵니다.

응답 예시:

{
  "type": "error",
  "error": {
    "type": "bad_gateway",
    "message": "..."
  }
}

흔한 원인 5가지

  1. Bedrock proxy → Anthropic upstream 연결 일시 끊김
  2. Vertex AI 사용 시 GCP backend 일시 장애
  3. 긴 streaming 세션 중 connection drop
  4. Cloudflare/CDN 레벨 일시 장애

해결 코드 (Python)

# Treat 502 same as 5xx — retry with backoff
import time, anthropic

def retry_502(fn, max_retries=5):
    for attempt in range(max_retries):
        try:
            return fn()
        except anthropic.APIError as e:
            if e.status_code != 502 or attempt == max_retries - 1:
                raise
            time.sleep([3, 10, 30, 60, 120][attempt])

해결 코드 (TypeScript)

async function retry502<T>(fn: () => Promise<T>, max = 5): Promise<T> {
  const waits = [3, 10, 30, 60, 120];
  for (let i = 0; i < max; i++) {
    try { return await fn(); }
    catch (e: any) {
      if (e.status !== 502 || i === max - 1) throw e;
      await new Promise((r) => setTimeout(r, waits[i] * 1000));
    }
  }
  throw new Error("max retries");
}

재시도 전략

이 에러는 재시도 가능합니다. Exponential backoff 권장 시퀀스:

attempt 1 → wait 3s
attempt 2 → wait 10s
attempt 3 → wait 30s
attempt 4 → wait 60s
attempt 5 → wait 120s (final)

응답 헤더의 retry-after가 있으면 그 값을 우선 사용하세요.


비용 영향

재시도 시 매번 input 토큰이 다시 청구됩니다. 재시도 횟수 × 입력 토큰 = 추가 비용. Prompt caching을 적용하면 재시도 비용을 90%까지 절감할 수 있습니다.

자세한 비용 절감 패턴은 Claude API Cost and Prompt Caching Break-Even 또는 무료 비용 계산기를 참고하세요.


관련 에러


자주 묻는 질문

502 에러가 떴을 때 비용이 청구되나요?

처리되지 않은 요청은 청구되지 않습니다. 단, 재시도 후 성공한 요청은 정상 청구됩니다.

502와 다른 에러의 차이는?

502는 일시적/서버 측 이슈로 재시도가 효과적입니다. 반면 4xx 클라이언트 에러 (400/401/403/404)는 요청 자체에 문제가 있어 재시도해도 동일한 결과가 나옵니다.

Bedrock/Vertex에서도 같은 에러 코드인가요?

네, Anthropic의 error.type 명명 규칙은 모든 deployment (Direct API, AWS Bedrock, GCP Vertex AI)에서 동일합니다. 다만 HTTP 상태 코드는 platform 별로 wrapping되어 다를 수 있습니다 (예: Bedrock은 502을 ValidationException으로 wrap).


다음 단계

에러 처리 패턴 30개 + Pydantic 검증 코드Claude API Cost Optimization 마스터클래스 ($59)에 retry 미들웨어, 비용 가드레일, 에러 알림 패턴 12편 포함.

Tools and references