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 |