컨퍼런스
B레벨 - 심화
당근마켓 실시간 채팅 시스템 아키텍처 진화
실시간 통신
분산 시스템
메시징
WebSocketgRPCRedisKafkaGo
배경
당근마켓의 중고거래 서비스에서 채팅은 핵심 기능입니다. 사용자 수가 급증하면서 기존 단일 서버 기반 채팅 시스템이 확장성과 안정성 한계에 도달했습니다. 동시 접속자 수백만 명을 지원하면서도 메시지 순서 보장과 유실 방지가 필요했습니다.
도전 과제
WebSocket 연결을 수백만 개 유지하면서 서버 간 메시지 라우팅을 효율적으로 처리해야 했습니다. 또한 사용자가 오프라인일 때의 메시지 저장, 읽음 확인, 푸시 알림 등 부가 기능도 실시간으로 동작해야 했습니다.
해결 방안
Go 기반의 WebSocket Gateway 서버를 도입하고, Redis Pub/Sub으로 서버 간 메시지 브로드캐스팅을 구현했습니다. 메시지 영속화는 Kafka를 통해 비동기로 처리하고, 채팅방별 메시지 순서는 Kafka 파티셔닝으로 보장했습니다. Connection Registry로 사용자-서버 매핑을 관리합니다.
결과
동시 접속자 300만 명 지원, 메시지 전달 지연 100ms 이내. 서버 장애 시 자동 재연결 및 미수신 메시지 복구. 인프라 비용 40% 절감 (효율적인 커넥션 관리).
핵심 인사이트
- 1.WebSocket Gateway 패턴으로 비즈니스 로직과 연결 관리를 분리하면 확장이 용이
- 2.메시지 순서 보장을 위해 Kafka 파티션 키를 채팅방 ID로 설정하는 것이 효과적
- 3.Connection Registry의 일관성이 전체 시스템 안정성의 핵심
- 4.오프라인 메시지 큐와 온라인 실시간 전달의 통합 설계가 중요