라이브채팅 플랫폼 구현기 2탄 : 아키텍처 및 성능 테스트
두줄요약
비동기 메시지 처리와 Kafka 중심의 분산 라이브채팅 아키텍처를 설계했습니다. k6 기반 성능 테스트로 브로커와 로드밸런싱 이슈를 개선했습니다.
문제 상황
- 대용량 메시지 트래픽, 1초 이내 전달, 인증·금칙어·관리 제재·영구 저장 요구사항
- 단일 채팅 룸의 과밀 방지를 위한 자동 분할·병합과 실시간 지표 모니터링 필요
구조와 흐름
- WebSocket 기반 채팅 서버와 분산 서버 간 Kafka 메시지 전달 구조
- Kafka Streams의 금칙어·도배 스트림 처리, Redis의 룸·접속 정보·최근 메시지 캐시
- Sink Processor를 통한 MongoDB 영구 저장과 Elasticsearch 지표 적재
선택 이유
- 처리 구간 부하 격리와 후처리 로직 확장성을 위한 비동기 처리 방식 채택
- 구현 난이도와 학습 기회를 고려한 Kotlin Coroutine 기반 비동기 프로그래밍 선택
- 서버 리소스 균등화와 룸 정보 관리 단순화를 위한 룸 분산 배치
성능/운영 포인트
- Pod당 동시접속 2천 명, 메시지 왕복 1초 이내 목표의 지속적 성능 테스트
- k6와 Kubernetes 기반 분산 부하 테스트, CloudWatch 연동 결과 확인
- Redis Pub/Sub·Google Cloud Pub/Sub·Round Robin 로드밸런서 이슈 검증 후 Kafka와 Consistent Hashing 적용



