Google 생성형 AI SDK 클라이언트 라이브러리에는 시간 초과, 네트워크 문제, 비율 제한 (HTTP 429 및 5xx 상태 코드)과 같은 일시적인 오류를 처리하기 위한 지수 백오프를 사용하는 자동 재시도 로직이 포함되어 있습니다. 예를 들어 Python SDK는 초기 지연 시간 약 1초, 최대 지연 시간 60초로 일시적인 오류를 최대 4번 자동으로 재시도합니다. SDK에서 기본적으로 이 작업을 처리하지만 특정 워크로드에 더 적합하도록 이 동작을 구성할 수 있습니다.
재시도 시점 결정
커스텀 재시도 전략을 구현하기 전에 엔드포인트 선택, 결제 모델, 워크로드가 요구사항에 미치는 영향을 고려하세요.
적절한 엔드포인트 선택
- 전역 엔드포인트: 가용성에 권장됩니다. 전역 엔드포인트는 트래픽을 동적으로 라우팅하므로 지역 용량 문제로 인해 발생하는 클라이언트 측 재시도의 필요성을 줄일 수 있습니다.
- 지역 엔드포인트: 특정 위치로 제한됩니다. 리전에 과부하가 걸리면 즉시 재시도에 실패할 수 있습니다. 대신 장애 조치 전략을 고려하세요.
결제 모델 조정
- 표준 사용한 만큼만 지불: 공유 리소스를 사용합니다. 지수 백오프를 사용하여 트래픽 급증으로 인해 발생하는 일시적인 비율 제한 오류 (429)를 처리합니다.
- **유연한 사용한 만큼만 지불**: 우선순위가 낮고 처리 속도가 느린 경우에 적합합니다. 적극적으로 재시도하지 마세요. 대신 요청 시간 제한을 늘려 (예: 30분) 시스템이 작업을 완료할 시간을 제공합니다.
- **우선순위 사용한 만큼만 지불**: 프로비저닝된 처리량의 사전 약정 없이 지연 시간에 민감하고 안정성이 높은 워크로드에 적합합니다. 이 등급에서 429 오류가 발생하면 지수 백오프로 재시도하되 할당량을 초과하지 않도록 하세요.
- 프로비저닝된 처리량: 전용 용량을 사용합니다. 잦은 오류는 일반적으로 구매한 용량을 초과했음을 나타내므로 재시도를 추가해도 근본적인 문제가 해결되지 않을 수 있습니다.
지연 시간 허용치 정의
- 실시간 (예: 채팅): 빠르게 실패합니다. 사용자가 응답을 무기한 기다리지 않도록 재시도 횟수를 제한합니다.
- 일괄 추론: 개별 항목을 재시도하지 마세요. 일괄 서비스는 높은 완료율을 달성하기 위해 작업 내에서 개별 요청에 대한 재시도를 자동으로 처리합니다. 사용자는 작업을 한 번만 성공적으로 제출 하면 됩니다. 자세한 내용은 일괄 예측을 참고하세요.
재시도 가능한 오류 식별
요청을 재시도해도 안전한지 여부를 결정하는 두 가지 주요 요소는 다음과 같습니다.
응답
수신된 오류 코드 또는 응답은 문제가 일시적인지 영구적인지 나타냅니다. 일시적인 문제와 관련된 응답은 일반적으로 재시도 가능합니다. 예를 들면 다음과 같습니다.
- HTTP 코드:
408(요청 시간 초과),429(요청이 너무 많음),5xx(서버 오류) - 네트워크 문제: 소켓 시간 초과 및 TCP 연결 해제
자세한 내용은 API 오류를 참고하세요.
멱등성
멱등성 요청은 리소스의 최종 상태를 변경하지 않고 반복적으로 실행할 수 있습니다. 멱등성을 결정할 때는 다음 사항을 고려하세요.
- 항상 멱등성: 목록 작업 (리소스를 수정하지 않음), get 요청, 토큰 수 요청, 임베딩 요청
- 멱등성이 없음: 새 조정 모델 만들기 등 성공할 때마다 고유한 리소스를 만드는 작업
- 생성형 AI 미묘한 차이: 생성형 모델의 확률적 특성으로 인해
generateContent는 엄밀히 말하면 멱등성이 없지만 서버 측 상태를 수정하지 않으므로 일시적인 오류에 대해 재시도해도 일반적으로 안전합니다.
재시도 구성
Google 생성형 AI SDK를 사용하면 클라이언트 매개변수 또는 HttpRetryOptions를 통해 재시도 동작을 구성할 수 있습니다.
주요 매개변수
initial_delay: 첫 번째 재시도 전의 초기 지연 시간(초)(기본값:1.0)attempts: 최대 재시도 횟수 (기본값:5)exp_base: 지수 백오프 계산의 기준 (기본값:2)max_delay: 재시도 간의 최대 지연 시간(초)(기본값:60)jitter: 백오프에 임의 지연 시간을 추가하는 요소 (기본값:1)http_status_codes: 재시도를 트리거하는 상태 코드 목록
예시
클라이언트 수준 구성
클라이언트를 초기화할 때 전역으로 옵션을 설정할 수 있습니다.
Python
from google import genai
from google.genai import types
client = genai.Client(
vertexai=True,
project=PROJECT_ID,
location="global",
http_options=types.HttpOptions(
retry_options=types.HttpRetryOptions(
initial_delay=1.0,
attempts=5,
http_status_codes=[408, 429, 500, 502, 503, 504],
),
timeout=120 * 1000,
),
)
자바
import com.google.genai.Client;
import com.google.genai.types.HttpOptions;
import com.google.genai.types.HttpRetryOptions;
HttpOptions httpOptions = HttpOptions.builder()
.retryOptions(
HttpRetryOptions.builder()
.attempts(5)
.httpStatusCodes(408, 429, 500, 502, 503, 504).build())
.build();
Client client = Client.builder()
.project(PROJECT_ID)
.location("global")
.vertexAI(true)
.httpOptions(httpOptions)
.build();
요청 수준 구성
config 매개변수를 사용하여 단일 요청의 설정을 재정의할 수도 있습니다.
Python
from google import genai
from google.genai import types
client = genai.Client(vertexai=True, project=PROJECT_ID, location="global")
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents="Tell me a joke about a rabbit.",
config=types.GenerateContentConfig(
http_options=types.HttpOptions(
retry_options=types.HttpRetryOptions(
initial_delay=1.0,
attempts=10,
http_status_codes=[408, 429, 500, 502, 503, 504],
),
timeout=120 * 1000,
)
)
)
유연한 사용한 만큼만 지불
유연한 사용한 만큼만 지불의 경우 처리 속도가 느리고 투명한 재시도로 인해 기본 시간 제한은 10분입니다. 사용자는 성공률을 높이기 위해 이 값을 30분으로 늘릴 수 있습니다.
Python
from google import genai
from google.genai import types
client = genai.Client(
vertexai=True, project=PROJECT_ID, location='global',
http_options=types.HttpOptions(
api_version="v1",
headers={
"X-Vertex-AI-LLM-Request-Type": "shared",
"X-Vertex-AI-LLM-Shared-Request-Type": "flex" # Use Flex PayGo
},
timeout = 30 * 60 * 1000 # Increase to 30 minutes
)
)
권장사항 및 안티패턴
기본 재시도 메커니즘을 사용하든, 맞춤설정하든, 자체 재시도 로직을 구현하든 다음 권장사항을 따르고 일반적인 안티패턴을 피하세요.
권장사항
- 지수 백오프 사용: 첫 번째 재시도 전에 잠시 기다린 후 (예: 1초) 지연 시간을 지수적으로 늘립니다 (예: 2초, 4초, 8초).
- 지터 추가: 지연 시간에 임의의 "지터"를 추가하면 모든 클라이언트가 정확히 동시에 재시도하는 것을 방지할 수 있습니다.
- 특정 오류에 대한 재시도: 일시적인 오류 (
429,408,5xx)에 대해서만 재시도합니다. - 최대 재시도 횟수 설정: 무한 루프를 방지하기 위해 최대 재시도 횟수를 정의합니다.
- 모니터링 및 로깅: 재시도 횟수, 오류 유형, 응답 시간에 관한 세부정보를 로깅하여 전략을 디버그합니다.
재시도 안티패턴
- 백오프 없이 재시도: 즉시 재시도하면 연쇄 오류가 발생하고 서비스에 과부하가 걸릴 수 있습니다.
- 재시도할 수 없는 오류 재시도: 클라이언트 오류 (
4xx429/408이외의)는 잘못된 API 키 또는 잘못된 구문과 같은 문제를 나타내므로 재시도하지 마세요. - 멱등성이 없는 작업을 무조건 재시도: 멱등성이 없는 작업을 반복적으로 실행하면 리소스 중복과 같은 부작용이 발생할 수 있습니다.
- 재시도 한도 무시: 무기한 재시도하면 리소스가 소진될 수 있습니다. 항상 최대 시도 횟수를 설정하세요.
다음 단계
- Colab에서 재시도 옵션을 구성합니다.
- API 오류에 대해 자세히 알아보세요.
- 할당량 및 시스템 한도에 대해 알아봅니다.
- 배포 및 엔드포인트에 대해 알아봅니다.