Spring/Chat

[Protocol] STOMP Protocol

JWonK 2023. 10. 9. 22:10
728x90
반응형

기본적으로 채팅 서비스를 구현하기 위해서는 Half Duplex 방식의 HTTP보다 Full Duplex 방식의 Socket 통신을 기반으로 구현한다. 그리고 이 위에 메시징 전송을 효율적으로 하기 위해 프로토콜 STOMP Protocol이 존재한다.

 

채팅 서비스를 개발하기 이전에 STOMP Protocol이 무엇인지 알아보자.

 


▶ STOMP란 ?

STOMP는 Simple / Stream Text Oriented Messaging Protocol 의 약자이다.

Stomp Protocol

말 그대로 간단한 문자 기반 메세징 프로토콜이다. STOMP는 웹 상에서 텍스트 송 / 수신을 위해 미리 정의된 특정한 규칙이다.

 

STOMP에서 정의한 규칙을 준수하면 여러 언어, 여러 플랫폼 간 메세지를 상호 운영할 수 있다. 기본적인 구조는 

Publish - Subscribe 구조로 되어있다. 

(Publish - Subscribe 구조란 메세지를 공급하는 주체와 소비하는 주체를 분리해 제공하는 메세징 방법)

 

구조와 역할이 분리되어 있기 때문에 메세지를 전송하고 받아서 처리하는 부분이 확실히 분리되어있다.

 

 

 

▶ 전송 방식

STOMP는 HTTP와 마찬가지로 프레임(Frame)을 사용해 데이터를 전송하는 프로토콜이다.

(프레임이란, 주소와 명령 / 명령 수행을 위한 데이터가 모두 포함된 데이터를 의미)

 

기본적으로 텍스트 기반 통신을 사용하지만, 바이너리 기반 통신도 지원한다.

 

메세지 전송 방식은 TCP 위에서 STOMP에서 정의한 Frame구조로 Client와 Server 상호 간에 메세지를 전달한다.

STOMP는 메시지를 수신 할 대상 집합을 관리하는 일을 한다.

STOMP는 메시지에 대한 스펙만을 정의하고 있기 때문에, 기능 구현은 서버에 의존된다.

 

 

 

STOMP 특징

  • STOMP 프로토콜은 클라이언트 / 서버 간 전송할 메시지의 유형, 형식, 내용들을 정의한 규칙
  • TCP 또는 WebSocket과 같은 양방향 네트워크 프로토콜 기반으로 동작 (Full Duplex)
  • 헤더 값을 기반으로 통신 시 인증처리를 구현할 수 있음.

 

 

Pub / Sub 사이 Message Broker

  • Publisher로부터 전달받은 메시지를 Subscriber에게 메시지를 주고 받게 해주는 중간 역할을 한다.
  • 클라이언트는 Send, Subscribe 명령을 통해서 메시지의 내용과 수신 대상을 설명하는 "Destination" 헤더와 함께 메시지를 보내거나, 서버로 메시지를 보내 일부 작업을 요청할 수 있는 Pub / Sub 메커니즘을 가능케한다.
  • 기본적으로 In Memory Brocker를 사용하는데 몇 가지 단점이 있다.
    • 세션을 수용할 수 있는 크기 제한
    • 장애 시 메세지 유실
    • 모니터링 불편

 

 

채팅에 이에 대한 개념을 적용하면

  • 채팅방 생성 : Pub / Sub 즉, 구독자와 발행자 개념을 위해 Topic이 생성되었다 (Topic = 채팅방)
  • 채팅방 입장 : 채팅방에 입장하는 User가 구독자가 되어 Topic에 구독하는 개념
  • 메세지 전송 : Topic으로 메세지를 전송하거나 메세지를 받는다.
728x90
반응형

'Spring > Chat' 카테고리의 다른 글

[Java / Spring] Redis - Pub/Sub  (1) 2022.05.25