
백엔드
Hive 채팅 시스템 구축기
두줄요약
Hive 채팅 시스템의 실시간 통신 구조와 라우팅, 부가기능 분리 전략을 정리했습니다. Netty, WebSocket, Akka, gRPC, Armeria를 활용한 설계 고민을 공유했습니다.
구조와 흐름
- Hive 채팅 시스템의 구축 경험과 설계 고민을 공유하는 기술 글
- 실시간 채팅을 위해 Netty 기반 커넥션 관리와 WebSocket 프로토콜 구성
- 메시지 라우팅을 위해 Akka ActorSystem과 Receptionist를 활용한 서버 간 전달 구조 설계
- 비속어 필터링과 로그 저장 등 부가 기능은 Worker 서버와 gRPC, Armeria로 분리 처리
선택 이유
- HTTP의 요청-응답, 비연결성 모델은 실시간 양방향 채팅에 부적합
- WebSocket은 실시간 메시지 송수신에 적합하고, Netty는 커넥션 관리와 이벤트 처리에 유리
- Akka는 서버 위치를 몰라도 Actor 호출이 가능해 분산 라우팅 단순화
- gRPC와 Armeria는 비동기 통신, 확장성, 안정성 측면에서 부가기능 처리에 적합
주의할 점
- ChannelPipeline 등록 순서에 따라 ping/pong 기반 유휴 커넥션 처리 가능 여부가 달라짐
- PacketType이 늘어날수록 분기 처리 복잡도 증가
- WebSocket은 비동기 통신이므로 요청과 응답 식별을 위한 패킷 구분 필요
- 외부 통신에는 CircuitBreaker와 Retry 같은 장애 대응 설정 필요
