Server-Sent-Events를 이용한 실시간 통신
- Server-Sent-Events를 이용한 실시간 채팅 기능을 구현해요
- 기술적 고민
- SSE 실시간 통신에서 발생할 수 있는 문제 시나리오를 예상해서 그려요
- 문제를 해결해요
- 2024.12.11 - 진행 중
Java 21
- Framework :
Springboot (3.4)
- Database :
MySQL (9.0.1)
- ORM :
JPA
<문제 해결>
- 헤더의
Last-Event-ID
를 기반으로, 끊어진 동안 전송된 메시지를 재전송하는 로직을 구현했어요 - 미수신 메시지의 순서를 보장하기 위해, event id 값을 생성시간으로 구성했어요
<문제 해결 후 테스트 영상>
sseTest.mp4
<문제 해결>
- 클라이언트 연결 종료 이벤트를 서버가 감지하도록 구현했어요
- 특정 상황(타임아웃, 에러, 종료)에서 수행할 작업을 콜백으로 등록했어요
- HTTP 스트림을 종료해요
- SseEmitter를 메모리에서 제거해요