피드로 돌아가기
Dev.toBackend
원문 읽기
SSE와 ReadableStream 도입으로 LLM 응답 대기 시간 30초 해결
Struggling with Slow AI Responses: Building a Streaming Chat UI with SSE
AI 요약
Context
Vector Database 기반 내부 문서 어시스턴트 구축 중 LLM의 긴 응답 시간으로 인해 최대 30초 이상의 응답 지연 발생. 기존 Request-Response 구조에서는 사용자에게 빈 화면이 노출되어 서비스 이탈 및 장애 오인 가능성 증대.
Technical Solution
- Polling 방식의 과도한 HTTP 요청(메시지당 약 30회)과 UI 끊김 현상을 제거하기 위해 실시간 스트리밍 구조로 전환
- WebSocket의 양방향 통신 오버헤드와 Load Balancer의 Idle Timeout으로 인한 연결 단절 문제를 해결하고자 단방향 전송에 최적화된 Server-Sent Events(SSE) 채택
- FastAPI의 StreamingResponse를 활용하여 LLM 생성 토큰을
text/event-stream형식으로 즉시 전송하는 Backend 파이프라인 설계 - EventSource API의 GET 제약을 극복하기 위해
fetch와ReadableStream을 조합하여 POST 요청 기반의 토큰 수신 로직 구현 - 수신된 청크 데이터를
TextDecoder로 복호화하고data:접두사 기반의 파싱 로직을 통해 UI에 실시간 반영
실천 포인트
- 실시간 단방향 스트리밍 필요 시 WebSocket보다 SSE 우선 검토 - EventSource API의 GET 제약 발생 시 fetch + ReadableStream 조합으로 POST 인터페이스 구현 - 인프라 계층(Load Balancer, Proxy)의 Idle Timeout 설정값과 SSE 연결 유지 시간 동기화 확인 - LLM 제공자의 SSE 호환 포맷(예: [DONE] 토큰) 확인을 통한 파싱 로직 단순화