0-1. 웹소켓이란?

  • WebSocket 프로토콜은 접속 확립에 HTTP를 사용하지만, 그 후의 통신은 WebSocket 독자의 프로토콜로 이루어진다.
  • header가 상당히 작아 overhead가 적은 특징이 있다.
  • 실시간 양방향 데이터 통신이 필요한 경우, 많은 수의 동시 접속자를 수용해야 하는 경우, 브라우저에서 TCP 기반의 통신으로 확장해야 하는 경우 등.
  • 응용 계층(OSI 7계층) 수준의 프로토콜
  • 주로 사용되는 경우
    • 동시 접속자 수 많고 빠른 반응이 필요한 서비스
    • 실시간 채팅, 알림, 주식 시세 등

0-2. HTTP vs 웹 소켓 차이점?

결정적인 차이는 프로토콜에 있다. HTTP는 질문하면 대답하는 통신, WebSocket은 서로 실시간 대화하는 통신

구분 HTTP WebSocket
통신 방식 요청/응답 기반 (Request-Response) 양방향 (Full-duplex)
연결 유지 매 요청마다 새 연결 (Stateless) 한 번 연결 후 계속 유지 (Stateful)
프로토콜 HTTP/1.1, HTTP/2 WebSocket(ws://, wss://)
헤더 크기 큼 (메타데이터 포함) 작음 (오버헤드 최소화)
서버 → 클라이언트 통신 불가능 (단, Polling, SSE 등으로 우회) 가능 (서버가 직접 Push 가능)
사용 목적 문서/리소스 전송 중심 실시간 데이터 교환 중심

1. WebSocketHandler

  • Spring Framework에서 웹소켓 통신을 처리하기 위한 기본 핸들러 클래스
  • WebSocket 연결 수립, 메시지 송수신, 연결 종료 등 이벤트 기반 콜백 메서드를 제공
  • 주로 TextWebSocketHandler를 상속받아 사용
  • 직접 세션 관리하고, 메시지 라우팅 에러처리 등을 구현해야 함
  • 텍스트 기반 통신을 기본
  • 단순한 실시간 알림, 주가 정보 등 가볍고 빠른 실시간 통신에 적합

2. STOMP (Simple Text Oriented Messaging Protocol)

  • WebSocket 위에서 동작하는 메시징 프로토콜
    • WebSocket이 단순 통로라면, STOMP는 그 통로 안의 대화 규칙(프로토콜)
  • 텍스트 기반 프로토콜
  • SEND, SUBSCRIBE, MESSAGE, CONNECT 등의 명령으로 메시지를 주고받음
  • Pub/Sub (발행 - 구독) 구조를 지원하며, 클라이언트가 토픽을 구독하면 서버가 해당 주제로 브로드캐스트 가능
  • Spring WebSocket + STOMP 구조
    • /app : 클라이언트 → 서버 메시지 경로
    • /topic : 서버 → 클라이언트 브로드캐스트
  • 메시지 브로커와 연동하여 확장성 있는 구조도 구축 가능
  • 장점
    • 메시징 구조가 표준화되어 관리/확장 용이
    • 브로커 연동으로 대규모 서비스 구현 가능
    • 구독/발행 구조로 다중 사용자 실시간 알림에 적합
  • 단점
    • 텍스트 기반으로 오버헤드가 존재
    • 구조가 복잡하고 저지연 고빈도 스트림에는 부적합

3. Socket.io

  • WebSocket을 우선 사용하지만, 브라우저가 지원하지 않거나 네트워크 제약이 있으면 fallback을 사용한다.
  • 즉, WebSocket 지원되면 WebSocket으로, 지원이 안 되면 HTTP Long polling으로 흉내낸다.
  • 이 방식 덕분에 모든 환경에서 ‘실시간 통신처럼’ 작동할 수 있다.
  • 이벤트 기반 아키텍처를 사용한다.
  • 클라이언트와 서버가 특정 이벤트 이름을 기준으로 메시지를 송수신한다.

4. 장단점

항목 WebSocketHandler STOMP Socket.io
기반 기술 WebSocket WebSocket + STOMP 프로토콜 WebSocket + fallback(HTTP)
언어/환경 Java(Spring) Java(Spring) Node.js
메시징 구조 직접 구현 Pub/Sub 구조 이벤트 기반
확장성 낮음 높음 (브로커 연동) 중간
데이터 형태 텍스트 / 바이너리 텍스트 텍스트 / 바이너리
주 사용처 실시간 알림, 주가 서비스 채팅, 알림, 방송형 서비스 실시간 협업, 채팅
특징 요약 단순·고성능 구조적·확장성 호환성·유연성

5. 정리

  • WebSocketHandler → WebSocket을 직접 다루는 Spring 구현체
  • STOMP → WebSocket 위에서 메시징 규칙을 추가한 프로토콜
  • Socket.io → WebSocket을 확장한 Node.js 라이브러리 (이벤트 기반 + fallback 지원)

결국 세 가지 모두 WebSocket을 기반으로 실시간 통신을 구현하는 방식

+ Recent posts