Spring / Websocket(싱글,멀티) / Stomp

손종일·2023년 5월 27일

글 정리하면서 생각정리하기!


WebSocketSession은 Spring WebSocket에서 제공하는 인터페이스이며 클라이언트와 서버 간의 연결 상태를 나타내는 객체입니다. 이 객체를 통해 메시지를 보내고 받을 수 있으며, 연결의 상태를 추적하고 관리할 수 있습니다.


STOMP (Simple Text Oriented Messaging Protocol) 라이브러리를 사용하면 WebSocketSession session을 명시적으로 다룰 필요 없이 WebSocket을 통한 실시간 통신을 간편하게 처리할 수 있습니다.

STOMP는 메시지 기반의 프로토콜로, WebSocket을 사용하여 클라이언트와 서버 간에 실시간으로 메시지를 주고받을 수 있게 해줍니다. STOMP는 메시지 전송, 구독 및 대기열 등의 기능을 제공하며, 실시간 채팅 애플리케이션과 같은 실시간 업데이트가 필요한 기능을 구현하는 데 매우 유용합니다.

Spring 프레임워크에서는 STOMP를 지원하는 spring-messaging과 spring-websocket 모듈을 제공합니다. 이를 통해 WebSocket 연결을 설정하고 STOMP 프로토콜을 사용하여 클라이언트와 서버 간의 메시지 교환을 처리할 수 있습니다.

STOMP를 사용하면 WebSocketSession을 명시적으로 다루지 않아도 됩니다. 대신, STOMP 프로토콜을 사용하여 클라이언트와 서버 간의 메시지를 주고받을 수 있습니다. STOMP는 구독-발행 (subscribe-publish) 모델을 기반으로 하며, 클라이언트는 특정 주제를 구독하고 서버는 해당 주제로 메시지를 발행할 수 있습니다.

STOMP를 사용하면 클라이언트와 서버 간의 실시간 통신을 훨씬 쉽게 구현할 수 있으며, WebSocketSession을 직접 다룰 필요가 없어서 개발과 유지보수가 간소화됩니다.


STOMP를 사용할 때에는 여러 개의 WebSocket 연결이 필요하지 않습니다.

STOMP는 WebSocket을 통해 클라이언트와 서버 간의 통신을 처리하는 프로토콜입니다. WebSocket은 단일 연결을 통해 양방향 통신을 지원하며, STOMP는 이 WebSocket 연결을 활용하여 메시지를 주고받습니다.

즉, 클라이언트와 서버 간의 단일 WebSocket 연결을 설정하고, 이 연결을 사용하여 STOMP 프로토콜을 사용하여 메시지를 주고받을 수 있습니다. 이를 통해 여러 개의 채팅방이나 게시글에 대한 실시간 업데이트를 단일 WebSocket 연결로 처리할 수 있습니다.

클라이언트는 STOMP 클라이언트 라이브러리를 사용하여 STOMP 프로토콜을 구현하고, 서버는 STOMP 서버 엔드포인트를 설정하여 클라이언트와의 STOMP 통신을 처리합니다. 단일 WebSocket 연결을 통해 여러 클라이언트와의 STOMP 통신을 처리할 수 있습니다.


STOMP를 사용하여 여러 개의 채팅방을 처리하는 방법은 다음과 같습니다:

  1. 채팅방 구분을 위한 주제(Topic) 사용: STOMP는 구독-발행(subscribe-publish) 모델을 기반으로 합니다. 각 채팅방은 고유한 주제(topic)를 가지고 있으며, 클라이언트는 특정 주제를 구독(subscribe)하여 해당 채팅방의 메시지를 수신할 수 있습니다.

  2. 클라이언트가 채팅방에 구독: 클라이언트는 원하는 채팅방의 주제에 대해 STOMP 프로토콜을 사용하여 구독 요청을 서버에 보냅니다. 이렇게 하면 클라이언트는 해당 채팅방에 대한 실시간 업데이트를 받을 수 있습니다.

  3. 서버에서 메시지를 발행: 서버는 새로운 메시지가 생성되면 해당 채팅방의 주제로 메시지를 발행(publish)합니다. 이는 해당 채팅방에 구독한 모든 클라이언트에게 메시지가 전달됨을 의미합니다.

  4. 클라이언트가 메시지 수신: 클라이언트는 해당 채팅방에 대한 구독을 통해 새로운 메시지를 수신합니다. 수신된 메시지는 클라이언트의 화면에 표시되거나 처리될 수 있습니다.

STOMP의 주제(Topic) 개념을 활용하여 여러 개의 채팅방을 단일 소켓으로 처리할 수 있습니다. 클라이언트는 원하는 채팅방의 주제에 대해 구독하고, 서버는 해당 채팅방의 주제로 메시지를 발행하여 구독한 클라이언트에게 메시지를 전달합니다. 이를 통해 각각의 채팅방을 독립적으로 다룰 수 있고, 실시간 업데이트를 제공할 수 있습니다.


STOMP (Simple Text Oriented Messaging Protocol) 라이브러리가 단일 소켓으로 여러 개의 채팅방을 관리할 수 있는 이유는 STOMP 프로토콜의 기능과 WebSocket의 특성에 기인합니다.

STOMP 프로토콜은 구독-발행(subscribe-publish) 모델을 기반으로 하며, 클라이언트는 특정 주제(topic)에 대해 구독하여 해당 주제에 대한 메시지를 수신할 수 있습니다. 이를 통해 여러 개의 채팅방을 구분하고, 각 채팅방에 대한 실시간 업데이트를 단일 소켓으로 처리할 수 있습니다.

단일 WebSocket 연결을 통해 여러 개의 채팅방을 처리할 수 있는 이유는 다음과 같습니다:

STOMP 프로토콜의 구독-발행 기능: STOMP는 클라이언트가 특정 주제를 구독하고, 서버는 해당 주제로 메시지를 발행할 수 있는 기능을 제공합니다. 이를 통해 클라이언트는 원하는 채팅방의 주제를 구독하고, 서버는 해당 채팅방의 주제로 메시지를 발행하여 구독한 클라이언트에게 메시지를 전달할 수 있습니다.

WebSocket의 양방향 통신: WebSocket은 양방향 통신을 지원하며, 클라이언트와 서버 간에 실시간으로 데이터를 주고받을 수 있습니다. 이를 통해 서버는 단일 WebSocket 연결을 통해 여러 클라이언트와 통신하고, 각 클라이언트는 원하는 채팅방의 주제를 구독하여 해당 채팅방에 대한 업데이트를 받을 수 있습니다.

서버의 메시지 라우팅: 서버는 클라이언트가 메시지를 발행할 때마다 해당 메시지를 적절한 채팅방으로 라우팅할 수 있습니다. 클라이언트가 특정 채팅방에 메시지를 발행하면 서버는 해당 채팅방의 주제로 메시지를 발행하여 해당 채팅방에 구독한 클라이언트에게 전달합니다.

이러한 기능과 특성을 활용하여 STOMP 라이브러리를 사용하면 단일 소켓으로 여러 개의 채팅방을 관리할 수 있습니다.


STOMP를 사용하면 클라이언트와 서버 간의 메시지 교환을 쉽게 할 수 있고, 채팅 기능을 구현하기에 편리한 기능을 제공할 뿐, STOMP를 사용하던 안하던 싱글소켓/멀티소켓은 목적에 따라 구현하는 것임.

단일 소켓 방식의 채팅프로그램이 다중 소켓 방식보다 항상 좋다고 일반화할 수는 없습니다. 성능이나 효율성은 많은 요소에 영향을 받으며, 상황에 따라 다를 수 있습니다.

단일 소켓 방식의 장점은 다음과 같습니다:

네트워크 연결 수의 감소: 클라이언트마다 하나의 WebSocket 연결만 필요하므로 네트워크 연결 수가 적어집니다. 이는 서버에 대한 부하를 줄일 수 있습니다.

서버 리소스 사용량 감소: 하나의 연결을 통해 여러 클라이언트와 통신하므로, 리소스 사용량이 상대적으로 적어집니다.

개발 편의성: 단일 소켓을 사용하므로 관리 및 유지보수가 상대적으로 간편할 수 있습니다. 채팅방 관리, 메시지 라우팅 등의 기능을 쉽게 구현할 수 있습니다.

다중 소켓 방식의 장점은 다음과 같습니다:

독립성: 각각의 클라이언트에 대해 별도의 소켓 연결이 있으므로, 채팅방 간에 독립적인 통신이 가능합니다. 이는 확장성과 유연성을 제공할 수 있습니다.

세밀한 제어: 각 클라이언트에 대한 소켓 연결을 개별적으로 관리할 수 있어서, 특정 클라이언트에 대한 동작을 세밀하게 제어할 수 있습니다.

단일 소켓 방식은 일반적으로 개발 편의성과 리소스 사용량의 감소로 인해 선호되는 경향이 있습니다. 그러나 다중 소켓 방식은 특정 상황에서 필요한 세밀한 제어나 독립성이 요구될 때 유용할 수 있습니다.

결국, 채팅프로그램의 성능과 선택은 애플리케이션의 요구사항과 상황에 따라 달라집니다. 어떤 방식을 선택하든 그에 맞는 성능 테스트와 평가를 통해 최적의 방법을 결정하는 것이 좋습니다.

profile
아자아자 화이팅!

0개의 댓글