본문 바로가기
관리자

Programming-[Backend]/Java

[작성중] 서비스 버스, jms 등

728x90
반응형

개요

 

 

jms는 자바에서 제공하는 메시징 서비스이다. 메시징 서비스는 서로 다른 네트워크를 갖는 서비스(애플리케이션)들간에 데이터를 비동기적으로 받을 수 있게 해준다. 다시 말해 서비스 1과 서비스 2 사이에 직접적인 통신이 일어나는 것이 아니라 서비스 1과 서비스 2 사이에 서비스 버스라고 하는 큐(Queue)가 있어서 서비스 1과 서비스 2 사이의 통신을 받아들이고 저장하는 역할을 한다.

 

서비스 1에서 특정 로직이 끝나고 서비스 버스로 완료된 데이터가 담겨있는 문자열을 보내면 서비스 버스에 해당 데이터가 '메시지(레터)'라는 이름으로 쌓이게 할 수 있다. 그럼 서비스 2가 서비스 버스에 접근해서 이 데이터를 확인하고 서비스 2의 특정 로직을 실행하거나 관련 데이터베이스에 정보를 저장할 수 있게 된다. 서비스 2에서는 서비스 버스에 접근을 수동으로 할 수도 있지만, 구독의 형태로 설정하면 특정 시간마다 서비스 버스를 확인하고 데이터를 가져오게 할 수도 있다.

 

서비스 1과 서비스2가 직접적으로 연결된다면 서로의 시스템을 잘 알고 있어야 된다. 그리고 그에 맞게 시스템이 구성되어야 하며, 하나의 서비스에 문제가 생기면 두 서비스가 모두 영향을 받게될 수 있다. 하지만 서비스 버스를 통해 약한 결합성(loose coupling)을 갖고 있으면 두 서비스의 안정성이 커진다. 서비스1은 (받는 서비스가 서비스2든 서비스3이든) 서비스버스에 메시지를 쏘기만 하면 되고 서비스2는 서비스버스에서 메시지를 가져오기만 하면된다. 이렇게 메시징 서비스를 이용하면 신뢰성 있고 유연한 시스템을 만들 수 있게 된다.

 

jms는 비동기적인 방식의 통신에 해당하는 방법이다. 이메일, 채팅 등 제공자(발신자, Provider, Sender)가 데이터를 전송하면 무조건 큐에 쌓이고 이를 소비자(수신자, Consumer, Receiver)가 원할 때 소비할 수 있다. 상대되는 개념으로 동기식 통신 방식은 소켓 통신이다. 이 방법은 제공자가 전달한 정보를 소비자가 받아야만 통신이 이루어진 것으로 보는 방식이다.

 

대부분의 프로그램 언어는 메시징 서비스를 할 수 있는 인터페이스 집합(미리 코딩해놓은 세트 정도로 이해해도 됨)을 제공한다. 그리고 이를 활용하는 서비스들은 각 언어의 메시징 인터페이스에 맞게 api를 설정해두었다. 예를 들어 참조1)의 마이크로소프트 Azure에서는 아래 사진과 같이 Java, Python, JavaScript에 본인들의 메시징 서비스를 적용할 수 있는 방법을 기술해놓았다.

 

 

이 글에서는 자바, Azure를 중심으로 Service Bus 메시징을 공부한다.

 


 

JMS 구동 방식

 

 

JMS Message Model

 

point-to-point 방식과 publish/subscribe 방식이 있다.

 

point-to-point

발신자가 여러 명의 수신자 중 1명의 수신자를 특정하여 메시지를 전달하는 방식이다.

 

publish/subscribe

발신자가 토픽을 통해 많은 구독자들에게 메시지를 전달하는 방식이다. 구독자가 메시지를 받으려고 토픽에 따로 요청을 하지 않아도 자동으로 전달되는 푸시 기반 모델이다. 만약 구독자가 구독을 끊었다가 요청하면 그 동안 쌓인 메시지를 한번에 받을 수 있게 된다.

 

 

 


 

 

 

참조

 

https://docs.microsoft.com/ko-kr/azure/service-bus-messaging/

 

https://javacan.tistory.com/entry/13

 

https://waspro.tistory.com/124

 

 

 

 

 

 

728x90
반응형