SSE(Server-Sent Event)

그림 출처 : https://kennethnnalue.medium.com/introduction-to-server-sent-events-sse-d0b7590503a5
- 서버가 클라이언트(브라우저 등)에게 데이터를 계속 밀어주는 통신 방식
- 보통의 웹은 클라이언트가 요청 -> 서버가 응답 -> 끝 이런 구조인데, SSE는 한 번 연결하면 서버가 새로운 정보가 생길 때마다 계속 보내줌
- SSE(Sever-Sent Events)는 실시간에 가까운 정보 전달에 많이 사용
- 실시간 알림 (주문 상태, 배송 상태)
- 채팅에서 "상대가 입력 중.."
- 주식 가격, 로그 스트리밍
- ChatGPT처럼 답변이 한 글자씩 나오는 UI
WebSocket (간단하게)

그림 출처 : https://www.ramotion.com/blog/what-is-websocket/
- 클라이언트와 서버 간에 하나의 지속적인 TCP 연결을 유지하면서, 양방향(full-duplex) 통신을 가능하게 하는 프로토콜
- HTTP 핸드셰이크 이후 지속적인 TCP 연결을 유지하면서 클라이언트와 서버 간 실시간 양방향 통신을 가능하게 하는 프로토콜
SSE(Server-Sent Event) 와 웹소켓(WebSocket) 비교
- SSE는 방향이 서버 -> 클라이언트로 단방향
웹소켓은 양방향
- SSE는 HTTP 기반이지만 WebSocket은 별도 프로토콜 사용
정리
즉, SSE는 HTTP 연결을 끊지 않고 유지한 채,
서버가 text/event-stream 형식으로 데이터를 계속 보내는 방식
SSE 스트리밍은 서버가 클라이언트에게 실시간으로 데이터를 계속 보내주는 통신 방식. 한 번 연결하면 새 정보가 생길때마다 자동으로 전달 (서버가 일방적으로 보내는 스트리밍)
WebSocket은 클라이언트와 서버가 서로 실시간으로 주고받는 통신임. 채팅이나 게임처럼 상호작용이 있으면 WebSocket
추가
- AI 채팅은 양방향 대화인데, 하나의 개별 응답은 SSE인데 전체 시스템은 WebSocket 인가? -> X
-> AI 채팅은 UX 관점에서는 양방향 대화처럼 보이지만, 대부분의 구현은 각 턴마다 HTTP 요청 + SSE 스트리밍 응답구조
즉, 개별 응답은 SSE 이고 전체 시스템이 반드시 WebSocket 인 것은 아님
- WebSocket : 전화통화
AI Chat(SSE 기반) : 질문하고 답변을 생방으로 듣는 인터뷰