API Timeout 원인 진단 및 긴 LLM 생성을 위한 안전한 재시도 설정 가이드
LLM API 타임아웃 진단 및 해결 가이드: connect/read/pool 타임아웃 분리 설정, 긴 추론 생성을 위한 SSE 스트리밍 유지 및 안전한 재시도 구현.
OpenAI o3-mini나 Claude 3.7 Sonnet과 같은 최신 추론(Reasoning) 모델을 연동할 때 API Timeout(연결 또는 읽기 시간 초과) 오류는 매우 흔하게 발생하는 문제입니다. 복잡한 다단계 추론 과정에서는 첫 번째 토큰이 생성되기까지의 시간(TTFT)이나 전체 응답 출력이 30초에서 90초 이상 소요될 수 있어 기본 HTTP 클라이언트의 설정을 초과하게 됩니다.
긴 생성 출력을 안정적으로 처리하기 위해 엔지니어들은 BetterToken을 사용합니다. BetterToken은 중간 버퍼링 없는 최적화된 Server-Sent Events(SSE) 스트리밍을 제공합니다. 자세한 연결 규격과 엔드포인트 파라미터는 BetterToken API Reference에서 확인할 수 있습니다.
타임아웃 발생 지점: HTTP 요청 수명 주기의 4단계
LLM API 요청은 네 가지 독립적인 기술 단계로 구성되며, 각 단계에 맞는 타임아웃 설정이 필요합니다:
- Connect Timeout(연결 타임아웃): TCP 핸드셰이크 및 TLS 협상 완료 시간 (5~10초 권장).
- Write Timeout(전송 타임아웃): 10만 토큰 이상의 긴 프롬프트를 전송할 때 소요되는 시간.
- Read Timeout(읽기 타임아웃): 첫 번째 토큰(TTFT) 응답 대기 및 SSE 청크 간 대기 시간.
- Pool Timeout(풀 타임아웃): 동시 요청이 많을 때 클라이언트 소켓 풀에서 유휴 소켓을 획득하는 대기 시간.
타임아웃 진단 매트릭스
Python(HTTPX) 세부 타임아웃 구성
표준 라이브러리의 기본 타임아웃(10초)은 추론 모델 호출 시 거의 반드시 연결 중단을 유발합니다. 아래와 같이 견고한 클라이언트를 구성하세요:
SSE 스트림 안정화 및 안전한 재시도 전략
네트워크 순간 단절 시 중복 과금과 서버 과부하를 방지하기 위해 재시도는 세 가지 원칙을 따라야 합니다:
- 스트리밍 시작 후 전체 재시도 금지: 일부 토큰이 이미 클라이언트에 수신된 상태에서 전체 프롬프트를 재전송하면 중복 과금이 발생합니다.
- 지수 백오프와 Full Jitter 적용: 재시도 간격을 점진적이고 무작위로 분산시켜 재시도 폭풍(Thundering Herd)을 방지합니다.
- 멱등성 키 활용: 배치 작업 시 고유 작업 ID를 활용하여 중복 실행을 차단합니다.
최종 검증 체크리스트
- HTTP 응답 코드
200 OK확인. - 긴 출력 도중 SSE 스트림이 끊김 없이 전체 토큰을 수신 완료.
- 요청 완료 후 연결 풀 소켓이 정상 반환되는지 확인.
추가적인 연동 가이드는 BetterToken API Reference를 참고하세요.