HTTP, WebSocket, STOMP, TCP – 제대로 알고 쓰자!

seobin·2025년 3월 2일

1️⃣ OSI 7계층과 네트워크 프로토콜의 관계

학부 때 막 외웠던 OSI 7계층이 websocket을 구현하려고 공부하다보니 좀 와닿는다.
WebSocket, STOMP, TCP, HTTP가 OSI 7계층에서 어디에 속하는지 정리해보려 한다.

HTTP, WebSocket, STOMP : 응용 계층에서 동작하는 프로토콜
TCP : 전송 계층에서 신뢰성 있게 데이터를 전송하는 프로토콜

2️⃣ HTTP vs WebSocket vs STOMP vs TCP 차이점

📌 한 줄 요약

TCP는 데이터 전송을 책임지는 하위 프로토콜
HTTP는 요청-응답 방식 (REST API)
WebSocket은 실시간 양방향 통신 (채팅, 주식)
STOMP는 WebSocket에서 메시지를 주고받는 규칙을 정하는 프로토콜

3️⃣ WebSocket과 TCP의 관계

처음엔 WebSocket과 TCP가 같은건가 헷갈렸다.

✅ WebSocket은 TCP 기반 프로토콜이다.
WebSocket은 HTTP로 연결을 시작하지만, 연결이 성립되면 TCP 기반으로 동작한다.
즉, HTTP는 초기 연결용, WebSocket은 실제 데이터 전송을 위해 TCP를 사용한다.

💡 WebSocket 연결 과정

클라이언트가 HTTP 요청을 보냄

GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade

서버가 101 Switching Protocols로 응답

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade

이후부터는 TCP를 이용해 지속적인 데이터 주고받기 가능!
WebSocket은 내부적으로 TCP를 사용한다.

4️⃣ STOMP는 왜 필요할까?

WebSocket만으로도 데이터 전송이 가능한데, 왜 STOMP가 필요할까?

✅ WebSocket만 쓰면 이런 문제가 생김!

단순한 메시지 전송만 가능 (누구한테 보낼지 알 수 없음)
채팅방 기능, 구독 기능이 없음

✅ STOMP를 사용하면?

메시지 목적지를 지정할 수 있음 (/topic/chat, /queue/orders)
채팅방, 구독(Pub/Sub) 기능 추가 가능

📌 한 줄 정리
👉 WebSocket = 단순 데이터 통신
👉 STOMP = 메시지를 "누구한테 보낼지" 정하는 규칙

5️⃣ Redis Pub/Sub과 WebSocket 연결

WebSocket은 서버 1대에서만 동작하는데, 서버 여러 개가 있다면?
👉 서버 간 메시지를 공유하려면 Redis Pub/Sub을 사용해야 함!

✅ Redis Pub/Sub 방식

클라이언트 A는 서버 1에 연결됨
클라이언트 B는 서버 2에 연결됨
A가 메시지를 보내면, 서버 1이 Redis에 메시지를 발행(Publish)
서버 2가 Redis에서 메시지를 구독(Subscribe)하여 B에게 전달
이렇게 하면 서버 여러 개에서도 WebSocket을 사용할 수 있음!

정리

✅ TCP → 데이터를 신뢰성 있게 전달하는 기반 프로토콜
✅ HTTP → 요청하면 응답을 받는 REST API 방식 (한 번 요청하면 끝)
✅ WebSocket → 한 번 연결하면 계속 데이터를 주고받는 양방향 통신
✅ STOMP → WebSocket에서 "누구한테 보낼지"를 정하는 메시지 프로토콜
✅ Redis Pub/Sub → 여러 서버에서 WebSocket 메시지를 공유하기 위한 기술

0개의 댓글