요청-응답 모델의 한계를 넘어 스트리밍 아키텍처가 왜 AI 시대의 필수 인프라인지 살펴봅니다. TTFT, TPOT 등 핵심 지표와 프로토콜 생태계를 개관합니다.
전통적인 웹 아키텍처는 Request-Response(요청-응답) 패턴 위에 세워졌습니다. 클라이언트가 요청을 보내면, 서버는 모든 처리를 완료한 뒤 한 번에 응답을 돌려줍니다. 이 패턴은 단순하고 이해하기 쉬우며, HTTP/1.1 시절부터 웹의 근간이 되어 왔습니다.
그러나 LLM(Large Language Model, 대규모 언어 모델) 시대에 이 패턴은 치명적인 문제를 드러냅니다.
[요청-응답]
사용자 요청 ──────────────────────────────────> 전체 응답 (8초 후)
(빈 화면에서 대기)
[스트리밍]
사용자 요청 ─> 첫 토큰(0.3초) ─> ─> ─> ─> ─> 마지막 토큰 (8초)
(즉시 텍스트가 나타남)GPT-4 클래스 모델의 긴 응답은 완성까지 10초 이상 걸릴 수 있습니다. 요청-응답 방식이라면 사용자는 그 시간 동안 빈 화면만 바라보게 됩니다. 반면 스트리밍 방식에서는 첫 번째 토큰이 수백 밀리초 안에 도착하면서, 사용자는 AI가 "생각하고 있다"는 것을 즉시 확인할 수 있습니다.
Nielsen Norman Group의 연구에 따르면, 1초 이내의 응답은 사용자에게 "시스템이 즉시 반응한다"는 인상을 줍니다. 스트리밍은 전체 처리 시간을 줄이는 것이 아니라, 체감 지연시간을 극적으로 낮추는 전략입니다.
2026년 현재, 실시간 AI 시스템은 더 이상 선택이 아닙니다. 다음 세 가지 변화가 스트리밍을 필수 인프라로 만들었습니다.
모델 파라미터가 커질수록 토큰 하나를 생성하는 데 걸리는 시간도 늘어납니다. 사용자 경험을 유지하려면 토큰이 생성되는 즉시 전달해야 합니다.
텍스트를 넘어 오디오, 비디오, 이미지를 실시간으로 처리하는 AI 애플리케이션이 보편화되었습니다. 음성 대화 에이전트는 사용자의 발화가 끝나기 전에 이미 이해를 시작해야 하며, 이는 스트리밍 입력과 스트리밍 출력 양쪽 모두를 요구합니다.
단순한 질의응답을 넘어, AI 에이전트가 도구를 호출하고 여러 단계를 거쳐 작업을 수행하는 패턴이 확산되었습니다. 사용자에게 각 단계의 진행 상황을 실시간으로 보여주는 것은 투명성과 신뢰의 문제입니다.
스트리밍은 하나의 개념이 아닙니다. 용도에 따라 크게 세 가지 패러다임으로 나뉩니다.
서버에서 클라이언트로 이벤트를 연속적으로 보내는 패턴입니다. **SSE(Server-Sent Events)**가 대표적이며, HTTP 위에서 동작하므로 기존 인프라와의 호환성이 뛰어납니다. LLM 토큰 스트리밍의 사실상 표준입니다.
// 서버가 클라이언트에게 이벤트를 연속으로 전달
// 클라이언트는 수신만 함 (단방향)
const eventSource = new EventSource("/api/stream");
eventSource.onmessage = (event) => {
console.log("새 토큰:", event.data);
};Kafka, RabbitMQ 같은 메시지 브로커를 통해 생산자와 소비자를 분리하는 패턴입니다. 대규모 데이터 파이프라인과 마이크로서비스 간 통신에 적합합니다. AI 추론 요청을 큐에 넣고 여러 GPU 서버가 소비하는 구조에서 핵심 역할을 합니다.
LLM에 특화된 패러다임으로, 모델이 토큰을 하나씩 생성할 때마다 즉시 전달합니다. 위의 이벤트 스트림이나 WebSocket을 전송 계층으로 사용하되, 토큰 단위의 점진적 렌더링, 부분 JSON 파싱 등 고유한 처리 로직이 필요합니다.
스트리밍 시스템의 성능을 논할 때, 두 가지 핵심 지표를 반드시 이해해야 합니다.
**TTFT(Time To First Token, 첫 토큰 도달 시간)**는 사용자가 요청을 보낸 시점부터 첫 번째 토큰이 화면에 표시되기까지의 시간입니다. 이 지표는 체감 응답성을 좌우합니다.
TTFT를 구성하는 요소는 다음과 같습니다.
| 구성 요소 | 설명 | 일반적 소요 시간 |
|---|---|---|
| 네트워크 왕복 | 클라이언트-서버 간 RTT | 10-100ms |
| 큐 대기 | 추론 서버의 요청 큐 대기 | 0-수 초 |
| 프리필(Prefill) | 입력 토큰 처리 단계 | 50-500ms |
| 첫 토큰 생성 | 디코딩 시작 | 10-50ms |
**TPOT(Time Per Output Token, 토큰당 출력 시간)**는 첫 토큰 이후 각 토큰이 생성되는 간격입니다. 이 값이 작을수록 텍스트가 더 빠르게 화면을 채워갑니다.
사람의 읽기 속도는 분당 200-300단어 수준입니다. 한국어 기준으로 이는 대략 초당 6-10글자에 해당합니다. TPOT가 이 속도보다 빠르다면, 사용자는 "AI가 사람보다 빠르게 쓴다"고 느끼게 됩니다.
총 응답 시간 = TTFT + (출력 토큰 수 x TPOT)
예시: TTFT 300ms, TPOT 30ms, 200 토큰 응답
= 300 + (200 x 30) = 6,300ms = 6.3초
스트리밍에서 사용자가 느끼는 지연 = TTFT = 0.3초
요청-응답에서 사용자가 느끼는 지연 = 6.3초스트리밍을 구현하는 데 사용할 수 있는 프로토콜은 여러 가지가 있습니다. 각각의 특성과 적합한 용도를 한눈에 살펴보겠습니다.
| 프로토콜 | 방향 | 전송 계층 | 상태 관리 | 주요 용도 |
|---|---|---|---|---|
| SSE | 단방향 (서버 to 클라이언트) | HTTP/1.1+ | 무상태 | LLM 토큰 스트리밍 |
| WebSocket | 양방향 | TCP (HTTP 업그레이드) | 유상태 | AI 채팅, 협업 |
| gRPC Streaming | 양방향 (4가지 모드) | HTTP/2 | 유상태 | 백엔드 마이크로서비스 |
| WebTransport | 양방향 | HTTP/3 (QUIC) | 유상태 | 차세대 실시간 통신 |
| MQTT | 양방향 (Pub/Sub) | TCP | 유상태 | IoT, 엣지 AI |
실무에서 프로토콜을 선택할 때는 다음 질문에 답해보면 됩니다.
프로토콜 선택에서 가장 흔한 실수는 "WebSocket이면 다 된다"는 사고방식입니다. WebSocket은 유상태 연결을 관리해야 하므로 스케일링이 복잡합니다. 대부분의 LLM 스트리밍은 SSE만으로 충분합니다.
이 시리즈는 10장에 걸쳐 스트리밍 아키텍처의 이론부터 실전 구현까지를 체계적으로 다룹니다.
이번 장에서는 스트리밍 아키텍처가 AI 시대에 왜 필수인지, 그리고 그 핵심 개념들을 살펴보았습니다.
다음 장에서는 LLM 토큰 스트리밍의 사실상 표준인 **SSE(Server-Sent Events)**를 심층적으로 분석합니다. HTTP 위에서 동작하는 단순함이 어떻게 강력한 이점이 되는지, 그리고 Next.js와 FastAPI에서의 실제 구현 방법을 살펴보겠습니다.
이 글이 도움이 되셨나요?
관련 주제 더 보기
HTTP 기반 단방향 스트리밍 프로토콜인 SSE의 동작 원리, EventSource API, 자동 재연결 메커니즘을 분석하고 Next.js와 FastAPI에서의 LLM 토큰 스트리밍 구현을 다룹니다.
WebSocket의 핸드셰이크, 프레이밍 구조, 양방향 통신의 강점과 상태 관리의 복잡성을 분석합니다. AI 채팅에서의 생성 중단, Socket.IO, 스케일링 전략을 다룹니다.
HTTP/2 기반 gRPC의 4가지 스트리밍 모드, Protobuf 직렬화, 마이크로서비스 간 추론 파이프라인 구현을 다룹니다. gRPC-Web의 제약과 Python/Go 구현 예제를 포함합니다.