Skip to content

Server-Sent-Events를 이용한 실시간 통신을 공부해요

Notifications You must be signed in to change notification settings

benjaminuj/Network-SSE

Repository files navigation

Network-SSE

Server-Sent-Events를 이용한 실시간 통신

🖥️ 프로젝트 소개

  • Server-Sent-Events를 이용한 실시간 채팅 기능을 구현해요
  • 기술적 고민
    • SSE 실시간 통신에서 발생할 수 있는 문제 시나리오를 예상해서 그려요
    • 문제를 해결해요

🕰️ 개발 기간

  • 2024.12.11 - 진행 중

⚙️ 개발 환경

  • Java 21
  • Framework : Springboot (3.4)
  • Database : MySQL (9.0.1)
  • ORM : JPA

🔥 문제 시나리오

1. 클라이언트 연결이 비정상적으로 끊어져서 재연결을 시도하는 사이 서버가 데이터를 보내면, 해당 데이터가 누락된다

<문제 해결>

  • 헤더의 Last-Event-ID를 기반으로, 끊어진 동안 전송된 메시지를 재전송하는 로직을 구현했어요
  • 미수신 메시지의 순서를 보장하기 위해, event id 값을 생성시간으로 구성했어요

<문제 해결 후 테스트 영상>

sseTest.mp4

2. 클라이언트가 연결을 끊었을 때 서버가 적절한 처리를 하지 않으면 리소스 누수가 발생한다

<문제 해결>

  • 클라이언트 연결 종료 이벤트를 서버가 감지하도록 구현했어요
  • 특정 상황(타임아웃, 에러, 종료)에서 수행할 작업을 콜백으로 등록했어요
    • HTTP 스트림을 종료해요
    • SseEmitter를 메모리에서 제거해요

About

Server-Sent-Events를 이용한 실시간 통신을 공부해요

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages