인프라

스트리밍

Token Streaming

LLM이 답을 다 만들기 전에 토큰이 나오는 대로 바로 보내 주는 방식으로, ChatGPT 화면에서 글자가 타이핑되듯 나오는 게 바로 이것이다. 사람이 화면으로 읽는 채팅·글쓰기 도구라면 켜 두는 게 기본이고, 볼 사람이 없는 백엔드 일괄 처리에는 쓸 이유가 없다.

항목일반 응답스트리밍
첫 글자가 보이는 때답이 다 끝난 뒤첫 토큰이 나오자마자
전체 완료 시간같음같음
구현 난이도쉬움조금 복잡
어울리는 곳백엔드 일괄 처리채팅 UI, 긴 답변

빨라지는 건 '체감' 속도다

스트리밍은 생성 속도 자체를 높이지 않는다. 전체가 끝나는 시간은 같지만, 첫 토큰이 보이기까지 걸리는 시간인 TTFT(Time to First Token)가 짧아진다. 수백 토큰짜리 답을 빈 화면 앞에서 기다리는 대신, 읽으면서 기다리게 된다.

답이 길수록 효과가 크다. 사용자는 앞부분을 읽다가 원하는 답이 아니면 중간에 멈출 수도 있다.

API에서는 옵션 하나로 켠다

OpenAI와 Claude API 모두 요청에 "stream": true(파이썬 SDK에서는 stream=True)를 넣으면 응답이 SSE(Server-Sent Events)로 조각조각 온다. 각 조각에는 새로 생긴 텍스트만 들어 있으니, 받는 쪽에서 이어 붙여 화면에 그리면 된다. Claude SDK는 client.messages.stream() 같은 도우미도 있어 텍스트만 골라 받기 쉽다.

웹 앱은 보통 서버가 LLM 스트림을 받아 브라우저로 다시 흘려보낸다. Next.js에서는 API 라우트가 ReadableStream을 응답으로 돌려주면 되고, Vercel AI SDK를 쓰면 이 연결과 채팅 화면 갱신을 표준 방식으로 처리할 수 있다.

켤 때와 끌 때

상황스트리밍이유
채팅, 글쓰기 도구켠다읽으면서 기다릴 수 있다
아주 긴 답변켠다오래 응답이 없어 연결이 끊기는 걸 줄인다
JSON을 받아 바로 처리끈다다 와야 파싱할 수 있다
야간 일괄 처리끈다볼 사람이 없어 이득이 없다

중간에 끊길 수 있다고 보고 만든다

스트림은 응답이 이미 시작된 뒤에 오류가 날 수 있다. 상태 코드 하나로 성공·실패가 갈리지 않으니, 끝 신호(Claude는 message_stop, OpenAI는 [DONE])를 받았는지 확인하고 못 받았으면 재시도하거나 안내 문구를 보여 줘야 한다.

서버 앞의 프록시가 응답을 모았다가 한꺼번에 보내면 스트리밍 효과가 사라진다. Nginx라면 버퍼링을 끄는 설정이 필요하다. 토큰 사용량도 스트림 끝부분 이벤트에 담겨 오는 경우가 많으니 비용 집계 코드를 그에 맞춰야 한다.

읽는 사람이 있는 화면이면 거의 다 켠다

가장 흔한 건 채팅형 화면의 기본 설정으로 두는 방식이다. 사람이 결과를 지켜보는 곳이면 대부분 스트리밍으로 보여 주고, 결과를 프로그램이 받아 처리하는 단계만 끈다.

어디서어떻게 쓰나
채팅형 AI 서비스답변을 글자 단위로 화면에 그려, 긴 답도 바로 읽기 시작하게 한다
코딩 어시스턴트·에이전트코드와 진행 상황을 생성되는 대로 보여 주고, 방향이 틀리면 사용자가 중간에 멈춘다
사내 문서 검색 챗봇문서를 찾은 뒤 답변을 만드는 부분을 스트리밍해 기다리는 느낌을 줄인다
음성 비서들어오는 텍스트를 문장 단위로 끊어 음성 합성에 넘겨, 말하기 시작을 앞당긴다
#SSE#스트림#UX
참고 자료
관련 영상
← AI Wiki에서 더 보기
updated at 2026-10-20