SPRING

[SPRING] SSE(Sever-sent-event)

도원좀비 2025. 4. 25. 19:41

1️⃣ 실시간 통신 기술: SSE vs WebSocket

항목 SSE (Server-Sent Events) WebSocket
통신 방향 단방향 (서버 → 클라이언트) 양방향 (서버 ↔ 클라이언트)
프로토콜 HTTP/1.1 기반 HTTP/1.1 → WebSocket 프로토콜로 업그레이드
전송 방식 텍스트 기반의 이벤트 스트림 프레임 기반 바이너리/텍스트 전송
연결 방식 단일 HTTP 연결 유지 핸드셰이크 후 지속적 TCP 연결
브라우저 지원 대부분의 최신 브라우저 지원 거의 모든 브라우저 지원
재연결 처리 자동 내장 (EventSource 자동 재연결) 직접 구현 필요
헤더 제약 CORS 및 쿠키/헤더 설정 제약 있음 WebSocket도 있으나 SSE보다 유연
서버 부하 상대적으로 낮음 (단방향) 양방향 유지 연결로 부하 ↑
주 사용처 실시간 알림, 뉴스 피드, 주가 정보 등 채팅, 게임, 화상회의, 협업툴 등

2️⃣ 언제 어떤 걸 써야 할까?

상황 적합한 기술
실시간 알림 (단방향), 뉴스, 주가, 날씨 SSE
채팅, 협업툴, 양방향 게임 WebSocket
서버 리소스가 한정된 환경 SSE
빠른 양방향 응답성과 인터랙션 필요 WebSocket

 


3️⃣ SSE를 사용할 때 고려사항

  • 서버에서의 연결 관리 필요: SseEmitter는 시간 만료, 네트워크 단절 등에 대해 처리가 필요
  • 배포 환경: Nginx를 프록시로 두는 경우 proxy_buffering off; 설정
  • 클라이언트 자동 재연결: EventSource가 기본 제공하므로 구현 간단

4️⃣ 요약

SSE는 간단하고 가벼운 단방향 실시간 통신에 적합하며, WebSocket은 복잡한 상호작용이 필요한 양방향 통신에 적합합니다. 각각의 특성과 용도에 따라 선택하면, 효율적인 실시간 시스템을 구축할 수 있습니다.

 

'SPRING' 카테고리의 다른 글

[SPRING] JPA로 테이블 객체 다루기  (2) 2025.04.30
[SPRING] 쿠키(Cookie)  (1) 2025.04.25
[SPRING] JPA Proxy  (3) 2025.04.21
[SPRING] 조인(JOINED) 전략  (2) 2025.04.19
[SPRING] 트랜잭션(Transaction)  (2) 2025.04.17