Backend/Java

Spring - WebSocket + STOMP

개발자의 첫 걸음 2026. 1. 18. 09:38

안녕하세요. 오늘은 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