Spring Boot 기반의 채팅 기능을 구현할 때, 많이 사용하는 방법은
WebSocket 방식과 STOMP 방식이 있다.
이번에 채팅 기능을 구현하기 위해서 이 두가지 방식을 고민하였기에 이와 관련하여 포스트를 작성해보았다.
| 클라이언트와 <-> 서버 간에 양방향 통신을 처리하는 Protocol이다.
HTTP와 달리 연결을 한번 맺으면 지속적으로 데이터를 주고 받을 수 있음
| STOMP(Simple Text Oriented Messaging Protocol)는 WebSocket 위에서 동작하는 Messaging Protocol이다. 따라서 Stomp On WebSocket 명칭이 더 명확한 이름이다.
| 항목 | WebSocket 단독 | STOMP |
|---|---|---|
| 메시지 구조 | 개발자가 직접 정의 (JSON, String 등 자유) | STOMP 프레임 (header + body) |
| 구독/라우팅 | 직접 구현 | 내장 지원 (구독, 주제 기반 송신) |
| 서버 코드 | WebSocketHandler 구현, 로직 직접 작성 | @MessageMapping, @SendTo 이용해서 구현 |
| 외부 브로커 연동시 | 별도 개발 필요 | 쉽게 연동 (RabbitMQ, Redis 등) |
| 확장성 | 단일 서버 중심, 수평 확장 직접 구현 필요 | 브로커 통해 수평 확장 용이 |
| 성능 | 빠름, 가볍다 | STOMP 오버헤드 존재 |
| 활용 예시 | 단순 1:1 채팅, 소규모 채팅 앱 | 다수 채팅방, 알림, 대규모 채팅 |