SSE는 서버에서 클라이언트로 데이터를 일방적으로 전송하는 HTTP 기반의 단방향 통신 방식이다. 클라이언트는 서버에 연결된 후 서버로부터 실시간 이벤트를 지속적으로 수신할 수 있다. 주로 실시간 알림이나 주기적인 데이터 업데이트가 필요할 때 사용한다.
1. 단방향 통신:
- 서버에서 클라이언트로 일방적으로 데이터를 보낼 수 있다.
- 클라이언트에서 서버로는 초기 연결 이후 메시지를 보낼 수 없다.
2. 지속적은 HTTP 연결:
- 서버와 클라이언트 사이에 지속적인 HTTP 연결을 유지한다.
- 서버는 클라이언트가 연결된 동안 원하는 때에 데이터를 전송할 수 있다.
3. 자동 재연결 지원:
- 클라이언트가 네트워크 문제로 연결이 끊어지더라도 자동으로 재연결을 시도한다.
- 이를 통해 안정적인 연결을 유지할 수 있다.
4. 브라우저 기본 지원:
- 대부분의 현대 브라우저(Chrome, Firefox, Safari, Edge)에서 SSE를 기본적으로 지원한다.
5. 간편한 구현:
- WebSocket보다 구현이 간단하며, HTTP 프로토콜을 그대로 사용하므로 네트워크 방화벽이나 프록시 문제를 피하기 쉽다.
클라이언트가 서버에 연결: 클라이언트는 서버의 특정 엔드포인트에 연결해 이벤트 스트림을 요청한다.
서버가 연결된 클라이언트에 이벤트 전송: 서버는 클라이언트가 연결된 동안 데이터나 알림을 전송한다.
클라이언트가 이벤트 수신: 클라이언트는 서버가 전송한 데이터를 수신해 화면에 표시한다.
자동 재연결: 만약 연결이 끊어지면 브라우저가 자동으로 서버에 재연결을 시도한다.
장점:
1. 간단한 구현: HTTP 프로토콜 위에서 동작하므로 기존 인프라를 그대로 사용할 수 있다.
2. 자동 재연결 지원: 클라이언트가 자동으로 재연결을 시도한다.
3. 방화벽 문제 회피: HTTP 기반이므로 방화벽과 프록시 문제를 피할 수 있다.
단점:
1. 단방향 통신: 클라이언트에서 서버로의 실시간 데이터 전송이 불가능하다.
2. 비교적 낮은 성능: 많은 클라이언트와의 연결을 유지할 때 부하가 생길 수 있다.
3. 브라우저 제약: 일부 오래된 브라우저에서는 지원되지 않을 수 있다.