피드로 돌아가기
Dev.toBackend
원문 읽기
Delivery Semantics 중심의 분산 메시징 기반 알림 시스템 설계
Real-Time Notification Systems Are Harder Than Most Teams Expect
AI 요약
Context
단순 WebSocket 전송 방식은 대규모 트래픽 발생 시 재연결, 순서 보장, 중복 전송 문제를 해결하지 못하는 한계 존재. 전송 수단보다 Delivery Semantics의 부재로 인한 데이터 불일치와 사용자 신뢰도 하락이 핵심 병목 지점으로 작용.
Technical Solution
- At-least-once delivery 환경에서 발생하는 중복 전송 해결을 위해 Idempotency Key와 Redis 기반 Deduplication Storage 도입
- 전체 Global Ordering의 비용 문제를 해결하고자 User Sharding 기반의 Sequence Number를 통한 Per-user Ordering 구조 설계
- Mobile 환경의 불안정한 네트워크 상태를 극복하기 위해 WebSocket, APNs/FCM, Durable State 기반의 Hybrid Push 전략 채택
- Fan-out으로 인한 Queue Amplification 및 Retry Cascade 방지를 위해 Traffic Shaping 및 Consumer Side Protection 로직 적용
- 시스템 복구력 확보를 위해 Durable Cursor와 Replay Support를 포함한 이벤트 기반 아키텍처로 전환
실천 포인트
1. 비즈니스 중요도에 따라 At-most-once, At-least-once, Effectively-once 중 적절한 Semantics를 먼저 결정했는가?
2. 모든 Side Effect 발생 전 Idempotency Key를 통한 중복 체크 로직이 구현되었는가?
3. 사용자별 순서 보장을 위해 Sequence Number와 Partition Key(User ID)를 일치시켰는가?
4. APNs/FCM의 불안정성을 보완할 서버 사이드 Durable State 및 Sync Checkpoint가 존재하는가?
5. 단순 Happy Path가 아닌 Kafka Rebalance, Consumer Crash 등 Failure Mode에 대한 테스트를 수행했는가?