SSE(Server-Sent Events)

서버에서는 클라이언트와 매핑되는 SEE 통신 객체를 만든다. → SseEmitter

SseEmitter는 서버에서 클라이언트로 비동기적으로 이벤트 스트림을 전송할 수 있게 해주는 스프링의 클래스이다.

연결되어 있는 동안 이벤트 발생 시 해당 객체가 EventSource를 클라이언트에게 전송하면서 데이터가 전달되는 방식이다.

SSE 적용하기

Controller

public ResponseEntity<SseEmitter> connect(
			@RequestHeader(value = "Last-Event-ID", require = false, defaultValue = "") final String lastEventId,
			@AuthenticationPrincipal final UserDetails userDetails
	) {
			return ResponseEntity.ok(notificationService.connect(userDetails.getUsername(), lastEventId));
}

현재 프로젝트가 JWT 로그인으로 이루어져 있어서 클라이언트에서는 액세스 토큰을 담아서 보내준다.

클라이언트에서는 액세스 토큰을 담아서 보내준다. 따라서 UserDetails를 통해 사용자 식별이 가능하다.

lastEventId 파라미터는 만약 해당 사용자에 대한 미수신 알림이 있다면 보내주기 위함이다. 그리고 요청의 Accept 헤더가 “text/event-stream”을 포함하고 있는 경우에만, 이 메서드가 요청을 처리하게 됨을 의미한다.

Repository