
안녕하세요. 오늘은 Spring Boot WebSocket 그리고 STOMP에 대해 알아볼게요.

WebSocket이란?
WebSocket은 하나의 TCP 연결 위에서 전이중(Full-Duplex) 통신을 가능하게 하는 프로토콜이에요.
기존의 HTTP와 달리, 연결이 맺어진 후에는 클라이언트와 서버 모두 언제든지 상대방에게 데이터를 전송할 수 있어요.
⭐ 전이중(Full-Duplex) / 반이중(Half-Duplex)
전이중 통신은 통화하는 전화처럼, 서로 동시에 말하고 들을 수 있는 방식이에요.
WebSocket이 바로 이 전이중 통신을 사용해 클라이언트와 서버가 끊임없이 데이터를 주고받을 수 있도록 해요.
반이중 통신은 무전기처럼, 한 사람이 말하는 동안 다른 사람은 듣기만 해야 하는 방식이에요.
동시에 말하면 서로의 목소리가 섞여 알아들을 수 없어요.
통신 방식 진화 과정
폴링 방식 (1단계)
클라이언트 ──[요청]──> 서버
클라이언트 <──[응답]── 서버 (연결 종료)
(2초 대기)
클라이언트 ──[요청]──> 서버 (반복)
문제점: 불필요한 요청, 지연 발생
SSE 방식 (2단계)
클라이언트 ──[연결 요청]──> 서버
클라이언트 <══════════════ 서버 (연결 유지)
클라이언트 <──[서버 푸시]── 서버
장점: 즉시 전송
한계: 단방향 통신 (서버 → 클라이언트만)
WebSocket 방식 (3단계)
클라이언트 ──[핸드셰이크]──> 서버
클라이언트 <══════════════> 서버 (양방향 연결)
클라이언트 ──[메시지]────> 서버
클라이언트 <──[메시지]──── 서버
장점: 양방향 실시간 통신
WebSocket 핸드셰이크 과정
WebSocket 연결은 HTTP 요청으로 시작되어 WebSocket 프로토콜로 업그레이드돼요.
1단계: 클라이언트 요청
GET /websocket HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
2단계: 서버 응답
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
3단계: WebSocket 연결 완료

즉, 앞의 프로토콜이 http에서 ws (WebSocket)로 바뀌어요.
STOMP란?
STOMP(Simple Text Oriented Messaging Protocol)는
WebSocket 위에서 동작하는 “메시지 규칙(프로토콜)”이에요.

STOMP는 왜 필요할까?
WebSocket은 연결만 제공해 줘요.
즉, 메시지 형식과 구독개념, 브로드캐스트 이런건 모두 직접 만들어야 해요.
STOMP는 메세지 목적지(destination)와 구독(subscribe) / 발행(publish),
그리고 메세지 브로커 개념과 채팅, 알람 같은 구조를 구현할 수 있어요.
WebSocket vs WebSocket + STOMP
| 구분 | WebSocket | WebSocket + STOMP |
| 통신 방식 | raw 메시지 | 구조화된 메시지 |
| 메시지 규칙 | 직접 정의 | STOMP가 제공 |
| 구독/발행 | 직접 구현 | 기본 지원 |
| 브로드캐스트 | 복잡 | 간단 |
| 채팅/알림 | 어려움 | 매우 쉬움 |

여기까지 WebSocket에 대해 알아봤는데요.
폴링부터 WebSocket + STOMP까지, 실시간 통신의 흐름과 핵심 개념을 처음으로 정리해 볼 수 있었어요.
'Backend > Java' 카테고리의 다른 글
| Spring - SSE (0) | 2026.01.16 |
|---|---|
| Spring - Polling (0) | 2026.01.13 |
| Spring - PersistRepository (0) | 2026.01.06 |
| 결제 시스템 구축 - 핵심 개념 정리 (0) | 2026.01.02 |
| 이메일 중복방지 (0) | 2025.12.31 |