카테고리 없음

WebSocket과 STOMP 비교

patrck_jjh 2025. 8. 3. 22:05

 

 

1. WebSocket

 

개념

  • 클라이언트와 서버 간 실시간 양방향 통신을 가능하게 하는 프로토콜
    • WebSocket 이전에는 서버가 실시간 데이터를 보내기 위해 폴링(polling), 롱 폴링(long polling), 스트리밍(streaming) 같은 우회 방식들이 사용되었으나, WebSocket은 이러한 문제를 근본적으로 해결
  • WebSocket은 최초 handshake 요청 후 연결 지속
    • 최초 연결시 HTTP헤더를 통해 token과 같은 인증 정보를 보내 인증처리 가능
    • 최초 연결 이후 별도 http메시지 없이 통신 가능(http -> WebSocket 프로토콜로 전환되어 TCP연결 유지)

 


특징

  • HTTP통신과 다르게 http:가 아닌 ws://의 url사용
  • 구현이 복잡(최초 handshake 이후 연결이 계속 유지되므로 서버가 각 연결의 상태를 직접 관리)
    • 별도 메모리에 세션 정보 저장: ConcurrentHashMap 같은 스레드-안전한 자료구조 사용
    • 메모리 누수 방지: 사용자가 연결 끊기는 경우 연결 종료 이벤트(SessionDisconnectEvent)에서 세션 제거 필요(세션 정보 쌓이면 서버에 부하)

 


 

 

2. STOMP

 

개념

  • 웹소켓 위에서 동작
    • Simple Text Oriented Messaging Protocol의 약자로 WebSocket 기반으로 동작하는 메시징 프로토콜을 의미
  • 텍스트 기반 메시징 프로토콜
    • 메시지는 사람이 읽을 수 있는 텍스트 형태의 프레임(Frame)으로 구성
    • 각 프레임은 명령(Command), 헤더(Header), 그리고 본문(Body)으로 구성
  • Publish-Subscribe(pub-sub) 구조
    • 메시지를 보내는 쪽(Publisher)과 받는 쪽(Subscriber)을 분리해서 작동
    • 메시지는 특정 주제(topic)나 큐(queue)를 통해 전달
  • 브로커를 통한 메시지 중계
    • 클라이언트가 메시지를 보내면 메시지 브로커(서버 내 혹은 외부)가 해당 메시지를 받아서 구독자들에게 전달하는 역할을 수행

 

 

 

WebSocket과 STOMP비교 

 

구분 WebSocket  STOMP
계층 전송(Transport) 프로토콜 - TCP 위에서 동작 애플리케이션(Application) 메시징 프로토콜
- 웹소켓 위에서 동작
기능 단순 양방향 실시간 통신
채팅 등 단순 송수신 중심
Pub/Sub(구독/발행), 목적지별 라우팅, 브로커 지원, 프레임 명령어 관리 등 고수준 메시징
확장성 Pub/Sub, 브로커, 라우팅 등 직접 구현 필요(구현 복잡) 주제(topic), 큐(queue) 등 구독 구조와 메시지 라우팅(브로커 연동 쉽게 지원)
디버깅/가독성 데이터 형식 자유(직접 정의)로 로깅·분석 난이도 다소 높음 사람이 읽을 수 있는 텍스트 기반, 프레임/명령어 구분 명확(디버깅 쉬움)
적용 예시 실시간 채팅, 게임, 실시간 데이터(주식·위치 등) 채팅, 협업툴, 실시간 알림, 메시지 브로커 연동 서비스 등

 

  • 웹소켓은 단순히 서버-클라이언트 간 실시간 데이터 전송용 채널 제공
  • STOMP는 웹소켓 위에서 동작하며, 채팅방, 주제(topic) 등 “어떤 메시지가 어디로 가야 하는지”를 정해주는 메시징 규칙과 구조를 제공 -> 개발을 더 쉽고 확장성 있게 만들어줌 

 

 


 

reference

인프런 <웹소켓/STOMP 채팅서비스(spring, vue, redis)> 강의