피드로 돌아가기
Dev.toBackend
원문 읽기
FastAPI와 SSE 도입을 통한 AI 스트리밍 지연 시간 제거 및 동시성 최적화
How I Messed Up AI Streaming (And How You Can Avoid It)
AI 요약
Context
Flask 기반의 동기식 REST API 구조로 인한 AI 응답 대기 시간 증가 및 타임아웃 발생. 단순 버퍼링 방식의 스트리밍 시도와 SSE 도입 초기 단계에서 Backpressure 제어 실패로 인한 메모리 급증 및 BrokenPipeError 발생.
Technical Solution
- FastAPI의 Native Async 지원을 활용한 비동기 스트리밍 구조로의 전환
- httpx.AsyncClient를 통한 AI API와의 Non-blocking I/O 연결 및 토큰 실시간 포워딩
- asyncio.Queue 기반의 소규모 윈도우 버퍼링을 통한 Backpressure 제어 및 메모리 관리
- StreamingResponse와 text/event-stream 설정을 통한 클라이언트 단의 점진적 데이터 렌더링
- Semaphore 도입을 통한 동시 AI API 호출 수 제한으로 Rate Limiting 문제 방지
- 에러 발생 시 특수 에러 토큰 송신 방식을 통한 클라이언트 중심의 예외 처리 전략 수립
실천 포인트
- AI 응답 시간이 2초를 초과하는 경우 SSE 기반 스트리밍 도입 검토 - Python 환경에서 다수의 스트리밍 연결 처리 시 uvloop 기반의 FastAPI/Uvicorn 조합 사용 - 네트워크 불안정성을 고려한 클라이언트 단의 Reconnection 및 Last-token ID 기반 재개 로직 구현 - 서버 부하 분산 및 확장성을 위해 Redis Pub/Sub을 활용한 이벤트 기반 아키텍처로의 분리 고려 - 로컬 테스트 외에 tc 도구 등을 활용한 패킷 손실 및 지연 환경에서의 스트림 안정성 검증