시스템 설계 · 심화
실시간 채팅 시스템을 설계해주세요.
힌트 · WebSocket vs Long Polling, 메시지 순서 보장, 읽음 처리, 오프라인 메시지, 수평 확장을 설명해보세요.
WebSocketPub/SubRedis확장성메시지 큐
모범답안
실시간 채팅 시스템 설계에 대해 말씀드리겠습니다.
가장 중요한 건 클라이언트와 서버 간의 실시간 양방향 통신입니다. WebSocket을 사용하는 것이 가장 효율적입니다. Long Polling에 비해 오버헤드가 적고 실시간성이 뛰어나기 때문입니다.
메시지 순서 보장을 위해 각 메시지에 고유한 시퀀스 번호를 부여하고, 서버에서 이 번호 순서대로 처리합니다. 읽음 처리는 각 메시지에 대한 ACK를 사용하여 구현할 수 있습니다.
오프라인 메시지는 Redis와 같은 캐시 서버나 메시지 큐(예: Kafka)에 저장해두었다가, 사용자가 다시 온라인 상태가 되었을 때 전달합니다.
확장성을 위해 Pub/Sub 모델을 사용하고, 메시지 브로커(예: Redis Pub/Sub)를 통해 메시지를 분산 처리합니다. 채팅 서버는 stateless하게 설계하여 필요에 따라 쉽게 확장할 수 있도록 합니다. 로드 밸런서를 통해 트래픽을 분산하는 것도 중요합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.