본문 바로가기

카테고리 없음

라이브 채팅방 구현 계획

멀티 유저 채팅방 구현 

 

websocket(필수): 실시간 양방향 통신 필요

 

보조 도구 필요성 (다중 서버일 경우를 전재)

스케일링: 단일 소켓서버에 많은 채팅 참여가 연결 시 리소스 부족해짐 

메시지 동기화: 여러 웹 소켓 서버 존재 시 한 서버에서 발생한 메시지를 다른 서버에 연결된 클라이언트와 동기화 해야함

서버 수평 확장 시 : 2개 서버로 같은 라이브 방송 진행 시 1번 서버에 연결된 사용자와 2번 서버에 연결된 사용자를 연결 

 

특징 Redis Pub/Sub Redis Streams Kafka RabbitMQ Firebase Realtime Database
실시간 메시지 전송 빠름 빠름 빠름 빠름 빠름
메시지 보존 없음 있음 (로그 형태로 저장) 있음 (로그 기반 저장) 있음 (큐에 저장) 있음 (클라우드에 저장)
확장성 클러스터로 확장 가능 클러스터로 확장 가능 매우 뛰어남 (분산 환경에 최적화) 큐 분할 및 클러스터 확장 가능 서버리스로 확장 가능 처리량
처리량 고성능 (메모리 기반) 고성능 (메모리 기반) 초대규모 처리 가능 높은 처리량 상대적으로 낮음 (중소규모 적합)
복잡도 단순 (쉬운 설정) 비교적 단순 복잡 (운영 및 설정이 까다로움) 중간 (큐와 라우팅 설정 필요) 매우 단순 (서버리스)
영구 저장 필요 여부 별도의 저장소 필요 기본 제공 기본 제공 기본 제공 클라우드 저장
사용 사례 중소규모 실시간 채팅
(메시지 유실 가능성 때문, 대규모 사용자들의 연결상태를 유지하지 못하면 메시지가 유실된다함) 
중소규모 실시간 채팅 + 메시지 기록 필요 대규모 스트리밍 데이터 안정성과 메시지 전달이 중요한 환경 소규모/중소규모 실시간 애플리케이션
가용 사용자 수 수천~수만 수천~수만 수십만 수십만 수백

 

 

채팅 내역을 저장하는 경우)(유튜브, 트위치)

- 법적, 규제적인 이유로 채팅 내역을 일정기간 보관함

- 사용자 제제를 위해 저장 필요 

 

채팅 내역을 저장하지 않는 경우(인스타 라방) 

- 프라이버시와 기술적 단순성 강조, 비용 절감 

 

 

단일 인스턴스로 배포한 서버에서 라이브 채팅방 구현 시: 웹 소켓으로 충분

사용자수 증가로 인한 로드밸런싱 고려시: 웹 소켓 +redis pubsub 고려