📨
SSE (Server-Sent Events)
서버→클라이언트 단방향 스트림
SSE는 HTTP 기반의 단방향 스트리밍 기술입니다. 서버가 클라이언트에 이벤트를 계속 보낼 수 있지만, 클라이언트→서버 방향은 별도 HTTP 요청이 필요합니다. WebSocket보다 단순하고 HTTP/2와 잘 호환되며, 자동 재연결 기능이 브라우저에 내장되어 있습니다.
구조 다이어그램
🌐
Client
EventSource API
① GET 요청
→
HTTP 연결 유지
←
② text/event-stream
←
data: {...}
←
data: {...}
단방향 스트림 (서버 → 클라이언트)
🖥️
Server
Content-Type: text/event-stream
연결 끊김 시 브라우저가 자동 재연결 (Last-Event-ID 전송)
흐름 설명
- 클라이언트가 EventSource API로 서버에 HTTP GET 요청
- 서버가 text/event-stream 응답, 연결 유지
- 서버가 이벤트를
data:형식으로 스트리밍 - 연결 끊김 시 브라우저가 자동 재연결
동작 흐름
1
클라이언트가 EventSource API로 서버에 HTTP GET 요청
2
서버가 Content-Type: text/event-stream으로 응답, 연결 유지
3
서버가 이벤트 발생 시 data: 형식으로 스트리밍 전송
4
연결 끊김 시 브라우저가 자동 재연결 (Last-Event-ID 활용)
장점
- ✓ HTTP 기반으로 구현 단순
- ✓ 자동 재연결 내장
- ✓ HTTP/2 멀티플렉싱 활용
- ✓ 텍스트 기반으로 디버깅 용이
단점
- ✗ 단방향만 가능 (서버→클라이언트)
- ✗ 바이너리 데이터 전송 비효율
- ✗ IE/구형 브라우저 미지원
- ✗ 최대 동시 연결 수 제한 (HTTP/1.1에서 6개)
사용 사례
실시간 알림/피드
AI 챗봇 스트리밍 응답 (ChatGPT)
주식 시세 업데이트
빌드/배포 로그 스트리밍
라이브 스코어보드