피드로 돌아가기
Dev.toBackend
원문 읽기
WebSocket과 Redis Pub/Sub 기반의 Ephemeral State 처리 설계
Designing WhatsApp's Typing Indicator: The Question That Tests Your Real-Time Skills
AI 요약
Context
실시간 타이핑 인디케이터 구현 시 Durable Message와 동일한 파이프라인 사용으로 인한 불필요한 오버헤드 발생. 수백만 명의 동시 접속자가 생성하는 단기성 상태 데이터를 효율적으로 처리하기 위한 저지연 전송 구조 필요.
Technical Solution
- Full-duplex 통신을 통한 서버-클라이언트 간 양방향 데이터 교환 및 HTTP Round-trip 감소를 위해 WebSocket 채택
- 수신자별 WebSocket 연결을 특정 Gateway에 할당하는 Sharding 구조를 통한 연결 상태 관리 최적화
- 발신 Gateway와 수신 Gateway 간의 실시간 이벤트 전달을 위해 Recipient Key 기반의 Redis Pub/Sub 레이어 구축
- 데이터의 휘발성(Ephemeral) 특성을 반영하여 DB Persistence를 완전히 제거하고 메모리 기반 전송 경로만 사용
- 네트워크 지연 발생 시 500ms 이상의 이벤트는 즉시 폐기하는 Drop-on-slow 전략으로 최신 상태 유지 및 Backpressure 해결
- 서비스 가용성 확보를 위해 WebSocket 우선 적용 후 SSE 및 HTTP 순으로 Fallback 체계 구성
실천 포인트
- 실시간 상태 업데이트 설계 시 데이터의 유효 시간이 매우 짧은지 검토하여 Persistence 제외 여부 결정 - 대규모 WebSocket 연결 관리 시 Gateway Sharding 및 Pub/Sub 기반의 인터-노드 통신 구조 적용 검토 - 네트워크 지연이 사용자 경험을 저해하는 경우, 재시도(Retry) 대신 즉시 폐기(Drop) 전략을 통해 최신성 확보