WebSocket 대신 SSE 인 이유
SSE (Server-Sent Events) 는 단방향: server push, client listen. WebSocket 은 양방향. client 가 prompt 하나 보내고 server 가 token 을 stream 하는 chat 에선 SSE 가 정답 모양 — 더 단순, HTTP middleware 와 잘 어울림, reconnect 무료.
wire format
SSE 는 HTTP 위 text/event-stream 일 뿐. 각 event 는 data: <payload>\n\n. browser 의 EventSource API 또는 fetch + ReadableStream reader 가 parse.
Async 제너레이터 → SSE
FastAPI 의 StreamingResponse 가 어떤 iterable 든 받음. async 제너레이터가 string yield, FastAPI 가 각각을 network 로 flush. event loop 는 yield 사이 다른 작업 자유.
Write before show: browser 로 yield 되는 모든 chunk 가 이미 JSONL ground truth 에 영속화돼야 해. JSONL append 실패 시 yield X. 이게 '아빠한테 깨진 채팅 보여드리지 마' 의 코드 표현 (Truth track, lesson 1).