[Spring boot] 'WebSocket' VS 'STOMP'

Yong·2025년 7월 5일

Spring Boot 기반의 채팅 기능을 구현할 때, 많이 사용하는 방법은
WebSocket 방식과 STOMP 방식이 있다.
이번에 채팅 기능을 구현하기 위해서 이 두가지 방식을 고민하였기에 이와 관련하여 포스트를 작성해보았다.

WebSocket

| 클라이언트와 <-> 서버 간에 양방향 통신을 처리하는 Protocol이다.
HTTP와 달리 연결을 한번 맺으면 지속적으로 데이터를 주고 받을 수 있음

  • 특징
    • WebSocket 자체는 단순히 메시지를 주고 받기 위한 파이프임
    • 자유도가 높음
    • 메시지의 전송, routing 등을 구조와 프로토콜을 직접 구현해야 함

STOMP

| STOMP(Simple Text Oriented Messaging Protocol)는 WebSocket 위에서 동작하는 Messaging Protocol이다. 따라서 Stomp On WebSocket 명칭이 더 명확한 이름이다.

  • 특징
    • 메시지 주고 받을시에 구조와 규칙 제공, 구독과 routing을 지원
    • 메시지 Header, body 구조가 정의됨

'WebSocket' VS 'STOMP'

항목WebSocket 단독STOMP
메시지 구조개발자가 직접 정의 (JSON, String 등 자유)STOMP 프레임 (header + body)
구독/라우팅직접 구현내장 지원 (구독, 주제 기반 송신)
서버 코드WebSocketHandler 구현,
로직 직접 작성
@MessageMapping, @SendTo 이용해서 구현
외부 브로커 연동시별도 개발 필요쉽게 연동 (RabbitMQ, Redis 등)
확장성단일 서버 중심,
수평 확장 직접 구현 필요
브로커 통해 수평 확장 용이
성능빠름, 가볍다STOMP 오버헤드 존재
활용 예시단순 1:1 채팅, 소규모 채팅 앱다수 채팅방, 알림, 대규모 채팅

그렇다면 어떤거 쓸까?

WebSocket 사용

  • 1:1 채팅 또는 소규모 채팅방
  • 단일 채팅룸
  • 서버 로직 직접 control 하고 싶은 경우
  • 외부 브로커(redis, rabbitMQ 등) 없어도 되는 경우

STOMP On WebSocket 사용

  • 다수의 채팅방, 그룹 채팅, 커뮤니티형 채팅
  • 사용자별 구독 (특정 채널 알림), 실시간 알림
  • 지속적 확장 또는 브로커 연동 필요한 경우
profile
Coram Deo

0개의 댓글