부제: WebSocket/STOMP 기반 실시간 채팅 서비스
1. 한 줄 소개
WebSocket/STOMP 기반 실시간 채팅 서버를 직접 설계하고 구현한 개인 프로젝트입니다.
단순 메시지 송수신을 넘어서 읽음/안읽음 정합성, WebSocket 재연결 복구, Redis Write-Back, 장애 fallback, 파일 처리, 메시지 검색 UX까지 실제 채팅 서비스에서 발생할 수 있는 문제를 중심으로 구현했습니다.
2. 프로젝트 개요
처음에는 1:1 채팅 기능 구현을 목표로 시작했습니다.
하지만 기능을 확장하면서 실제 채팅 서비스에서는 단순히 메시지를 보내는 것보다 더 중요한 문제가 많다는 것을 알게 되었습니다.
예를 들어 다음과 같은 문제가 있었습니다.
- 메시지를 DB에 저장하기 전에 WebSocket으로 먼저 보내도 되는가?
- 채팅방 목록 unread count와 메시지별 unread count는 같은 개념인가?
- WebSocket 연결이 끊긴 동안 발생한 메시지는 어떻게 복구할 것인가?
- 메시지 발송이 많아질 때 채팅방 메타데이터 update 경합은 어떻게 줄일 것인가?
- Redis에만 반영되고 DB에 아직 동기화되지 않은 데이터는 장애 시 어떻게 보호할 것인가?
- 파일을 업로드했지만 메시지를 보내지 않은 경우 orphan file은 어떻게 처리할 것인가?
- 카카오톡처럼 검색 결과 위치로 이동하는 메시지 검색 UX는 어떻게 구현할 것인가?
이 프로젝트는 위 문제들을 직접 해결하면서 실시간성, 데이터 정합성, 장애 복구, 검색 UX, 확장 가능성을 함께 고려한 채팅 서버를 만드는 것을 목표로 했습니다.
3. 프로젝트 정보
3.1 프로젝트 정보