우아한형제들
기술 블로그
A레벨 - 기본

배달의민족 SSE(Server-Sent Events) 기반 실시간 알림 시스템 구축기

백엔드
실시간
인프라
SSERedis Pub/SubSpring BootJavaHTTP Streaming
2024년 11월조회 0면접 0원문 보기

배경

배달의민족은 주문 상태 변경, 배달 진행 상황 등을 사용자에게 실시간으로 전달해야 한다. 기존 폴링 방식은 서버 부하가 크고 실시간성이 부족했다.

도전 과제

수백만 동시 사용자에게 실시간 알림을 전달하면서 서버 리소스를 효율적으로 사용해야 했다. WebSocket은 양방향 통신이 필요 없는 알림에는 과도한 오버헤드였고, 로드밸런서와 프록시 호환성 문제도 있었다.

해결 방안

SSE(Server-Sent Events)를 도입하여 서버에서 클라이언트로의 단방향 실시간 스트리밍을 구현했다. Redis Pub/Sub로 다중 서버 인스턴스 간 이벤트를 동기화하고, 연결 끊김 시 자동 재연결과 이벤트 ID 기반 누락 메시지 복구를 구현했다.

결과

폴링 대비 서버 부하가 크게 줄었고, 이벤트 발생 즉시 사용자에게 알림이 전달되어 실시간성이 향상되었다. HTTP 기반이라 기존 인프라와의 호환성도 우수했다.

핵심 인사이트

  • 1.단방향 실시간 통신에는 WebSocket보다 SSE가 더 적합하고 간단하다
  • 2.Redis Pub/Sub로 다중 인스턴스 간 SSE 이벤트를 효율적으로 동기화할 수 있다
  • 3.이벤트 ID 기반 재연결은 SSE의 네트워크 단절에 대한 내장 복구 메커니즘이다

이 사례 기반 면접에 도전해보세요

우아한형제들의 실제 기술적 결정과 트레이드오프를 깊이 파고드는 면접 질문 2가 준비되어 있습니다

BACKEND
SYSTEM_DESIGN
타이머사례 참조 가능결과 아카이브

로그인 없이 바로 면접을 시작할 수 있습니다