STOMP(Streaming Text Oriented Messaging Protocol)
웹 애플리케이션과 메시징 브로커(예: ActiveMQ, RabbitMQ) 또는 WebSocket 서버와의 상호작용을 위한 프로토콜
WebSocket
클라이언트와 서버 간의 실시간 양방향 통신을 제공하는 프로토콜입니다. 기존의 HTTP 프로토콜과 달리 지속적인 연결을 유지하며, 클라이언트와 서버 간에 데이터를 양방향으로 전송할 수 있습니다.
TCP(Transmission Control Protocol)
인터넷 프로토콜 스위트의 핵심 프로토콜 중 하나로, 데이터를 안정적으로 전송하기 위한 연결 지향 프로토콜
📌 Websocket의 원리
1️⃣ 클라이언트가 서버에 WebSocket 연결을 요청하기 위해 일반적인 HTTP GET 요청을 전송합니다. 이 요청은 HTTP 헤더에 특정한 업그레이드(Upgrade) 요청 헤더 필드를 포함시킵니다. 업그레이드 요청 헤더 필드의 값으로는 "websocket"이 사용됩니다.
2️⃣ 서버는 이 요청을 받아들이고, WebSocket 연결을 위한 응답을 반환합니다. 이 응답은 HTTP 상태 코드 101(Switching Protocols)를 포함하며, 응답 헤더에는 업그레이드 응답 헤더 필드와 커넥션(Connection) 헤더 필드가 포함됩니다.
3️⃣ 클라이언트는 이 응답을 받고, 서버와 WebSocket 연결이 성립되었음을 인지합니다. 클라이언트와 서버 간의 TCP 소켓 연결이 유지됩니다.
4️⃣ WebSocket 연결이 성립된 후에는 클라이언트와 서버 간에 추가적인 데이터 전송이 가능해집니다. 클라이언트와 서버는 원하는 시점에 데이터를 전송하고 수신할 수 있습니다. 이러한 데이터 전송은 바이너리 또는 텍스트 형식으로 이루어질 수 있습니다.
STOMP 메시지는 Header와 Body로 구성됩니다. Header는 메시지에 대한 부가 정보를 포함하고, Body는 실제 메시지 데이터를 담고 있습니다. 이를 통해 메시지를 유연하게 구성할 수 있습니다.
Publish-Subscribe 모델은 메시지를 발행(publish)하는 측과 메시지를 구독(subscribe)하는 측으로 나뉩니다.
발행자는 메시지를 특정 주제(topic)에 발행하고, 해당 주제를 구독한 모든 구독자는 해당 메시지를 수신합니다.
이 모델은 한 발행자가 여러 구독자에게 메시지를 전송할 수 있으며, 메시지를 받을 의사를 가진 구독자만 해당 메시지를 수신하게 됩니다.
Queue 모델은 메시지를 발행하는 측과 메시지를 큐(queue)에 저장하는 측으로 나뉩니다. 발행자는 메시지를 큐에 전송하고, 메시지를 받을 수신자는 해당 큐에서 메시지를 가져옵니다.
이 모델은 메시지를 받을 수신자가 한 명 뿐이며, 한 번에 하나의 메시지만 처리하게 됩니다. 메시지는 큐에 저장되어 순서대로 처리되며, 처리 후 큐에서 제거됩니다.
SUBSCRIBE: 구독자가 특정 주제(topic)를 구독함을 서버에 알립니다. 이후 발행자가 해당 주제에 메시지를 발행하면, 구독한 구독자는 해당 메시지를 수신합니다.
UNSUBSCRIBE: 구독자가 특정 주제의 구독을 취소함을 서버에 알립니다. 이후 해당 주제에 대한 메시지는 더 이상 해당 구독자에게 전송되지 않습니다.
SEND: 발행자가 메시지를 특정 주제에 발행합니다. 해당 주제를 구독한 모든 구독자에게 메시지가 전송됩니다.