본문 바로가기

서버

[SSE] Server Sent Event Stream

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