LLM은 답을 한 번에 만들지 않고 다음 토큰을 순서대로 예측합니다. 스트리밍은 그 과정을 그대로 화면에 흘려보내는 것뿐이라 서버 쪽 구현은 SSE(Server-Sent Events)나 청크 단위 HTTP 응답으로 비교적 단순합니다. 클라이언트는 받은 조각을 기존 텍스트 끝에 계속 append합니다.
효과는 체감 속도에 있습니다. 전체 응답 시간은 똑같아도 첫 토큰이 도착하는 순간(TTFT, time to first token) 사용자는 "일이 진행되고 있다"는 신호를 받고, 끝까지 읽는 동안 자연스럽게 눈이 따라가므로 기다림 자체가 짧게 느껴집니다. 깜빡이는 커서(▍)는 "아직 끝나지 않았다"는 신호를 텍스트만으로는 주기 어려워서 덧붙이는 장치입니다.
마크다운이 스트리밍 중이면 리스트나 코드블록이 닫히지 않은 채로 잠깐 보일 수 있습니다 — 파서가 매 청크마다 불완전한 마크다운을 다시 그리므로 깜빡임이나 레이아웃 점프가 생기지 않게 렌더러를 고르는 게 중요합니다. 사용자가 스크롤을 올려 과거 내용을 보고 있으면 새 토큰이 도착해도 자동 스크롤을 강제하지 않아야 합니다.
언제 쓰나
응답이 한두 문장을 넘어가는 모든 대화형 UI의 기본값으로 씁니다. 응답이 아주 짧거나(예/아니오) 구조화된 UI로 바로 렌더될 거라면 스트리밍 효과가 오히려 부자연스러울 수 있습니다.