비가 오면 사장님이 먼저 압니다: SSE로 만든 실시간 기상악화 알림
두줄요약
기상악화 상태를 파트너에게 즉시 알리기 위해 SSE 기반 실시간 알림 구조를 설계했습니다. Kafka fan-out과 연결·메모리·재연결 운영 전략을 함께 다뤘습니다.
문제 상황
- 기상악화 시 라이더 부족으로 인한 주문 취소 증가와 임시배달지역 조정 필요
- 요청-응답 중심 기존 통신 구조에서 파트너 화면으로의 즉시 알림 부재
구조와 흐름
- 외부 기상악화 이벤트의 SNS·SQS 수신 후 Kafka 재발행
- 파드별 고유 Kafka groupId를 통한 전체 파드 fan-out과 연결 파트너 대상 선별 전송
- SSE 신호 수신 후 REST API로 최신 상태 재조회하는 zero-payload 방식
선택 이유
- 폴링의 불필요한 요청량·지연 트레이드오프 해소
- 단방향 알림 요구에 맞는 HTTP GET 기반 SSE 채택
- 양방향 WebSocket 전환과 롱 폴링의 재요청·이벤트 보관 복잡도 회피
성능/운영 포인트
- Reactor Sink 멀티캐스트, 느린 구독자 이벤트 폐기, 미구독 Sink 생성 방지
- Nginx 버퍼 비활성화·연결 상한 설정과 연결당 메모리 측정
- heartbeat, 재연결 지터·백오프·상한, 최대 연결 유지 시간 적용



