SSE(Server-Sent Events)는 하나의 지속적인 HTTP 응답 스트림을 통해 서버가 클라이언트로 이벤트를 계속 밀어 보내는 단방향 실시간 기술입니다.
브라우저의 `EventSource` API로 간단히 구독하며, `text/event-stream` 콘텐츠 타입의 열린 응답으로 데이터가 흘러 들어옵니다.
포맷이 매우 단순합니다. 서버는 연결을 닫지 않고 `data: ...\n\n` 형태의 텍스트 줄을 계속 내려보내며, `event:`(이벤트 이름)·`id:`(이벤트 ID)·`retry:`(재연결 간격)로 확장할 수 있습니다. 별도 프로토콜 업그레이드가 없어 일반 HTTP/HTTPS 위에서 그대로 동작하므로 프록시·로드 밸런서·방화벽과의 호환성이 좋습니다. 결정적 장점은 자동 재연결과 `Last-Event-ID` 기반 재개인데, 연결이 끊기면 `EventSource`가 스스로 다시 붙고 마지막으로 받은 ID를 보내 누락 없이 이어받습니다.
WebSocket과의 선택 기준이 실무의 핵심입니다. SSE는 '서버→클라이언트 단방향·텍스트'에 특화되어 알림, 실시간 대시보드, 진행률, LLM 토큰 스트리밍처럼 서버가 밀어 주기만 하면 되는 경우에 가볍고 견고합니다. 반대로 클라이언트도 활발히 메시지를 보내야 하거나 이진 데이터가 필요하면 WebSocket이 맞습니다. 한계로는 단방향이라는 점, HTTP/1.1에서 브라우저의 오리진당 연결 수 제한(약 6개) 때문에 여러 탭에서 SSE를 많이 열면 고갈될 수 있다는 점(HTTP/2 멀티플렉싱으로 완화)이 있습니다. 서버는 이벤트가 날 때만 보내는 웹훅과 달리, SSE는 열린 연결로 지속 스트리밍한다는 점이 다릅니다.