Home Spring에서 STOMP을 활용하기 위한 이론 지식
Post
Cancel

Spring에서 STOMP을 활용하기 위한 이론 지식

STOMP란?

  • Simple Text Oriented Messaging Protocol는 간단한 텍스트 기반의 메시징 프로토콜이다.
  • 웹 소켓 위에서 동작하며, 클라이언트와 서버 간의 비동기 통신을 위해 설계됐다.
  • TCP 또는 WebSocket 같은 양방향 네트워크 프로토콜 기반으로 동작
  • pub/sub 구조로 동작

프로토콜 특징

  • 텍스트 기반 : 사람이 읽을 수 있는 형식으로 되어 있어 디버깅이 쉽다.
  • 경량화 : 최소한의 프로토콜 오버헤드로 설계되어 있다.
  • 언어 독립적 : 다양한 프로그래밍 언어에서 구현 가능하다.

기본 개념

  • Frame : STOMP 메시지의 기본 단위이다.
  • Command : 각 프레임의 시작 부분에 있는 동작을 나타내는 문자열이다.
  • Header : 키-값 쌍으로 이루어진 메타데이터이다.
  • Body : 선택적인 메시지 페이로드이다.

Pub/Sub

  • 발행/구독 구조
  • publisher가 특정 topic에 메시지를 보내면 해당 topic을 구독하고 있는 subscriber 모두에게 메시지가 전달되는 구조이다.

주요 명령어

  • CONNECT : 서버와의 연결을 초기화 한다.
  • SUBSCRIBE : 특정 목적지의 메시지를 구독한다.
  • SEND : 메시지를 특정 목적지로 전송한다.
  • DISCONNECT : 서버와의 연결을 종료한다.

사용 예시

  • 실시간 채팅 애플리케이션
  • 주식 시세 업데이트
  • 실시간 협업 도구
  • IoT 디바이스 통신

장점

  • 간단한 구현 : 복잡한 설정 없이 빠르게 구현할 수 있다.
  • 높은 호환성 : 다양한 언어와 플랫폼에서 지원된다.
  • 확장성 : 커스텀 헤더를 통해 프로토콜을 확장할 수 있다.

단점

  • 성능 : 텍스트 기반이기 때문에 이진 프로토콜에 비해 효율성이 떨어질 수 있다.
  • 기능 제한 : 복잡한 메시징 시나리오에는 부적합할 수 있다.

Spring에서 활용하기 위해 알아둬야할 점

Spring WebSocket 지원

  • Spring 프레임워크는 WebSocket과 STOMP를 위한 강력한 지원을 제공한다.
  • spring-websocket 모듈을 통해 websocket 서버를 쉽게 구현할 수 있다.

STOMP 메시징 아키텍처

  • Message Broker : 클라이언트 간 메시지 라우팅을 담당한다.
  • Destination : 메시지의 목적을 나타내는 문자열이다.
  • Message Mapping : 특정 Destination으로 오는 메시지를 처리하는 메서드를 매핑한다.

주요 어노테이션

  • @EnableWebSocketMessageBroker: WebSocket 메시지 브로커를 활성화한다.
  • @MessageMapping: 특정 destination으로 오는 메시지를 처리할 메서드를 지정한다.
  • @SubscribeMapping: 구독 요청을 처리하는 메서드를 지정한다.
  • @SendTo: 메서드의 반환값을 특정 destination으로 전송한다.
  • @SendToUser: 특정 사용자에게만 메시지를 전송한다.

구성 클래스

  • WebSocketMessageBrokerConfigurer 인터페이스를 구현하여 STOMP 설정을 커스터마이즈한다.
  • configureMessageBroker(): 메시지 브로커 옵션을 설정한다.
  • registerStompEndpoints(): STOMP 엔드포인트를 등록한다.

메시지 브로커 유형:

  • Simple Broker: 메모리 내 메시지 브로커로, 간단한 애플리케이션에 적합하다.
  • Full-featured Broker: RabbitMQ나 ActiveMQ 같은 외부 메시지 브로커를 사용한다.

보안:

  • Spring Security와 통합하여 WebSocket 연결과 메시지에 대한 인증 및 권한 부여를 구현할 수 있다.
  • STOMP headers를 통해 인증 토큰을 전달할 수 있다.

에러 핸들링:

  • @MessageExceptionHandler를 사용하여 메시지 처리 중 발생하는 예외를 처리할 수 있다.

클라이언트 측 연동:

  • SockJS: WebSocket을 지원하지 않는 브라우저를 위한 폴백 옵션을 제공한다.
  • STOMP.js: 클라이언트 측에서 STOMP 프로토콜을 쉽게 사용할 수 있게 해주는 JavaScript 라이브러리이다.

세션 관리:

  • WebSocketHandler를 구현하여 WebSocket 세션의 생명주기를 관리할 수 있다.
  • 연결, 연결 해제, 에러 등의 이벤트를 처리할 수 있다.

메시지 변환:

  • MessageConverter를 구현하여 메시지 페이로드의 직렬화/역직렬화를 커스터마이즈할 수 있다.
  • 기본적으로 JSON 변환을 지원합니다.

인터셉터:

  • ChannelInterceptor를 구현하여 메시지 처리 파이프라인에 로직을 추가할 수 있다.
  • 메시지 필터링, 수정, 로깅 등에 사용됩니다.

테스트:

  • Spring Test 모듈은 WebSocket과 STOMP 메시징을 위한 테스트 지원을 제공한다.
  • StompEndpointRegistryStompClient를 사용하여 통합 테스트를 작성할 수 있다.
This post is licensed under CC BY 4.0 by the author.

단일 시계열 모델 분석-ARIMA

Reactive Programming 이론