이전 글에서는 Polling 방식은 실시간 기능 구현이 가능하다는 장점이 있었지만, 대부분의 경우 새로운 데이터가 존재하지 않음에도 클라이언트가 지속적으로 서버에 요청을 보내야 한다는 비효율 문제가 존재한다고 했다.
이러한 문제를 해결하기 위해 이후 SSE(Server-Sent Events)와 WebSocket 같은 실시간 통신 기술이 등장하게 되었다.
SSE(Server-Sent Events) 방식
SSE(Server-Sent Events)는 클라이언트와 서버가 연결을 유지한 상태에서, 서버가 클라이언트에게 지속적으로 이벤트(Event)를 전달할 수 있도록 만든 기술이다.

SSE 동작 방식
SSE는 HTTP 기반으로 동작하지만, 기존 HTTP처럼 요청과 응답 이후 연결을 종료하지 않는다.
클라이언트는 서버와 연결을 유지한 상태로 대기하고, 서버는 새로운 이벤트가 발생했을 때 필요한 데이터만 클라이언트에게 전달한다.(단방향 통신)
SSE 특징
| 특징 | 설명 |
| 통신 방향 | 서버 → 클라이언트 |
| 기반 프로토콜 | HTTP |
| 연결 유지 | O |
| 사용 예시 | 실시간 알림, 주식 시세 업데이트, AI 답변 생성 등 |
SSE의 한계
SSE는 서버가 클라이언트에게 즉시 데이터를 전달할 수 있다는 점에서 실시간 알림 기능 구현에 매우 적합한 기술이었다. 하지만 SSE는 서버(Server)에서 클라이언트(Client) 방향으로만 데이터 전송이 가능한 단방향 통신이라는 한계를 가진다.
즉, 클라이언트는 서버로 데이터를 지속적으로 전달할 수 없기 때문에 실시간 채팅처럼 양방향 데이터 송수신이 필요한 기능 구현에는 적합하지 않았다.
WebSocket 방식
WebSocket은 클라이언트(Client)와 서버(Server)가 연결을 유지한 상태에서 서로 자유롭게 데이터를 주고받을 수 있도록 만든 양방향 실시간 통신 기술이다.

WebSocket 동작 방식
WebSocket은 최초 연결 과정에서는 HTTP 기반으로 동작한다. 클라이언트는 서버에게 HTTP Request를 보내며, 이 과정에서 Upgrade: websocket 헤더를 함께 전달하여 WebSocket 프로토콜로의 전환을 요청하게 된다. 이를 WebSocket Handshake 과정이라고 한다.
이후 서버는 101 Switching Protocols 응답을 반환하며, 기존 HTTP 연결을 WebSocket 프로토콜(ws/wss)로 업그레이드하게 된다. 연결이 완료되면 클라이언트와 서버는 연결(Connection)을 계속 유지한 상태가 되며, 이후부터는 클라이언트와 서버가 서로 자유롭게 데이터를 송수신할 수 있는 양방향 통신 구조가 된다. 즉, 클라이언트가 서버에게 데이터를 전송할 수도 있고, 서버 역시 필요한 순간 클라이언트에게 즉시 데이터를 전달할 수 있다.
WebSocket 특징
| 특징 | 설명 |
| 통신 방향 | 양방향(Full Duplex) 통신 |
| 기반 프로토콜 | WebSocket(ws/wss) |
| 연결 유지 | O |
| 사용 예시 | 실시간 채팅, 게임, 스트리밍, 협업 서비스 등 |
SSE와 WebSocket비교
| 항목 | SSE(Server-Sent Events) | WebSocket |
| 통신 방향 | 단방향(Server → Client) | 양방향(Client ↔ Server) |
| 기반 프로토콜 | HTTP | WebSocket |
| 연결 유지 | O | O |
| 데이터 송수신 | 서버 → 클라이언트 | 클라이언트 ↔ 서버 |
| 주요 사용 예시 | 실시간 알림 | 실시간 채팅 |
| 구현 난이도 | 비교적 단순 | 상대적으로 복잡 |
| 특징 | 서버 Push 중심 | 자유로운 양방향 통신 |
정리
기존 HTTP 방식은 요청(Request)과 응답(Response) 이후 연결이 종료되는 구조였기 때문에 실시간 기능 구현에 한계가 존재했다.
이를 해결하기 위해 Polling 방식이 등장했지만 반복적인 요청으로 인한 비효율 문제가 발생하였고, 이후 이를 개선하기 위해 SSE와 WebSocket 같은 실시간 통신 기술이 등장하게 되었다.
특히 WebSocket은 양방향 통신이 가능하다는 특징 덕분에 오늘날 다양한 실시간 서비스 구현에 널리 사용되고 있다.
참고 자료