달력

102018  이전 다음

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
Is JMS?
 
JMS(Java Message System)는 비동기적 의미를 내포하고 있는 UDP 통신개념의 MailSystem과 유사하지만 Component간 통신이라는 점에서 다르다. JMS의 비동기적 메세지 전송은 아래 그림과 같이 MOM(Message Oriented Middleware)이 중간에서 Message를 받아두었다가 Receiver가 접속을 하면 Message를 전달해 주는 방식으로 이루어진다.



[Message System
architecture]
 
Messaging System의 경우 JMS API뿐 아니라 C와 같은 Non-Java AP를 위한 Lib Code를 제공하는 경우가 있는데 이런 경우에는 Java Application이 아닌 다른 언어로 개발된 Application과도 호환이 되기 때문에, JMS기반의 Messaging 시스템은 Mainframe이나 다른 Application들과 Java Application을 연동하는데 많이 사용이 되며, 근래에 많이 출시되는 EAI솔루션도 JMS를 이용하는 경우가 많다.
 
Feature of JMS
AP A AP B가 통신을 한다고 했을때, 통신하는 방법은 방식에 따라 data-centric이냐, interface-centric이냐로 분리될 수 있다. RMI, IIOP, SOAP 또는 직접 TCP Packet을 정의하여 socket으로 통신하는 방식은 interface-centric이라고 한다. 데이타를 보내는 Sender에서 데이타를 보내게 되고, receiver는 어떤 데이타 형이 올지를 알고 있다. (데이타 타입이 서로 약속되어 있다.) 그리고 sender recevier로 부터 어떤 데이타를 받을 것인지를 알고 있고, 그 데이타가 올때까지 기다리는 게 일반적인 흐름이다. 즉 서로 통신을 하는 AP들이 데이터 형이나 동작 방법에 대해서 알고 있는 경우가 된다. 그러나 JMS의 경우 data-centric 모델로, sender는 데이타를 보내기만 한다. Receiver data를 받았건 말건, 내지는 receiver의 수가 얼마가 되었는지는 상관하지 않는다. JMS에서는 sender JMS Messaging System에 데이타를 보내기만 한다. Receiver는 이렇게 Messaing System에 보내진 데이타를 중계해서 받는다. 이때 데이타 형은 미리 정해져 있지 않다. (물론 데이타를 받은 다음에는 알맞은 형으로 casting해야 된다. 그러나 데이타형을 몰라도 데이타를 받는 것 자체에는 문제가 없다.) 즉 메세지를 주고 받는데에 sender receiver간의 약속이 필요하지 않다.
 
Asynchronous messaging
기본적으로 JMS Messaging 시스템은 Async 방식의 Messaging을 지원한다. Interface-centric의경우, data send하면 ack를 받거나 return 값을 받을 때까지 sender waiting을 하게 된다. Receiver역시, 계속 sender로 부터 데이타가 오기를 기다린다. 이런 통신 방식은 sync 방식이라 한다. 그러나 Async방식은 sender는 일단 message 시스템에 데이타를 보낸다. Receiver가 받았는지 여부를 확인할 필요 없이, sender는 계속해서 메세지를 보내고, 메세지를 다 보냈으면 작업을 중단한다. Receiver sender로 부터 데이타가 오기만을 기다리는게 아니라, 필요할 때, message 시스템에 저장되어 있는 (sender로 부터 보내진) 메시지만 꺼내서 바로 사용하면 된다. sender receiver message 전송작업이 동시에 일어나지 않게 된다.
 
Reliable and unreliable messaging
앞에서 설명했듯이 JMS sender receiver의 상태에 상관없이 message를 무조건 보낸다고 설명했다. 여기서 집고 넘어가야 할 것이 그럼 어떻게 sender가 보낸 메시지가 receiver에 도착했는지를 보장할 수 있느냐는 것이다. (네트워크 문제나 기타 문제로 메세지가 유실 될 수 있다. ) 이건 JMS Messaging 시스템이 보장해준다. Reliable Messaging의 경우, sender가 데이타를 보냈으면 시스템이 중간에 다운되더라도, sender가 보낸 메세지는 receiver에게 도착할 수 있도록 보장한다. 이런 Reliable Messaging은 회사간 거래에서 중요한 데이타를 전송하는 모델 등에유용하게 사용될 수 있다. 그 밖에 실시간 데이타 처럼 신뢰성이 중요하지 않고 메세지가 전송되는 것이 중요하다면 unreliable Messaging을 이용하여, 별도의 보장 없이 메세지를 빨리 전송하는데 만 초점을 맞출 수 있다.
 
Message System에는 크게 2가지 방식
 
1.      PTP(Peer-To-Peer)


[PTP Message System Architecture]
 
PTP방식은 Sender Receiver Queue를 이용해서 Message를 주고 받는 형태이다. 또한 이 방식은 Sender가 보내는 Message는 오로지 한 Receiver만 받게 되어 있다. 그림처럼 Messaging Server Queue를 가지고 있어 Sender가 보낸 Message를 보관하고 있고, Receiver는 원하는 시간에 Message를 가져갈 수 있다. 이 때, ReceiverMessage Server에게 Message를 잘 받았다는 ACK신호를 보낸다.
 
2.      Pub/Sub (Publisher-Subscriber)방식



[Sub/Pub Message System Architecture]
 
Pub/Sub 방식은 Message를 받고 싶어하는 Subscriber들은 원하는 Topic에 등록한다. 그림처럼 PublisherMessaging Server가 가지고 있는 해당 Topic Message를 보내며, Messaging Server Topic에 등록되어 있는 Subscriber들에게 Message를 전달하는 구조이다.
Posted by Tornado tornado