Stomp 통신

ss0510s·2024년 5월 23일
0

WebSocket

목록 보기
1/5
post-thumbnail

Websocket

클라이언트와 서버를 연결하고 실시간으로 통신이 가능하도록 하는 통신 프로토콜

  • 클라이언트가 초기에 HTTP GET으로 Handshake 요청 시 upgrade 헤더를 사용하여 웹소켓을 사용할 것을 서버에 알림

  • 서버는 클라이언트의 요청에 대해 HTTP 101 Switching Protocols 응답 코드로 응답하고 이후부터 웹소켓 프로토콜을 사용하여 통신

  • TCP/IP 기반으로 동작

  • 특징

    • 지속적인 연결을 통해 클라이언트와 서버 간에 데이터를 실시간으로 전송, 수신 가능
    • 실시간 채팅, 게임, 주식 시세 업데이트 등에 많이 사용
    • 웹소켓 API를 사용하여 클라이언트와 서버 간의 통신을 구현할 수 있으며, 다양한 언어와 프레임워크에서 지원

STOMP(Simple Text Oriented Message Protocol)

  • STOMP는 WebSocket 프로토콜 위에서 동작하는 메시지 송수신을 효율적으로 처리하기 위해 개발된 프로토콜
  • STOMP는 pub/sub 구조로 되어 있어 메시지 송수신 처리 부분이 명확하게 정의되어 있어 메시징 처리를 간편하게 할 수 있음
  • 채팅 서버 개발에 용이하고 효율적인 메시징 처리 가능
  • 중개 서버를 통해서 클라이언트 간에 비동기적으로 메시지를 전송하기 위한 프로토콜
  • 텍스트 기반의 메시지 형식 정의 ⇒ 단순성, 상호운용성
  • 특징
    • Spring이 기본적으로 제공하는 내장 메시지 브로커가 아닌 외부 메시지 큐(RabbitMQ, ActiveMQ, Kafka 등)를 연동해서 사용
    • 연결 주소마다 새로운 Handler를 구현하고 설정해줄 필요 없음
    • 클라이언트에서 메시지를 보내면, 해당 메시지는 @MessageMapping에서 처리
    • STOMP의 destination 및 message type을 기반으로 메세지를 보호하기 위해 스프링 시큐리티를 사용할 수 있다.
  • STOMP의 동작방식
    • STOMP는 pub/sub 패턴으로 동작
    • pub/sub 패턴은 메시지를 발행하는 곳과 해당 메시지를 구독하는 곳이 분리되어 있으며, 발행된 메시지는 여러 개의 구독자에게 동시에 전달

  • Subscribe: 하나의 채널을 클라이언트가 구독
  • publish: 하나의 채널을 구독 중인 모든 클라이언트에게 메시지 발행
  • STOMP 서버
    • 메시지가 전송될 수 있는 여러 목적지(채널)으로 구성
    • 각 목적지는 형식이 정해져있지 않은 문자열
    • 메시지 전송 전략을 따로 정의하지 않고, 서버와 목적지 별로 달라질 수 있음
  • STOMP 클라이언트
    • 생산자로서 SEND 프레임을 통해 서버에게 메시지를 보냄
    • 소비자로서 SUBSCRIBE 프레임을 사용해 특정 목적지에 메시지를 보내고, MESSAGE 로 프레임을 받음

메시지 브로커

  • 메시지 브로커는 애플리케이션, 시스템 및 서비스가 서로 간에 통신하고 정보를 교환할 수 있도록 해주는 SW
    • 정규 메시징 프로토콜 간에 메시지를 변환함으로써 수행
    • 상호 의존적인 서비스들이 서로 다른 언어나 플랫폼으로 개발된 경우에도 통신이 가능해짐
  • 메시징 미들웨어 또는 메시지 지향 미들웨어(MOM) 솔루션 내의 SW 모듈
    • 애플리케이션 컴포넌트 간에 데이터 흐름을 처리하는 표준화된 수단을 제공
    • 여러 플랫폼에서 개발된 애플리케이션이 내부적으로 통신할 수 있도록 해주는 분산 통신 계층 역할 수행
  • 메시지를 검증, 저장, 라우팅하고 이를 적절한 대상에 전달할 수 있음
    • 다른 애플리케이션 간의 중개자 역할
    • 수신자의 구체적인 상태를 몰라도 송신자가 메시지를 발행할 수 있도록 도와줌
  • 메시지 큐를 이용함
    • 데이터의 패킷을 순서대로 저장해 소비될 때까지 갖고있음
    • 데이터 손실을 방지하고 연결에 장애가 발생해도 시스템이 계속 동작할 수 있도록 도움
    • 수신 서비스의 응답을 기다릴 필요가 없이 서비스 간의 비동기 통신이 가능
profile
개발자가 되기 위해 성장하는 중입니다.

0개의 댓글