Sun Java System Message Queue 3.7 UR1 기술 개요

메시지 지향 미들웨어(Message-Oriented Middleware(MOM))

기업, 공공 기관 및 기술은 지속적으로 변화하므로 이러한 기관 및 기술에 사용되는 소프트웨어 시스템은 그러한 변화를 수용할 수 있어야 합니다. 기업을 합병하거나 서비스를 추가하거나 사용 가능한 서비스를 확장한 후 정보 시스템을 다시 구축하기가 어려울 수 있습니다. 새 구성 요소를 통합하거나, 기존 구성 요소를 가능한 한 효과적으로 확장하는 것이 가장 중요합니다. 이기종 구성 요소를 통합하는 가장 쉬운 방법은 이기종 구성 요소를 동종 요소로 다시 만드는 것이 아니라 차이점과 상관없이 구성 요소 간의 통신을 가능하게 해 주는 계층을 제공하는 것입니다. 이 계층을 미들웨어라 하며, 이는 독립적으로 개발되어 서로 다른 네트워크 플랫폼에서 실행되는 소프트웨어 구성 요소(응용 프로그램, Enterprise Java Bean, 서블릿 및 기타 구성 요소) 간의 상호 작용을 가능하게 해 줍니다. 이 상호 작용이 가능할 때 네트워크가 컴퓨터가 될 수 있습니다.

그림 1–1에 표시된 것처럼 개념적으로 미들웨어는 응용 프로그램 계층과 플랫폼 계층(운영 체제 및 기본 네트워크 서비스) 사이에 있습니다.

그림 1–1 미들웨어

그림에서는 응용 프로그램과 구성 요소가 미들웨어를 통해 통신할 수 있음을 보여 줍니다. 그림은 텍스트에 설명되어 있습니다.

서로 다른 네트워크 노드에 분산된 응용 프로그램은 다른 응용 프로그램을 호스트하는 운영 환경의 세부 정보나 다른 응용 프로그램에 연결해 주는 서비스를 고려할 필요 없이 응용 프로그램 인터페이스를 사용하여 통신합니다. 또한 관리 인터페이스를 제공하여 상호 연결된 새 가상 응용 프로그램 시스템의 안정성과 보안을 실현할 수 있습니다. 시스템의 성능을 측정, 조정하고 기능적인 손실 없이 확장할 수 있습니다.

미들웨어는 다음과 같은 범주로 그룹화할 수 있습니다.

이러한 모든 모델에서 한 소프트웨어 구성 요소가 네트워크를 통해 다른 구성 요소의 동작에 영향을 줄 수 있습니다. RPC 및 ORB 기반 미들웨어에서는 시스템의 구성 요소를 밀접하게 연결하는 반면, MOM 기반 시스템에서는 구성 요소를 더 느슨하게 연결할 수 있습니다. RPC 또는 ORB 기반 시스템에서는 한 프로시저에서 다른 프로시저를 호출할 때 호출된 프로시저가 반환될 때까지 대기하였다가 다른 작업을 수행할 수 있습니다. 앞에서 설명한 것처럼 이러한 모델에서는 미들웨어가 부분적으로 수퍼링커의 역할을 하여 호출된 프로시저를 네트워크에서 찾고 네트워크 서비스를 통해 함수 또는 메소드 매개 변수를 프로시저에 전달한 다음 결과를 반환합니다.

MOM 기반 시스템에서는 그림 1–2에 표시된 것처럼 비동기식 메시지 교환을 통해 통신을 가능하게 합니다.

그림 1–2 MOM 기반 시스템

MOM 시스템의 요소: API를 사용하여 메시징 공급자를 통해 메시지를 교환하는 클라이언트그림은 텍스트에 설명되어 있습니다.

메시지 지향 미들웨어(Message Oriented Middleware)는 메시징 공급자를 사용하여 메시징 작업을 중재합니다. MOM 시스템의 기본 요소는 클라이언트, 메시지 및 MOM 공급자이며 여기에는 API와 관리 도구가 포함됩니다. MOM 공급자는 서로 다른 구조를 사용하여 메시지를 라우팅하고 전달할 수 있습니다. MOM 공급자는 중앙 집중식 메시지 서버를 사용하거나 각 클라이언트 컴퓨터에 라우팅 및 전달 기능을 배포할 수 있습니다. 일부 MOM 제품에서는 이 두 가지 방법을 결합하여 사용합니다.

클라이언트는 MOM 시스템을 통해 API를 호출하여 공급자가 관리하는 대상에게 메시지를 보냅니다. API 호출은 공급자 서비스를 호출하여 메시지를 라우팅하고 전달합니다. 메시지를 보낸 후 클라이언트는 다른 작업을 계속해서 수행할 수 있습니다. 이때 공급자는 수신하는 클라이언트가 메시지를 검색할 때까지 해당 메시지를 보관합니다. 메시지 기반 모델은 공급자의 중재와 연계하여 느슨하게 연결된 구성 요소의 시스템이 만들어질 수 있게 합니다. 그런 시스템은 개별 구성 요소나 연결이 실패하더라도 중단 없이 계속해서 안정적으로 작동할 수 있습니다.

메시징 공급자를 사용하여 클라이언트 간에 메시징을 중재할 경우 관리 인터페이스를 추가하여 성능을 모니터링 및 조정할 수 있다는 또 다른 이점이 있습니다. 따라서 클라이언트 응용 프로그램은 메시지 발신, 수신 및 처리와 관련된 것을 제외한 모든 문제에서 효과적으로 벗어날 수 있습니다. MOM 시스템 구현은 코드에서 담당하고 상호 운용성, 안정성, 보안, 확장성, 성능 등과 관련된 문제는 관리자가 해결해야 합니다.

지금까지는 메시지 지향 미들웨어를 사용하여 분산 구성 요소를 연결할 때의 장점에 대해 설명했습니다. 이 경우 몇 가지 단점도 존재합니다. 그 중 하나는 바로 느슨한 연결입니다. RPC 시스템에서 호출 함수는 호출된 함수가 작업을 완료할 때까지 반환되지 않습니다. 비동기식 시스템에서 호출 클라이언트는 작업을 처리하는 데 필요한 자원이 부족하여 호출된 구성 요소가 실패할 때까지 계속 수신자에게 작업을 로드할 수 있습니다. 물론 성능을 모니터링하고 메시지 흐름을 조정하여 이러한 조건을 최소화하거나 방지할 수 있지만 RPC 시스템에서는 그런 작업이 필요하지 않습니다. 중요한 것은 각 시스템 종류의 장점과 단점을 이해하는 것입니다. 각 시스템은 서로 다른 작업에 적합합니다. 정확하게 필요한 동작을 얻기 위해 두 종류의 시스템을 결합해야 하는 경우도 있습니다.

그림 1–3에서는 MOM 시스템에서 두 RPC 기반 시스템 간의 통신을 가능하게 하는 방법을 보여 줍니다. 그림의 왼쪽은 성능 향상을 위해 서로 다른 네트워크 노드에 클라이언트, 서버 및 데이터 저장소 구성 요소를 배포하는 응용 프로그램을 나타냅니다. 이것은 할인 항공 예약 시스템인데,최종 사용자는 이 서비스를 유료로 이용하여 주어진 목적지와 시간에 이용 가능한 가장 저렴한 요금을 찾을 수 있습니다. 데이터 저장소에는 등록된 사용자와 이 프로그램에 참여하는 항공사에 대한 정보가 보관됩니다. 사용자의 요청이 있을 경우 서버의 논리는 참여하는 항공사에서 가격을 쿼리하여 정보를 정렬한 다음 가장 저렴한 세 가지 요금을 사용자에게 표시합니다. 그림의 오른쪽은 참여하는 항공사 중 한 항공사의 티켓/예약 시스템을 나타내는 RPC 기반 시스템을 보여 줍니다. 그림의 오른쪽은 할인하는 사람이 연결된 항공사 수만큼 복제됩니다. 그런 각 항공사에 대해 데이터 저장소는 이용 가능한 항공편에 대한 정보(좌석, 비행 시간, 가격)를 보관합니다. 서버 구성 요소는 최종 사용자가 입력하는 데이터에 따라 해당 정보를 업데이트합니다. 또한 항공사 서버는 MOM 서비스에 가입하여 할인 예약 시스템에 대한 정보 요청을 수락하고 좌석 및 가격 정보를 반환합니다. 고객이 PanWorld의 할인 티켓 구매를 결정할 경우 해당 시스템의 서버 구성 요소는 데이터 저장소에서 해당 정보를 업데이트한 다음 요청자를 위한 티켓을 생성하거나 할인 서비스에 티켓을 생성하라는 메시지를 보냅니다.

그림 1–3 RPC와 MOM 시스템 결합

MOM 시스템을 통한 두 RPC 기반 시스템 간의 통신을 나타내는 그림입니다. 그림은 텍스트에 설명되어 있습니다.

이 예에서는 RPC 시스템과 MOM 시스템 간의 몇 가지 차이점에 대해 설명합니다. 분산 구성 요소가 연결되는 방식의 차이점에 대해서는 이미 설명했습니다. 다른 차이점으로는, RPC 시스템의 경우 클라이언트와 서버 구성 요소를 배포하고 연결하는 데 사용되며 이때 클라이언트가 주로 최종 사용자인 반면, MOM 시스템에서는 클라이언트가 메시징을 통해서만 상호 운용 가능한 이기종 소프트웨어 구성 요소인 경우가 많습니다.

MOM 시스템의 보다 심각한 문제는 MOM이 독점적인 제품으로 구현된다는 사실입니다. SuperMOM-X를 사용하는 회사에서 SuperMOM-Y를 사용하는 회사를 인수한다면 어떻게 될까요? 이 문제를 해결하려면 표준 메시징 인터페이스가 필요합니다. SuperMOM-X와 SuperMOM-Y 모두 이 인터페이스를 구현한다면, 한 시스템에서 실행하도록 개발된 응용 프로그램이 다른 시스템에서도 실행될 수 있습니다. 그러한 인터페이스는 쉽게 학습할 수 있으면서 고급 메시징 응용 프로그램을 지원하는 데 충분한 기능을 제공해야 합니다. 그러한 목표 아래 1998년, JMS(Java Message Service) 사양이 발표되었습니다. 다음 절에서는 JMS의 기본 기능을 소개하고, 어떻게 기존의 독점적인 MOM 제품의 공통 요소를 포함하면서 차이점과 추가 확장을 수용하도록 표준이 개발되었는지를 설명합니다.