ActiveMQ 를 알아보자(1)

By | Y2014Y2014-3M-D

Blackboard 사의 Blackboard LMS 는 웹 서버를 추가하는 수평 확장을 지원한다.

따라서 여러대의 웹 서버에 대한 Task Queuing 을 위해서 ActiveMQ를 사용하고 있으며, 문서에서도 각종 배치 프로세싱에 대해 이 기능이 핵심적인 역할을 담당하고 있다고 언급하고 있다.

ActiveMQ란 무엇이냐…. 를 설명하자니 내가 모르는 게 참 많다는 생각이 든다.

Wikipedia 에서부터 하나씩 시작해보자.

위키에는 다음과 같이 정의되어 있다.

Apache ActiveMQ is an open source message broker written in Java together with a full Java Message Service (JMS) client. It provides “Enterprise Features” which in this case means fostering the communication from more than one client or server. Supported clients include the obvious Java via JMS 1.1 as well as several other “cross language” clients. The communication is managed with features such as computer clustering and ability to use any database as a JMS persistence provider besides virtual memory, cache, and journal persistency.

위 내용을 최대한 직역해보면

아파치 ActiveMQ 는 풀 자바 메시지 서비스(JMS) 클라이언트와 함께 자바로 만든 오픈소스 메시지 브로커이다.  이 시스템은 “엔터프라이즈 기능” – 이 경우는 하나 이상의  클라이언트와 서버간의 커뮤니케이션을 증진시키는 – 을 제공한다. JMS 1.1 을 통해 자바 뿐만 아니라 다른 “교차언어”를 사용하는  클라이언트를 지원한다.  커뮤니케이션은 컴퓨터 클러스터링및 가상메모리, 캐쉬 그리고 저널 지속성을 제외한 어떤 데이터베이스를 JMS 지속성 제공자로 이용할 수 있는 등의 특징들을 통해 운영된다.

라고 되어 있다.

말인즉슨, ActiveMQ는 자바로 만든 JMS를 지원하는 클라이언트를 포함한 브로커이며, 자바 뿐만 아니라 만든 다양한 언어를 이용하는 시스템들이 통신(커뮤니케이션)할 수 있게 해준다는 것이다. 그리고 이 시스템은 컴퓨터 클러스터링 기능 및 어떠한 DB를 통해 JMS 각 시스템간의 일관성을 유지시켜주는 시스템이다.

정도로 이야기 할 수 있겠다. (헉헉..)

다수의 시스템은 자바 뿐만 아니라 C#, PHP, Python 등등… 다수의 언어로 제작되었을 가능성이 큰데, 이 시스템들 간의 통신을 하려면 일관된 통신 규칙(프로토콜)이 필요하겠다.
하지만 언어가 다르면 시스템들 간의 직접 통신이 불가능할 거고, 다수의 시스템이 동시에 협업하려면 일관성의 문제가 생기니 ActiveMQ가 브로커(부동산 중개업자냐...) 가 되어 조율하겠다… 이쯤 되시겠다.

웹 기반이 아닌 기존 클라이언트들은 이 통신을 위해 각 시스템 별로 바이너리 통신을 하고, recv 함수에서 통신용 패킷을 받아 쪼개고 버퍼의 데이터를 비트별로 해석해서 우짜고 저짜고.. 했던 경험이 있다.
그 이후 COM, ORB 니 CORBA 니 하는 규약들이 생기고 웹 기반 서비스로 오면서 XML-RPC 규약이니 통신데이터는  JSON이니 하는 방법들이 생기면서 좀더 시스템간의 통신이 수월해진 듯 하다.(맞나?..)

다시 돌아와서, ActiveMQ의 정의를 보면 JMS가 무지하게 나온다. 따라서 이놈을 정확하게 이해하지 않고서는 ActiveMQ의 의미를 정확하게 이해했다고 말하기 힘들겠지.

또 위키로 가보자.

JMS의 정의는..
The Java Message Service (JMS) API is a Java Message Oriented Middleware (MOM) API for sending messages between two or more clients. JMS is a part of the Java Platform, Enterprise Edition, and is defined by a specification developed under the Java Community Process as JSR 914. It is a messaging standard that allows application components based on the Java Enterprise Edition (Java EE) to create, send, receive, and read messages. It allows the communication between different components of a distributed application to be loosely coupled, reliable, and asynchronous.

JMS 는 자바 기반의 MOM(메시지 지향 미들웨어) API 이며 둘 이상의 클라이언트 간의 메시지를 보낸다. JMS 는 자바 플랫폼, 엔터프라이즈 에디션(EE) 기반이며, 메시지 생성, 송수신, 읽기를 한다. 또한 비동기적이며 신뢰할 만하고 느슨하게 연결된 서로 다른 분산 어플리케이션 컴포넌츠 간의 통신을 허용한다.

라고 되어 있다.

그리고 메시지 지향 미들웨어란

Message-oriented middleware (MOM) is software or hardware infrastructure supporting sending and receiving messages between distributed systems. MOM allows application modules to be distributed over heterogeneous platforms and reduces the complexity of developing applications that span multiple operating systems and network protocols. The middleware creates a distributed communications layer that insulates the application developer from the details of the various operating systems and network interfaces. APIs that extend across diverse platforms and networks are typically provided by MOM

메시지 지향 미들웨어(MOM)은 분산 시스템 간의 메시지 송수신을 지원하는 하드웨어 또는 소프트웨어 기반의 기간시스템이다. MOM은 다수의 OS와 네트워크 프로토콜로 확장되는 어플리케이션 개발의 복잡성을 줄이기 위해 이종 플랫폼간의 어플리케이션 모듈이 분산처리가 가능하도록 한다. MOM은 다양한 OS와 네트워크 인터페이스의 세부사항들을 어플리케이션 개발자들이 신경쓰지 않도록 분산 커뮤니케이션 레이어를 생성한다. MOM은 일반적으로 상이한 플랫폼과 네트워크 상으로 확장할 수 있는 API를 제공한다.

즉, 자바 기반의 메시징 중계 미들웨어 정도 되겠다. 하지만 아직 Message 가 무엇인지 나오지 않아 이해가 깔끔하지 않는 느낌이 있다.

메시지의 정의를 위해 한번 더 위키를 참고해보자.

메시지의 의미는 통신공학과 컴퓨터 공학에서 의미가 조금씩 달라지는데, 컴퓨터 공학 쪽 정의를 살펴보면

There are two main senses of the word “message” in computer science: messages passed within software, which may or may not be human-readable, and human-readable messages delivered via computer software for person-to-person communication.
– Message passing is a form of communication used in concurrent and parallel computing, object-oriented programming, and interprocess communication, where communication is made by sending messages to recipients. In a related use of this sense of a message, in object-oriented programming languages such as Smalltalk or Java, a message is sent to an object, specifying a request for action.
– Instant messaging and e-mail are examples of computer software designed for delivering human-readable messages in formatted or unformatted text, from one person to another.

컴퓨터 공학에서 “메시지”란 단어의 의미는 크게 두가지 정도이다:  사람과 사람간의 커뮤니케이션을 위해 컴퓨터 소프트웨어를 통해 전달되는 소프트웨어 내에서 전달되는,  인간이 읽을 수 없는 형식과 인간이 읽을 수 있는 형식의 메시지이다.
– 메시지 패싱은 수신자에게 메시지가 전달되므로서 이루어지는 커뮤니케이션에서 프로세스간 통신, 객체지향 프로그래밍, 동시 평행 컴퓨팅 등에서  쓰이는 커뮤니케이션 방식이다.
– 인스턴트 메시징과 이메일은 사람과 사람간에 형식/비형식 텍스트 로 이루어진 인간이 읽을 수 있는 메시지를 전달하도록 설계된 컴퓨터 소프트웨어의 예이다.

다음편에서 계속..

참고:

ActiveMQ 개요: http://en.wikipedia.org/wiki/Apache_ActiveMQ

Java Message Service: http://en.wikipedia.org/wiki/Java_Message_Service

Message-oriented middleware: http://en.wikipedia.org/wiki/Message_Oriented_Middleware

Message: http://en.wikipedia.org/wiki/Message

 

13,314 total views, 5 views today

댓글 남기기