Loopin 메신저 개발기
백엔드
Loopin 메신저 개발기
두줄요약
오래된 메신저를 WebSocket과 STOMP 기반으로 재구축한 사례를 소개했습니다. Presence를 RDB로 관리해 단순한 구조와 운영 효율을 확보한 점이 핵심입니다.
문제 상황
- 오래된 메신저 구조가 변화하는 웹 환경과 유지보수 요구에 대응하기 어려운 상태
- HTTP 단방향 요청-응답만으로는 실시간 메시지 송수신과 접속 상태 관리 구현에 한계
- Redis, Kafka 같은 분산 인프라를 붙이는 방식은 규모 대비 운영 복잡도와 비용 상승 우려
구조와 흐름
- React 프론트엔드가 STOMP로 웹소켓 커넥션을 맺고 비동기 송수신 후 컴포넌트 단위 리렌더링
- Spring Boot 백엔드가 웹소켓 엔드포인트, JWT 검증, STOMP 라우팅, 이벤트 리스너를 담당
- RDB가 채팅 메시지와 Presence 세션 상태, 이력까지 함께 보존하는 단일 저장소 역할
선택 이유
- Raw WebSocket보다 STOMP 프레임 구조가 명확해 메시지 구분과 라우팅이 직관적
- Presence를 RDB에 두어 백업, 모니터링, 무결성, 감사 이력, JOIN 기반 조회를 단순화
- 외부 분산 캐시를 배제해 단순함과 운영 효율을 우선
적용해볼 점
- 실시간 기능도 요구사항과 규모에 따라 RDB 중심으로 단순하게 설계하는 접근
- 세션 로그와 상태값을 함께 관리해 접속 이력 추적성과 조회 편의성 확보
- WebSocket 세션 이벤트 기반으로 접속/종료를 명시적으로 처리하는 방식
