오픈소스 미들웨어 – 제이보스(JBoss)
제이보스(JBoss)는 자바를 기반으로 하는 오픈 소스 미들웨어의 총칭으로, 대표적으로는 Java EE 스펙을 지원하는 제이보스 애플리케이션 서버가 있다.
Java EE 서버란 Java Enterprise Edition(EE) 표준에 따라 구현된 서버를 의미하며 흔히 Java EE 서버를 WAS(Web Application Server)라고 부르는데 이러한 서버에는 Oracle WebLogic, IBM WebSphere, Adobe JRUN, JBoss, Apache Geronimo, Tmax JEUS등이 있다.
JBoss는 현재 40개 이상의 다양한 프로젝트가 있으며, Jboss.org 커뮤니티에 의해 개발 및 운영되고 있다.
원래 JBoss는 EJB를 오픈소스로 개발하기 위해 Mark Fleury가 EJBOSS(Enterprise Java Beans Open Source Software)라는 이름으로 시작한 프로젝트였지만 SUN과의 상표권 문제 때문에 앞의 E를 빼고 현재 JBoss라는 이름이 되었다.
JBoss는 각 프로젝트의 핵심 개발자를 JBossInc.의 직원으로 고용하고 있으므로 오픈 소스의 프로젝트이면서 직원으로 고용하면서 제품 개발을 계속하는 독특한 형태를 취하고 있다. JBossInc.는 소프트웨어를 프리라이선스로 제공하면서 지원 서비스를 판매하여 수익을 올리고 있다.
2006년에는 상용 리눅스 벤더인 레드헷에서 인수하여 JBoss프로젝트를 운영하고 있다. 2007년부터 레드햇은 각종 컴포넌트의 제공 및 보증 및 통합 품질 테스트를 완료한 JBoss소프트웨어를 JBoss엔터프라이즈 미들웨어로 제공하고 있다.
주요 JBoss 프로젝트는 다음과 같다.
•JBoss Application Server
Apache Tomcat은 Java EE 표준에 포함되어 있는 JSP, Servlet, JSTL 등과 같은 웹 애플리케이션 개발을 위한 표준을 구현한 웹 컨테이너이다. Java EE 표준에는 다양한 컨테이너가 정의되어 있는데 대표적인 컨테이너가 웹 컨테이너와 EJB 컨테이너이다. 웹 애플리케이션을 개발하기 위해서 필요한 웹 컨테이너를 구현한 것이 바로 Apache Tomcat이며, JBossAS는 Java EE 표준에 포함되어 있는 모든 표준을 구현한 완전한 Java EE 서버라고 할 수 있다. 예를 들면 EJB나 JMS를 사용한 애플리케이션을 개발하고자 하는 경우에는 반드시 JBossAS와 같은 Java EE 표준을 모두 구현한 서버를 사용해야 한다. 그러나 단순한 웹 애플리케이션을 구현하는 경우에는 Apache Tomcat을 사용할 수 있다. JBossAS에는 기본적으로 Tomcat이 내장되어 있으므로 Tomcat을 사용했었던 사용자는 손쉽게 JBossAS로 웹 애플리케이션을 이전할 수 있다.
<JBoss 주요 기술>
•JBoss의 커널 : MicroContainer
JBoss MicroContainer(http://www.jboss.org/jbossmc) 프로젝트는 JBoss 하부 커널을 담당하는 프로젝트로 WAS를 구성하기 위해 필요한 Servlet/JSP 컨테이너, EJB 컨테이너, Deployer, 트랜잭션 관리 등 다양한 기능을 처리하는 JBoss.org 내의 프로젝트들의 결과물을 결합하여 애플리케이션 서버를 보다 수월하게 생성할 수 있도록 한다
•대표적인 OR Mapper : Hibernate
Hibernate(http://www.hibernate.org/)는 대표적인 오픈소스 ORM(Object Relational Mapping) 프레임워크이다. 객체 모델링을 통해 도출된 데이터 구조를 저장소(데이터베이스)로 손쉽게 매핑할 수 있다.
•사용자 인터페이스 기술 : JSP, JSF, AJAX
데이터 모형을 사용자 인터페이스에 효과적으로 연결하기 위한 방법론 설계 방식이자 MVC(Model-
View-Controller) 방식으로 웹 페이지를 개발하기 위하여 만들어진 Struts는 웹 개발에 널리 사용되어 왔지만, 몇 가지의 취약점을 보완하기 위해 Struts를 만든 Craig R. McClanahan은 본격적으로 사용자 인터페이스를 컴포넌트화할 수 있는 JSF(Java Server Faces)라는 JCP(Java Community Process) 표준을 만들어 냈다. JSF는 기본적으로 JSP를 화면 표시용 기술로 사용하지만 XUL(XML User Interface Language)과 같은 다른 사용자 인터페이스 기술을 활용할 수 있다. 또한 자바의 AWT나 Swing과 마찬가지로 완벽한 MVC 모델 기반으로 사용자 인터페이스를 만들 수 있고 컴포넌트화가 가능한 것이 특징이다.
•Java EE IoC 프레임워크 : Seam Framework(JSR-299)
EJB 3.0과 JSF를 사용하여 개발하면 이전의 작업과 비교하여 많은 단순 반복 작업이 줄어 들지만 영속성 계층(Persistence Layer)과 사용자 인터페이스(JSF)의 연결을 위해서는 여전히 Backing Bean, Controller, DAO 등 단순 반복 작업이 필요하다. 이를 해결하기 위하여 IoC(Inversion of Control) 프레임워크인 Seam(http://seamframework.org/)을 고안하게 되었고 Google의 Guice와 함께 표준화 작업을 진행하여 Java EE 플랫폼을 위한 Java Context와 Dependency Injection(CDI)가 프레임워크 표준(JSR-299)인 Java EE 6 표준으로 채택되었다.
Seam 프레임워크는 Dependency Bijection이라는 양방향 Injection 기술을 사용하여 EJB와 JSF를 연결한다. 또한 컨버세이션(Converstaion)이라는 HTTP 세션보다 상세하게 상태를 관리하는 컨텍스트를 제공해 웹 애플리케이션 개발을 쉽게 한다. XML의 사용을 최소화하여 어노테이션 기반의 편리한 프로그래밍이 될 수 있도록 한다. Seam은 Rule 엔진인 Drools, jBPM, JMS, Mail, PDF, AJAX 등 다양한 기술들을 통합하고 있다.
•대용량 고가용성 서비스 : 분산 캐시
WAS에서는 대용량 서비스 지원 시 여러 WAS 인스턴스, 여러 대의 머신에 부하를 분산하여 서비스한다. 이런 서비스를 위해서는 부하를 분산하기 위한 Load Balancing 기술과 장애 발생 시 타 인스턴스에서 이전 작업을 계속할 수 있도록 상태정보를 복제해 놓는 작업이 필수다. TCP/IP 중 여러 대의 머신에 데이터를 전송하기 위한 기술로 멀티캐스트(Multicast)가 있다. 멀티캐스트 프로토콜은 그룹에 속한 모든 멤버(인스턴스)들에게 동시에 메시지를 전달할 수 있지만 메시지가 유실될 수 있다는 게 단점이다. 이에 대처하기 위해 메시지 유실 시 기본 멀티캐스트 프로토콜에 메시지의 재전송을 명령하고 큰 메시지는 작게 나누어 전송하며, 메시지 순서를 보장하는 등 통신의 신뢰성을 제공하기 위한 프로젝트(Reliable Multicast)가 JGroups(http://www.jgroups. org/)이다.
•고성능 네트워크 애플리케이션 개발 : Netty
Netty는 고성능 고확장성 프로토콜 서버와 클라이언트를 신속하게 개발할 수 있도록 해주는 비동기, 이벤트 드리븐 네트워크 애플리케이션 프레임워크이다. 프로토콜 코덱(Codec)에 대한 처리, SSL/TLS 지원, HTTP 프로토콜 지원, Google Protocol Buffers(http://code.google.com/apis/protocolbuffers/) 통합 등 네트워크 애플리케이션 개발을 위한 다양한 기능을 제공하고 있다. Netty 프로젝트는 SMS 서버, 게임서버, 채팅서버, 포스 단말기 서버, RFID 서버 등 다양한 분야에서 활용되고 있다.
MOM(Message Oriented Middleware)이란 메시지를 비동기적으로 전달하여 처리할 수 있는 특징을 가진 시스템이다. 이런 종류의 제품에는 IBM의 MQSeries, SonicMQ 등이 있다. 자바에서 이러한 메시징을 처리하기 위한 공통적인 API가 JMS (Java Messaging Service)이며, 이는 Queue를 이용, 메시지를 PTP(Peer-to-Peer) 방식으로 전달하거나, 발행/구독(Publish-Subscribe)과 같이 여러 구독자에게 메시지를 동시에 전달하는 방식을 제공한다. 비동기 메시지 전송기능은 Java EE 표준에 포함되어 있어 Jboss 역시 HornetQ라는 프로젝트를 통해 JMS기능을 제공하고 있다. HornetQ는 POJO기반으로 설계되어 있어 별도의 메시징 서버로 동작할 수 있을 뿐 아니라 JBoss MicroContainer, Spring, Google Guice등 다른 프레임워크나 제품에 Embedded되어서 사용될 수 있다.
•엔터프라이즈 서비스 버스 : ESB
ESB(Enterprise Service Bus)는 SOA의 기반이라 할 수 있는 개방형 표준을 기반으로 한 비즈니스 시스템을 연결하기 위한 기술이다. 이 기술은 중앙의 서비스 레지스트리(UDDI)에 서비스 정보를 보관하고 서비스를 활용하여 새로운 서비스를 쉽게 만들어 낼 수 있게 하는데 JBoss ESB는 JMS를 기반으로 메시지 채널을 구성하여 메시지를 처리한다. SOAP, JMS, HTTP, FTP 등의 표준 메시지를 처리할 수 있으며 메시지의 변환이 필요한 경우 Smooks 변환엔진(http://www.smooks.org/)이나 XSLT를 사용한다. 또한 메시지의 라우팅을 위하여 Drools 룰 엔진이나 XPath를 사용할 수 있고 jBPM이나 BPEL을 사용하여 서비스를 오케스트레이션할 수 있다. 웹서비스, JMS 메시지뿐만 아니라 다양한 메시지 포맷을 받아 처리할 수 있도록 최신 버전에서는 Apache Camel(http://camel.apache.org/)을 게이트웨이로 사용할 수 있다.
•복잡한 규칙 처리를 위한 Rule 엔진 : Drools
Rule 엔진이란 최소한의 지식(Knowledge)만으로 결론을 추론(inferencing)해 낼 수 있는 도구이다. 지식과 추론은 규칙(Rule)으로 정의되며 생성 규칙은 주어진 조건들이 True일 때 실행되는 Action으로 구성된다. 조금 복잡한 이야기인 것 같지만 간단히 말해 프로그램상에 존재하는 if-then-else와 같은 조건문들을 하나의 규칙(Rule)으로 분리하여 처리할 수 있도록 하는 엔진이다. 많은 수학적 기술들이 필요한 엔진이라고 할 수 있다. JBoss Drools는 이런 추론 엔진, 즉 Rule 엔진이며 RETE라는 패턴 매칭 알고리즘을 사용한다. JBoss Drools 프로젝트는 자바로 구현된 룰 엔진으로 이클립스 기반의 룰 개발/디버깅 환경과 웹 기반 률 관리 UI를 제공하며, 이는 규칙이 자주 변경되어 하드 코딩할 경우 유지보수 및 변경이 어려운 보험 업무, 제어 처리 등 다양한 분야에 활용되고 있다.
BPM(Business Process Management)은 기업의 비즈니스 프로세스를 체계적이고 효율적으로 관리할 수 있도록 하는 방법이며 이를 지원하기 위한 BPM 소프트웨어들이 있다. JBoss의 jBPM 엔진은 비즈니스 분석가와 개발자 간의 협업을 쉽게 할 수 있도록 하며 오랫동안 실행되는 프로세스들을 비주얼하게 표시하는 데 사용된다. 또한 사람과 애플리케이션/서버 간을 중계하는 역할도 한다. jBPM은 일종의 State Machine이라고 할 수 있으며 언어중립적인 Process Virtual Machine이라는 프로세스 실행 엔진을 가지고 있다. 또한 다양한 프로세스 언어를 지원할 수 있도록 설계되었기 때문에 jPDL, BPEL, BPNM 등을 실행할 수 있다. 또 프로세스의 설계를 위해 이클립스 기반의 프로세스 디자이너를 제공하며 실행 상태를 모니터링하기 위한 웹 기반 콘솔을 제공한다.
EII(Enterprise Information Integration)이란 조직 내의 모든 데이터를 단일한 인터페이스로 사용할 수 있도록 하는 데이터 통합 프로세스이다. 간단히 말해 여러 데이터 소스를 통합하여 마치 가상의 데이터베이스처럼 사용할 수 있도록 하며 JDBC, Web Services와 같은 인터페이스로 사용할 수 있도록 하는 기술이다.
•사용자 포털 : GateIn Portal
기업의 애플리케이션들이 개수 및 복잡도가 증가함에 따라 다양한 정보를 사용자에게 통합하여 제공하기 위한 방법이 필요해졌다. 이런 요구에 의해서 포틀릿(JSR 168)이라는 표준이 생겨났고 이 표준을 제공하는 것이 JBoss의 GateIn Portal (http://www.jboss.org/gatein)이다. 통합되는 대상에 따라 EIP(Enterprise Information Portal), KEP(Knowledge based Enterprise Portal), EAP(Enterprise Application Portal)로 구분될 수 있다. 포털은 포틀릿을 이용한 애플리케이션 통합 및 사용자별 개인화 기능을 제공하며 한 번 로그인하여 연결된 사이트를 이용할 수 있도록 하는 SSO(Single Sign ON), 콘텐츠 관리(JCR) 등의 기능을 제공한다.
정리
언급한 프로젝트 외에도 다양한 프로젝트들이 있지만 JBoss.org의 몇 가지 주요 프로젝트들을 살펴보았다. WAS를 구성하는 데 필요한 주요 핵심 컴포넌트들뿐만 아니라 WAS를 기반으로 한 다양한 서비스 프레임워크들도 개발되고 있다는 사실을 알게 되었을 것이다. 이외에도 OSGi, Ruby 언어를 JVM에서 실행할 수 있도록 하는 TorqueBox, VOIP 기술을 위한 Mobicent, Tuxedo같은 TP 모니터링 기능을 하는 BlackTie, 관리 및 모니터링을 위한 RHQ, 클라우드 컴퓨팅을 위한 StormGrind, Byte code 조작을 위한 Byteman, 테스트를 위한 여러 프로젝트들 등등 관심을 가질만한 다양한 프로젝트가 진행 중이다.
JBoss의 프로젝트들은 모두 독립적으로 활용될 수 있으며, JBoss WAS뿐 아니라 타 회사 제품의 WAS에서도 사용될 수 있도록 설계되고 있다. 따라서 각각의 핵심적인 프로젝트 모듈들이 독립적으로 동작할 수 있을 뿐 아니라 이 결과물들을 Seamless하게 묶어 WAS로 만들어 내고 있다.
참조. 위키피디아, 마이크로소프트웨어(2011.06호)
'R&D > IT Insight' 카테고리의 다른 글
제이보스(JBoss) (0) | 2012.08.28 |
---|---|
하둡(Hadoop) (0) | 2012.06.28 |
빅 데이터의 시대 - 하둡(Hadoop), Hadoop 이란..? (0) | 2012.05.25 |