피드로 돌아가기
Building a Chatbot API From Scratch — Part 2: Streaming, Prompt Engineering and Docker
Dev.toDev.to
Backend

22초에서 2초로, LLM 모델 이원화와 SSE 스트리밍 최적화 기록

Building a Chatbot API From Scratch — Part 2: Streaming, Prompt Engineering and Docker

Chris Kechagias2026년 4월 6일13intermediate

Context

단순 기능 구현 단계의 Chatbot API가 가진 사용자 경험 한계. 응답 완료 시까지 대기하는 Blocking 방식의 인터페이스 구조. 로컬 환경 외 배포 및 운영을 위한 컨테이너화 전략 부재.

Technical Solution

  • asyncio.create_task를 활용한 대화 제목 자동 생성 백그라운드 작업 분리
  • 고비용 Reasoning 모델 대신 저비용 Utility 모델(gpt-5-nano)을 전담 배치한 모델 이원화 설계
  • Server-Sent Events(SSE) 기반의 Async Generator 구현으로 실시간 토큰 스트리밍 응답 체계 구축
  • stream_optionsinclude_usage 설정을 통한 tiktoken 의존성 제거 및 토큰 사용량 추적 방식 개선
  • uv sync --frozen 옵션 기반의 최소화된 Docker 이미지 빌드 및 service_healthy 조건의 DB 의존성 제어
  • 화이트리스트 방식의 .dockerignore 설정을 통한 프롬프트 라이브러리 누락 방지 및 무결성 확보

Impact

  • 대화 제목 생성 Latency: 22s $\rightarrow$ 2s 미만으로 단축
  • 모델 업데이트(gpt-5.4-mini 등) 후 처리 속도 3배 향상
  • gpt-5-mini Latency: 4527ms $\rightarrow$ gpt-5.4-mini Latency: 1418ms

Key Takeaway

단일 모델에 모든 태스크를 할당하기보다 작업의 복잡도에 따라 Utility 모델과 Main 모델을 분리하는 것이 비용과 성능 최적화의 핵심임.


Async Generator 기반의 스트리밍 구현 시, HTTP Response 기반의 기존 Exception Decorator 사용을 지양하고 내부 Inline 에러 핸들링을 적용할 것

원문 읽기