728x90
/* SSE */
웹 서비스에서 실시간으로 정보를 전달하고 싶을 때 우리는 흔히 WebSocket이나 polling을 떠올립니다. 하지만 단방향 통신만 필요할 경우, 더 간단하고 효율적인 방식이 있습니다. 바로 SSE(Server-Sent Events) 입니다.
SSE는 서버에서 클라이언트로 단방향으로 데이터를 지속적으로 전송할 수 있게 해주는 기술입니다.
- HTTP 기반이기 때문에 별도의 프로토콜이나 핸드쉐이크가 필요 없습니다.
- 브라우저에서 기본적으로 지원합니다 (EventSource API).
- 실시간 로그, 알림, 상태 업데이트 등에 유용합니다.
/* SSE 구현 */
@Component
class SseEmitterManager {
private val emitters: MutableMap<String, SseEmitter> = ConcurrentHashMap()
fun addEmitter(userId: String): SseEmitter {
val emitter = SseEmitter(60_000L)
emitters[userId] = emitter
emitter.onCompletion { emitters.remove(userId) }
emitter.onTimeout { emitters.remove(userId) }
return emitter
}
fun sendToClient(userId: String, event: String) {
emitters[userId]?.let {
try {
it.send(SseEmitter.event().name("pdf-status").data(event))
it.complete()
} catch (e: Exception) {
emitters.remove(userId)
}
}
}
}
/* SSE vs Websocket */
SSE | WebSocket | |
통신 방향 | 단방향 (서버 → 클라이언트) | 양방향 |
사용 편의성 | HTTP 기반, 간편 | 복잡한 프로토콜 필요 |
연결 수 | 적음 | 많음 (서버 부하↑) |
사용 사례 | 실시간 알림, 로그 전송 등 | 채팅, 게임, 협업 도구 등 |
728x90
'서버' 카테고리의 다른 글
[JWT] JWT란 무엇인가 (0) | 2025.05.10 |
---|---|
[네트워크] TCP/IP, HTTP 커넥션 (0) | 2025.01.25 |
[HTTP] DNS (0) | 2024.10.07 |
[HTTP] OSI 7계층 (1) | 2024.09.02 |
[Node.js] 이벤트 루프 (0) | 2024.07.07 |