피드로 돌아가기
Dev.toBackend
원문 읽기
클라이언트 환경별 제약 사항을 고려한 최적의 Real-time Push 전략 설계
Master-Class: Sending Real-Time Updates from Server to Clients: Server to Server, Android, iOS
AI 요약
Context
전통적인 HTTP Request-Response 구조의 한계로 인한 실시간 데이터 전달 지연 발생. Polling 및 Long polling 방식의 과도한 Bandwidth 낭비와 서버 리소스 부하 문제 해결 필요.
Technical Solution
- Server-to-Server 환경의 Low latency 및 양방향 통신 구현을 위한 WebSocket TCP Connection 유지 구조 채택
- 단방향 스트리밍 최적화를 위해 HTTP 기반의 lightweight한 Server-Sent Events(SSE) 프로토콜 적용
- 모바일 OS의 백그라운드 제약 및 배터리 소모 문제를 해결하기 위해 FCM(Android) 및 APNs(iOS) 기반의 Platform Push 아키텍처 활용
- WebSocket의 Stateful 서버 문제를 해결하기 위한 Redis 기반 Shared Pub/Sub 레이어 도입 및 Sticky Session 설계
- 모바일 Foreground 상태의 즉각적 응답성을 위한 WebSocket과 Background 전달을 위한 Push Notification의 하이브리드 운용
- 메시지 유실 방지를 위해 SSE의 Event ID를 활용한 Resumption 메커니즘 및 Kafka 기반의 Durability 확보
실천 포인트
1. 양방향/Binary 데이터 필요 여부에 따라 WebSocket과 SSE 중 선택
2. 모바일 환경 설계 시 OS 레벨의 백그라운드 제한 사항을 반영하여 FCM/APNs 연동 필수 검토
3. WebSocket 도입 시 Load Balancer의 Sticky Session 설정 및 서버 간 상태 동기화 방안 수립
4. Device Token의 만료 및 Unregistered 상태를 처리하는 Token Hygiene 로직 구현
5. 네트워크 단절 후 복구를 위한 Sequence ID 또는 Timestamp 기반의 missed-event recovery 설계