Backend/Java

Spring - SSE

개발자의 첫 걸음 2026. 1. 16. 10:00

안녕하세요. 오늘은 Spring Boot SSE(Server-sent-Events) 채팅 시스템에 대해 알아볼게요.

 

 

 

SSE(Server_Sent Events)란?

 

SSE는 서버가 클라이언트에게 실시간으로 데이터를 푸쉬할 수 있는 HTML5 표준 기술이에요. 

 

즉 SSE는 단방향식 통신으로 비유를 하자면

 

플러그와 콘센트로 콘센트를 꽂으면 계속 전기가 흐르는 느낌으로 생가해주시면 될 것 같아요.

 

 

폴링(Polling) VS SSE 

 

폴링방식은 다음과 같아요.

                                클라이언트 ──[요청]──> 서버
                                클라이언트 <──[응답]── 서버 (연결 종료)
                                     (2초 대기)
                                클라이언트 ──[요청]──> 서버 (반복)
                                클라이언트 <──[응답]── 서버 (연결 종료)

이 방식의 문제점은 불필요한 요청을 보내면서 서버 부하가 크고, 요청이 과할 시 지연될 수 있어요.

 

폴링의 방식은 1단계라고 한다면 SSE단계는 폴링의 한 단계 상승한 2단계로 볼 수 있어요.

                                클라이언트 ──[연결 요청]──> 서버
                                클라이언트 <══════════════ 서버 (연결 유지!)

                                클라이언트 <──[새 메시지]── 서버 (즉시 푸시!)
                                클라이언트 <──[새 메시지]── 서버 (즉시 푸시!)

SSE의 장점은 즉시 전송이 가능하고, 폴링에 비해 서버 부하가 감소되며 폴링에 비해 효율적이에요.

 

 

 

SseEmitter?

 

SSE를 사용하기 위해서는 스프링부트에 제공한 SseEmitter구현체를 사용해야 하는데요.

 

이 구현체를 통해 서버와 클라이언트 간의 지속적인 연결을 관리해 줘요.

 

그리고 SseEmitter는 비동기 요청 처리를 위해 설계된 객체예요.

 

일반적인 요청-응답 모델과 달리,

 

서버는 클라이언트 요청에 즉시 응답하지 않고 SseEmitter 객체를 반환하여 연결을 열어둬요.

 

이후, 새로운 데이터가 발생했을 때만 연결된 스레드를 사용해 데이터를 전송함으로써,

 

서버 자원을 효율적으로 관리할 수 있어요.

 

마지막으로 SSE의 주요 활용 사례를 소개해 드릴게요.

 

 

이러한 기능들은 모두 클라이언트가 서버에 데이터를 보낼 필요 없이,

 

오직 서버로부터 데이터를 받기만 하면 되기 때문에

 

단방향 통신에 최적화된 SSE가 효율적이고 정석적인 방법이 될 수 있어요.

 

 

 

여기까지 Spring SSE에 대해 알아봤는데요.

 

폴링보다 효율적이고 실시간성이 뛰어난 SSE는,

 

단방향 알림이나 이벤트 스트리밍에 특히 적합하다는 것을 알게 되었어요.

'Backend > Java' 카테고리의 다른 글

Spring - WebSocket + STOMP  (0) 2026.01.18
Spring - Polling  (0) 2026.01.13
Spring - PersistRepository  (0) 2026.01.06
결제 시스템 구축 - 핵심 개념 정리  (0) 2026.01.02
이메일 중복방지  (0) 2025.12.31