들어가며
#1 이전글을 작성하기 위해 자료를 찾던 중 JMS(Java Message Service)를 소개하는 오라클 문서를 발견했다.
해당 문서에서는 MOM(Message-Oriented Middleware)이라는 용어가 나왔는데,
당시 다소 낯설은 용어 때문에 자세히 읽어보는 것을 보류했었다. 그래서 이번에 MOM이 무엇인지 살펴보려 한다.
미들웨어(Middleware)
- 앞서 언급된 오라클 문서의 내용을 임의로 편집하여 해석하였습니다.
비즈니스 상황에 따라 지속적으로 변하는 소프트웨어의 변화를 수용하기 위해서는 가능한 효과적으로 새로운 컴포넌트를 통합하고 기존의 컴포넌트들을 확장시켜야 한다. 다양한 컴포넌트들을 통합하는 가장 쉬운 방법은 서로 다른 형태임에도 불구하고 커뮤니케이션이 가능하도록 계층(layer)을 제공하는 것이다. 이러한 계층을 미들웨어라고 한다.
미들 웨어는 크게 통신 방식에 따라 3종류로 분류되며 다음과 같다.
- RPC-based Middleware(Remote Procedure Call)
- 분리된 어플리케이션의 프로시저(procedure)호출을 가능하게 하는 미들웨어
- ORB-based Middleware(Object Request Broker)
- 객체(Object)의 분산 및 공유를 가능하게 하는 미들웨어
- MOM-based Middleware(Message Oriented Middleware)
- 메시지(Message)송,수신을 통하여 분산된 어플리케이션 간의 통신을 가능하게 하는 미들웨어
위와 같은 분류체계는 프로시져(Procedure), 객체(Object), 메시지(Message)중 어떤 것을 중심으로 통신하는지에 따라 분류한 것으로 보여진다만..
프로시져, 객체, 메시지의 개념적인 구분에 대한 설명이 자세히 나와있지는 않은 듯 하다.
MOM(Message-Oriented Middleware)
MOM시스템은 기본적으로 클라이언트, 메시지, MOM제공자(provider)로 구성된다.
MOM제공자는 메시지를 전달(deliver) 및 전송(route)함에 있어서 크게 2가지 아키텍처를 갖는다.(일부 MOM제품들은 2가지 형태의 방법을 모두 제공하기도 한다.)
- 중앙집중화된 서버 형태
- 분산된 서버 형태
MOM시스템의 장점
RPC, ORB기반의 시스템들이 동기적으로 통신하는 것과는 달리 MOM기반의 시스템은 비동기적으로 통신하며,
컴포넌트들 간에 상대적으로 약한 결합이 발생한다는 점에서 이점이 있다.
따라서 클라이언트는 메시지를 보내고 난 이후에 다른 작업을 진행할 수 있다.(응답을 기다리지 않고)
MOM시스템의 또 다른 이점은 관리자 인터페이스를 추가한다면 성능을 관측하고 조정할 수 있다는 것이다.
클라이언트 프로그램의 관점에서 보면 메시지 송수신과 메시지의 처리에만 집중하면 된다는 점에서 효과적이다.
MOM시스템의 단점
MOM시스템은 컴포넌트들 간에 느슨한 결합(비동기적인 통신) 때문에 Message처리가 실패하더라도 Message를 호출한 Client는 작업을 이어나간다.
즉, 이러한 점에서 실패를 추적하는 것이 까다로울 수 있다.
마치며
'미들웨어'도 'MOM'도 아직은 낯설지만 생각보다 어려운 내용이 아닌 것 같은 느낌을 받는다.
Celery와 Message Queue가 곧 Client와 Message Provider일 것이기에,
구현체로서의 Celery를 다루다보면 MOM에 더 익숙해질 수 있을 것 같다.
별개로, 영문 문서를 읽다보니 뒤로 갈수록 빨리 마무리 짓고 싶은 마음이 강해지더라..
'IT기술 관련 > Python' 카테고리의 다른 글
[Celery] #1 Celery와 메시징 시스템 정의 살펴보기 (0) | 2020.08.17 |
---|