1장.JBoss 소개

Revision History

Name

Date

Reason For Changes

Version

오픈나루

2013/11

Initial Version

1.0

전준식, jjeon@opennaru.com

2018/02

Second Version

2.0

JBoss Enterprise Application Platform 7(이후, JBoss EAP 6)의 대하여 설명한다. 이번 장에서 JBoss의 역사나 레드햇(Red Hat)에서 제공하는 제품 기술 지원 서비스에 대한 내용도 함께 설명하고 있어 오픈소스 미들웨어에 대하여 이해할 수 있을 것이다.

JBoss EAP 7를 이해하는데 필요한 표준 사양, Java EE 6, JBoss EAP 6의 새로운 기능과 특징에 대해서도 간단하게 소개한다.

01-1.JBoss EAP 6 개요

JBoss EAP 6는 개방형 표준을 기반으로 개발된 오픈소스 미들웨어 플랫폼으로 Java EE 6 인증을 받은 제품이다. 엔터프라이즈 환경에서 미들웨어가 갖추어야 하는 대용량 트랜잭션(Transaction), 고가용성을 위한 클러스터링, 메시징, 분산 캐싱, 고성능 보장 등의 기술들을 제공한다.

JBoss EAP 6 버전은 오픈소스 커뮤니티 프로젝트의 결과물을 이용하여 제품화된다. JBoss AS(Application Server) 7 버전을 기반으로 만들어진 제품이다. 다음 URL에서 JBoss EAP 6가 커뮤니티의 어떤 버전을 사용하고 있는지 확인할 수 있다.

다음의 URL (https://access.redhat.com/site/articles/112673) 에서는 아래와 같이 JBoss EAP 버전 별 구성 컴포넌트에 대한 상세 내용을 확인할 수 있다.

image

그림 1. JBoss EAP의 컴포넌트 상세(중략된 이미지)

JBoss EAP 6는 견고하고 안전하며 확장 가능한 Java EE 기반의 응용 프로그램을 신속하게 개발할 수 있도록 API 와 개발 프레임워크을 제공한다.

image

그림 2. JBoss EAP 6 아키텍처

JBoss EAP 6는 개발자가 손쉽게 애플리케이션을 개발, 배포, 운영할 수 있도록 기능을 제공해 주는 애플리케이션 플랫폼이라고 할 수 있다.

현재 레드햇의 JBoss EAP 6는 국내 WAS 시장에서 가장 빨리 성장하고 있는 클라우드 환경에 적합한 대표적인 웹 애플리케이션 서버 제품이라고 할 수 있다.

JBoss 란 단어의 의미는 무엇인가?

JBoss 라는 단어는 여러 가지의 의미를 가지고 있다. 첫 번째는 오픈소스 소프트웨어 제품을 개발하는 Red Hat미들웨어 사업부를 의미하기도 하고, 그 회사가 제작하는 모든 미들웨어 제품들에 대한 상표이기도 하며, 애플리케이션 서버의 이름이기도 하다. 사람들이 JBoss 라는 용어를 사용할 때는 일반적으로 JBoss 애플리케이션 서버를 지칭하는 것이며, 보통 JBoss AS 라는 약어가 사용되었지만 2013년 부터는 JBoss 라는 이름의 혼돈을 막기 위하여 JBoss 커뮤니티의 JBoss AS 이름을 Wildfly 라는이름으로 변경하기로 하였다. 하지만 JBoss EAP 라는 이름의 레드햇 기술 보증 제품은 변경 없이 그대로 사용한다.

JBoss AS7, JBoss EAP6 , Wildfly 의 관련성과 의미

앞으로 반복적으로 언급되는 단어인 JBoss 관련한 단어들인 ‘JBoss AS7’, ’JBoss EAP6’, ‘Wildfly’ 라는 용어들의 유래와 의미를 먼저 설명한다.

JBoss 라는 이름의 유래는?

JBoss는 1999년에 Mark Fleury가 EJB컨테이너를 오픈소스로 개발하기 위해 EJBOSS(Enterprise Java Beans Open Source Software)라는 이름으로 시작한 프로젝트였지만 SUN과의 상표권 문제 때문에 앞의 E를 빼고 현재 JBoss라는 이름이 되었다.

JBoss AS란 ?

JBoss.org 라는 인터넷 커뮤니에서 제공하는 Java EE6 표준을 지원하는 오픈소스 애플리케이션 서버의 이름이다. JBoss는 EJBOSS 에서 유래되었고 AS 는 바로 Application Server 의 약자이다.

JBoss AS7 과 JBoss EAP6와의 차이점은?

JBoss EAP6 라는 상용 제품은 JBoss AS7 이라는 커뮤니티 제품을 Red Hat 에서 추가 테스트와 검증 등을 통하여 안정성, 성능 그리고 보안 수준을 높인 기업용 오픈소스 애플리케이션 서버이다.

즉 JBoss EAP6 와 JBoss AS7은 소스 코드 수준에서 거의 동일한 제품으로 벤더에 의한 유료 기술 지원을 받을 것인지 아니면 무료로 사용자 스스로 제품 문제를 해결할 것인지가 가장 큰 차이점이다.

JBoss AS7 제품은 커뮤니티에서 주로 기능 개발을 목적으로 하는 제품이다. 기능 개발 중에 발생된 버그는 수정되어 릴리즈에 포함될 수 있지만, 버그 수정이나 지원 환경에 대한 검증을 목적으로 한 유지 보수와 보안 업데이트는 없다. 즉 주요 기능을 포함한 메이저 버전 업그레이드는 있지만 보안이나 버그 패치 등의 유지보수 차원의 릴리즈는 없다. 커뮤니티 버전에서 버그 수정이 필요하다면 직접 코드 수정, 포팅 그리고 빌드해야 한다.

JBoss EAP6 제품은 상용 서비스 제품으로 기능 개발 중심의 커뮤니티 버전과는 달리 고객이 요청한 버그 수정 또는 보안 업데이트 등의 안정성과 품질 그리고 기술 지원 환경에 대한 호환성 테스트를 거쳐 출시하는 제품이다. JBoss EAP6와 JBoss AS7은 버그/보안/성능에 관련된 패치 이외에는 큰 차이점이 없다. JBoss EAP6 버전이 JBoss AS7 버전과 동일한 소스 코드 기반으로 하여 대체로 JBoss EAP 버전이 JBoss AS 버전에 비해 버전이 낮다.

image

그림 3. JBoss AS(커뮤니티 버전)과 JBoss EAP(엔터프라이즈 버전)의 릴리즈 스케쥴

JBoss AS 의 최신 커뮤니티 제품인 JBoss AS7을 기업에서 상업적인 목적으로 사용할 수 있지만 보안 측면에서 여러 가지 고려사항이 있어 운영환경에서 사용하는 것은 적합하지 않다. JBoss AS와 같은 커뮤니티 제품들을 이용하여 최신 기능을 시험적으로 사용하거나 중요도가 낮은 내부 서비스에 적용해 보는 것은 가능할 수 있다. 그러나 엔터프라이즈 수준의 애플리케이션 서버 용도로 사용하기 위해서는 지속적인 보안 업데이트, 버그 수정, 성능 향상 및 벤더의 기술 지원이 가능한 JBoss EAP 버전을 사용해야 한다.

JBoss 커뮤니티 제품 JBoss 엔터프라이즈 제품

사이트

AS7(jboss.org)/Wildfly8 (wildfly.org)

redhat.com/jboss.com

라이선스 비용

없음

없음

기술지원

사용자 스스로 기술 지원

벤더 기술 지원

소스 코드 접근

완전한 접근 가능

완전한 접근 가능

대상

누구나

레드햇 서브스크립션 고객

개발

오픈 소스 프로젝트 커뮤니티

오픈 소스 프로젝트 커뮤니티 및 JBoss EAP 제품화 팀

개선 및 향상

커뮤니티의 요구에 따른 임시 또는 실험적인 소프트웨어 변경

주요 릴리스, 소규모 릴리스, 패치 및 마이그레이션 도구를 포함한 구조화된 릴리스 과정

매뉴얼

프로젝트 컴포넌트에 따라 다양

전문적인 소프트웨어 설명서

품질

기능 검증을 위한 테스팅 위주

매우 다양한 테스트 등이 통합된 우수한 품질

표 1. JBoss 커뮤니티 제품과 엔터프라이즈 제품의 차이점

JBoss AS7과 Wildfly8의 차이점은?

JBoss AS 라는 의미가 JBoss Application Server 의 약자이며 많은 경우 JBoss 로 표기하여 Red Hat 의 상용 오픈소스 제품인 JBoss EAP 와 혼돈을 야기 했었다. 이러한 혼란을 해소하기 위하여 JBoss AS8 버전부터는 기존의 ‘JBoss’라는 이름을 ‘Wildfly’ 라는 이름으로 변경하기로 결정했으며, 현재는 jboss.org 가 아닌 wildfly.org 커뮤니티에서 ‘wildfly8’이라는 이름으로 오픈소스 프로젝트를 진행하고 있다.

이 책에서는 JBoss AS7(Application Server) 라는 이름을 Red Hat JBoss EAP 6(Enterprise Application Platform) 이름과 같게 지칭한다. 또한 애플리케이션 서버로서의 JBoss 와 Red Hat의 사업부인 JBoss 가 혼동을 피하기 위해, JBoss 애플리케이션 서버를 제작하는 회사를 나타낼 때는 Red Hat 이라는 이름을 사용할 것이다.

JBoss 시작과 역사

JBoss는 자바를 기반으로 하는 오픈소스 미들웨어의 브랜드명이다. Java EE 스펙을 지원하는 대표적인 제품으로 JBoss EAP 6가 있다. 커뮤니티 버전의 이름은 JBoss AS(Application Server)에서 Wildfly로 변경되었다.

오픈소스 소프트웨어 개발 커뮤니티인 jboss.org 에는 약 100개 이상의 다양한 프로젝트가 진행 중이며 1999년부터 계속해서 발전하여 운영되고 있다.

1996년도에 자바가 처음 소개되었을 때, 개발자들은 애플리케이션에 필요한 인프라 관련 기능들 스스로 개발하여 사용해야 했다. 이후에 J2EE 명세서(Java 2 Enterprise Edition Specification, 현재 Java EE 명세서의 예전 이름) 는 엔터프라이즈 애플리케이션을 개발하기 위한 표준화된 애플리케이션 프레임워크를 제공하는 것을 목적으로 만들어 졌다.

1999년에, Marc Fleury는 JBoss 라는 이름의 작은 오픈소스 프로젝트를 시작했는데, 이 프로젝트는 JBoss(Enterprise Java Bean Open Source Software)라는 이름의 유래와 같이 J2EE 명세서의 Enterprise Java Bean(EJB) 부분을 구현하기 위한 것이었다.

이 프로젝트가 점차 유명해짐에 따라 JBoss 개발자들은 프로젝트 관련 문서, 컨설팅 서비스, 교육 서비스를 판매하기 시작했다. 2001년에, Fleury와 동료들은 JBoss Group, LLC. 라는 법인을 설립하고, 2002년도에는 개발자 지원을 제공하기 시작했다. 동시에 그들은 JBoss AS 3를 개발하였는데, 이것은 완전한 기능을 갖춘 J2EE 애플리케이션 서버였으며, WebSphere 나 WebLogic 같은 독점 소프트웨어 제품들과 경쟁할 만큼 성장하게 되었다.

JBoss Group, LLC. 는 2004년에 JBoss, Inc. 로 사명을 변경하였다. JBoss AS 4를 출시하면서 JBoss, Inc. 는 기업들을 위한 제품 기술 지원 서비스를 제공하기 시작하였다. JBoss AS 4는 매우 유명한 애플리케이션 서버로 성장하였고, 여전히 업계에서 널리 사용되고 있다. 또 JBoss Cache, Hibernate, jBPM, JBoss Rules 같은 JBoss AS 에 포함되어 있는 많은 컴포넌트들이 JBoss AS 이외에 독립적으로 동작할 수 있도록 하였다.

2006년 4월에 Red Hat은 JBoss, Inc.를 인수했다. JBoss AS 5에서 새로운 혁신적인 기능들이 소개되면서 JBoss AS는 더욱 유명해졌다. 이 책은 JBoss AS 7 최신 버전을 기반으로 한 JBoss EAP 6에 관한 내용을 주로 다루고 있으며 추가적으로 애플리케이션 서버 상에서 동작하는 새로운 기술들에 대해서도 소개하고 있다.

2007년부터 Red Hat 은 오픈소스 커뮤니티 프로젝트인 JBoss 커뮤니티의 각종 컴포넌트를 조합하여 패키징하고 엔터프라이즈 수준의 품질 테스트를 거친 제품에 대하여 기술 지원을 보장하는 제품을 제공하였다. 이 제품이 JBoss Enterprise Middleware Platform이다.

JBoss EAP 6 는 Java Enterprise Edition 6(Java EE 6) 호환 애플리케이션 서버이다. 자바 애플리케이션 서버는 애플리케이션 개발 아키텍처를 표준화한다. Java EE는 여러 컴포넌트 모델들을 정의하는데, 개발자들은 이러한 표준화된 모델을 사용하여 애플리케이션를 개발한다. 이 애플리케이션들은 표준 배포 모델을 사용하는 애플리케이션 서버 내에 배포될 수 있다. 애플리케이션 서버는 배포된 애플리케이션이 동작할 수 있도록 하는 일련의 서비스들을 제공한다.

image

그림 4. Java EE 표준과 JBoss EAP 의 발전

JBoss 라이선스

JBoss의 라이센스는 GNU Lesser General Public License(LGPL)이다. JBoss AS (현재 Wildfly) 커뮤니티는 개인과 기업 모두가 라이센스 비용을 지불하지 않고 무료로 사용할 수 있다. 또한 다운로드, 사용, 소스 수정 및 배포도 할 수 있다.

JBoss 라이센스 형태는 LGPL 로 한가지 종류이지만 배포 파일은 커뮤니티 버전과 엔터프라이즈 버전 두 가지 버전이 있다.

JBosss EAP라는 엔터프라이즈 버전은 유료 서브스크립션 계약을 맺어 레드햇에서 검증한 JBoss 소프트웨어와 최신 패치, 버전 업그레이드를 제공해주는 서비스 제품이다.

레드햇에서 테스트한 소프트웨어는 jboss.org 오픈소스 커뮤니티의 안정된 컴포넌트를 재구성하여 기업을 위한 QA 과정을 거쳐 안정성과 품질을 높인 제품이며, 현재 ‘JBoss Enterprise Middleware’라는 제품군이다. 또 서브스크립션 계약에 의해 JBoss 기술 지원, 컨설팅, 교육, 문서 제공 등을 제공된다.

자바 개발자와 오픈소스 미들웨어

프로그래머들이 JBoss EAP를 좋아하는 이유는 JBoss AS (현재는Wildfly) 라는 오픈소스 프로젝트로 개발 과정이 모두 공개되어 있어 제품의 동작 방법이나 문제점에 대한 분석 등이 필요할 때 손쉽게 소스를 통하여 이해할 수 있기 때문이다.

프로그래머들은 커뮤니티 상에 공개 되어 있는 버그 추적 시스템을 직접 확인해 볼 수 있고, 앞으로 추가될 기능들에 대한 설계에 관련된 내용을 직접 확인 할 수 있으며, 개발자 포럼에서 다양한 프로젝트의 핵심 개발자들이 토론하는 내용을 살펴볼 수도 있다.

공개된 소스 코드를 살펴보고 JBoss에 대해 이해하고, 문제점을 디버깅하고, JBoss가 동작하는 방식을 배울 수도 있다. 실제 제품을 개발하는 개발자들에게 문제점을 보고하거나, 의견을 개진하고, 토론에 참여할 수도 있다. 만약 사용하고 있는 JBoss의 기능에 버그가 존재한다면, 그것을 해결하기 위한 패치를 직접 제작하고, 다음 버전의 제품에 그것이 채택되도록 개발자들에게 보내주는 것도 가능하다. 이러한 형태의 커뮤니티 참여를 통하여 많은 개발자들이 정규 멤버로 승격되어 JBoss AS(Wildfly) 개발에도 직접 참여할 수 있다.

오픈소스의 본질인 참여 정신 때문에 JBoss처럼 유명한 오픈소스 제품에는 거대한 커뮤니티가 형성되어 있다. JBoss 는 사용자 그룹, 포럼, 위키, Github를 통해서 참여하고 공유하는 커다란 국제적인 커뮤니티를 가지고 있다.

JBoss AS 같은 유명한 오픈소스 제품들은 독점 소프트웨어를 판매하는 경쟁제품들보다 능동적으로 참여하고 활발한 활동을 하는 사용자가 많기 때문에, 오픈소스 제품에 대한 버그 발견이나, 패치 개발 속도가 다른 독점 제품들과 비교해 훨씬 더 빠르다.

01-2.JBoss EAP 6의 새로운 기능 및 특징

JBoss EAP 6는 jboss.org 커뮤니티에서 개발된 JBoss Application Server 7(이후, JBoss AS 7)을 기반으로 만들어진 제품이다. JBoss EAP 6는 지금까지의 JBoss EAP 제품 중에서 가장 의욕적인 릴리스라고 할 수 있다.

JBoss EAP 6은 더 가벼워진 메모리 사용, 고성능, 쉬워진 관리 기능을 제공하여 개발자들이 좀더 쉽게 애플리케이션을 개발하고 운영자들은 물리적 서버 환경 뿐만 아니라 클라우드 환경에서도 손쉽게 웹 애플리케이션 서버 운영을 할 수 있도록 한다.

인프라 측면에서 메모리 사용량을 낮추고 구동시간을 줄였으며, 멀티코어, 가상화 시스템에 최적화되었다. Maven, Hudson, Arquillian, Hibernate 등 주요한 오픈소스 개발 지원 도구들과의 통합성을 높인 미들웨어 컴포넌트를 제공한다. Java EE 6 표준과 더불어 스프링, 스트러츠, 구글 웹 툴킷(GWT) 등 자바 기반의 오픈소스 애플리케이션 프레임워크들에 대한 기술 지원을 포함한다.

JBoss EAP 6에서 제공하는 주요한 새로운 기능들은 다음과 같다.

주요 기능 설명

Java 표준 지원

Java EE(Enterprise Edition) 6 Full Profile 및 Web Profile 표준 스펙에 인증된 제품

관리 도메인

  • 도메인 모드는 여러 서버 인스턴스 및 물리적 호스트를 중앙 집중화하여 관리할 수 있으며 스탠드얼론 모드는 단일 서버 인스턴스 단위로 관리가 가능하다.

  • 도메인 모드에서 설정, 배포, 소켓 바인딩, 모듈, 확장, 시스템 속성은 서버 그룹별로 관리된다.

  • 보안 도메인 등의 응용 프로그램 보안 설정이 중앙 집중방식으로 단순화되었다.

관리 콘솔 및 관리 CLI

관리 콘솔 및 CLI는 도메인 또는 스탠드얼론 모드에서 JBoss EAP 6 인스턴스를 관리하는 새로운 인터페이스이다. 더 이상 XML 설정 파일을 직접 편집하지 않아도 된다. 관리 CLI는 배치 모드도 제공하여 관리 작업에 대하여 스크립트를 작성하여 자동화 할 수 있다.

단순화된 디렉터리 레이아웃

JBoss EAP 6 디렉터리 레이아웃이 단순화되었다. modules/ 디렉터리에는 서버 별 lib/ 디렉터리 대신 애플리케이션 서버 모듈이 포함되어 있다. domain/ 및 standalone/ 디렉터리에는 도메인 및 스탠드얼론 모드 배포용 설정 파일이 포함된다.

모듈 클래스 로딩 메커니즘

모듈들은 애플리케이션에서 요청이 있을 때 로드, 언로드 할 수 있도록 클래스 로딩 메커니즘이 완전히 모듈화되었다. 이 방식은 성능 및 보안 측면에서 장점이 있을 뿐만 아니라, 서버를 매우 빠르게 시작, 재시작할 수 있다.

단순화 된 데이터소스 관리

데이터베이스 드라이버는 다른 서비스와 같은 방법으로 배포된다. 데이터소스는 관리 콘솔이나 관리 CLI에서 직접 만들고 관리한다.

시작 및 정지 시간 단축

JBoss EAP 6는 시작과 정지 시간이 매우 빨라졌으며, 적은 리소스를 사용하기 때문에 시스템 자원을 매우 효율적으로 사용한다. 빈번히 애플리케이션을 배포하여 테스트하는 개발자들에게는 빠른 부팅 시간은 시간을 상당히 줄여준다. 이를 통해 전체 테스트 시간이 줄어드는 효과가 있다.

표 2. JBoss EAP 6의 새로운 기능

01-3.JBoss EAP 6 지원 표준

JBoss EAP(JBoss Enterprise Application Platform) 릴리스에서 다음과 같은 업계 표준을 지원한다. 호환성 검증을 위해 각 주요 릴리즈에 대한 표준 인증 테스트를 완료하여 인증을 받았다.

  • Java EE(Enterprise Edition)

JBoss EAP 6에서는 Java EE 6 표준의 지원 범위에 따라서 Web Profile 과 Full Profile 두 가지의 프로파일을 제공하고 있다.

JBoss EAP에서 지원하는 Java EE 표준은 다음과 같다.

기술 표준 JBoss EAP 6 JBoss EAP 5.1 JBoss EAP 4.3

Java EE[JSR-151,244,316]

6.0

5.0

1.4

JAX-RPC(Java API for XML-based RPC) [JSR-101]

1.1

1.1

1.1

SAAJ(SOAP with Attachments API for Java) [JSR-067]

1.3

1.3

1.3

Java Servlet [JSR-154, 315]

3.0

2.5

2.4

JSF(JavaServer Faces) [JSR-252, 314]

2.0

1.2

1.2

JSP(JavaServer Pages & Expression Language) [JSR-245]

2.2

2.1

2.1

JTA(Java Transaction API) [JSR-907]

1.1

1.1

1.0

JACC(Java Authorization Contract for Containers) [JSR-115]

1.3

1.1

1.0

EJB(Enterprise JavaBeans) with Interceptors 1.1 [JSR-153, 220, 318]

3.1

2.1, 3.0

2.1, 3.0

Java EE Connector Architecture [JSR-112, 322]

1.6

1.5

1.5

J2EE Management [JSR-077]

1.1

1.0

1.0

Enterprise Web Services [JSR-109]

1.3

1.2

1.1

Java EE Application Deployment [JSR-088]

1.2

1.2

1.1

JavaMail [JSR-919]

1.4

1.4

1.4

JMS(Java Message Service) [JSR-914]

1.1

1.1

1.1

JPA(Java Persistence) [JSR-220, 317]

2.0

1.0

1.0

Web Services Metadata for the Java Platform [JSR-181]

2.0

2.0

2.0

JAX-WS(Java API for XML Web Services) [JSR-224]

2.2

2.1

2.0

Debugging Support for Other Languages [JSR-045]

1.0

1.0

-

JSTL(Standard Tag Library for JavaServer Pages) [JSR-052]

1.2

1.2

1.2

Common Annotations for the Java Platform [JSR-250]

1.1

1.0

1.0

JAXB(Java Architecture for XML Binding) [JSR-222]

2.2

2.0

2.0

JAX-RS(Java API for RESTful Web Services) [JSR-311]

1.1

1.0

-

JAXR(Java API for XML Registries) [JSR-093]

1.0

1.0

1.0

CDI(Contexts and Dependency Injection for Java) [JSR-299]

1.0

-

-

Bean Validation [JSR-303]

1.0

-

-

표 3. JBoss EAP 버전별 기술 표준

웹 서비스 표준 및 API

각각의 해당 JBoss EAP 릴리스에서 다음과 같은 웹 서비스 표준을 지원한다.

기술 표준 JBoss EAP 6.0 JBoss EAP 5.1 JBoss EAP 4.3

SOAP(Simple Object Access Protocol)

1.2

1.2

1.1, 1.2

SOAP MTOM(Message Transmission Optimization Mechanism)

XOP(XML-Binary Optimized Packaging)

WSDL(Web Services Description Language)

1.1, 2.0

1.1, 2.0

1.1

WS-I Basic Profile

1.1

1.1

1.1

WS-Addressing

1.0

1.0

1.0

WS-Reliable Messaging

1.1

1.1[1]

-

WS-Security

1.1

1.1

1.1

UDDI(Universal Description Discovery and Integration)

2.0, 3.0

2.0

2.0

JAX-WSA(Java API for XML Web Services Addressing) [JSR-261]

1.0

1.0

1.0

WS-Atomic Transactions

1.1

1.1

-

Fast Infoset(FI - ISO/IEC 24824-1, ITU-T Rec. X.891)

-

WS-Business Activity

1.1

1.1

-

WS-Coordination

1.1

1.1

-

WS-Security Policy

1.3

1.3[1]

-

WS-Policy

1.5

1.5[1]

-

WS-Policy Attachment

1.5

1.5[1]

-

WS-I Attachments Profile

1.0

1.0

1.0

WS-Eventing

-

-

-

WS-Trust

1.3

1.3[1]

-

SAML(Security Assertion Markup Language)

-

2.0[2]

-

XACML

2.0

2.0

-

표 4. JBoss EAP 버전별 웹 서비스 표준

[1] 선택 사항인 JBoss WS Apache CXF에 포함된다.

[2] PicketLink Federation은 EAP 5.1.1에서는 기술 검토용이다.

추가 표준 및 API

각각의 해당 JBoss EAP 릴리스에서 다음과 같은 추가 표준을 지원한다.

기술 표준 JBoss EAP 6.0 JBoss EAP 5.1 JBoss EAP 4.3

JTS(Java Transaction Service)

1.0

1.0

-

JDBC [JSR-054]

[3]

3.0, 4.0

3.0

CORBA

2.3.1

2.3.1

2.3.1

Streaming API for XML Processing(StAX) [JSR-173]

[3]

1.0

1.0

JAF(JavaBeans Activation Framework) [JSR-925]

[3]

1.1

1.1

JMX(Java Management Extensions) [JSR-255]

[3]

2.0

-

JDBC(Java Database Connectivity) [JSR-221]

[3]

4.0

4.0

JAXP(Java API for XML Processing) [JSR-205]

[3]

1.3

-

SPNEGO/Kerberos

-

표 5. JBoss EAP 버전별 추가 표준 API 버전

[3] 현재 Java SE를 통해 구현된다.

01-4.Java EE 6 표준 이해

Java EE(Enterprise Edition) 6의 표준은 새로운 프로파일 개념을 정의하고 표준의 일부로 Full Profile과 Web Profile 두 개의 프로파일을 정의하고 있다. JBoss EAP 6는 Java EE 6의 Full Profile 및 Web Profile 표준을 지원하는 대표적인 웹 애플리케이션 서버이다.

  • Java EE( Enterprise Edition )6 Web Profile

  • Java EE( Enterprise Edition )6 Full Profile

Java EE 6 Full Profile

Java EE 6의 모든 기술들이 포함되어 있는 Java EE Full Profile은 30 가지가 넘는 기술 표준들로 구성되어 있으며, 이러한 표준기술들을 활용하여 웹 애플리케이션 서버로서의 서비스를 제공하고 있다. 데이터베이스 접속, 웹 서비스 제공, 트랜잭션 실행과 관리, 보안 정책, 메시징, 네이밍, 이메일 송신, 외부 자원에의 접속 등의 기능들을 제공하고 있다.

Full Profile은 다음 API를 지원한다. JBoss는 Java EE 6 Full Profile을 지원한다.

Java EE6 Full Profile 에서 제공하는 항목

  • EJB 3.1(Lite 아님) (JSR 318)

  • Java EE Connector Architecture 1.6 (JSR 322)

  • Java Message Service (JMS) API 1.1 (JSR 914)

  • JavaMail 1.4 (JSR 919)

  • 웹서비스 기술

    • Jax-RS RESTful Web Services 1.1 (JSR 311)

    • Implementing Enterprise Web Services 1.3 (JSR 109)

    • JAX-WS Java API for XML-Based Web Services 2.2 (JSR 224)

    • Java Architecture for XML Binding (JAXB) 2.2 (JSR 222)

    • Web Services Metadata for the Java Platform (JSR 181)

    • Java APIs for XML-based RPC 1.1 (JSR 101)

    • Java APIs for XML Messaging 1.3 (JSR 67)

    • Java API for XML Registries (JAXR) 1.0 (JSR 93)

  • 관리 및 보안 기술

    • Java Authentication Service Provider Interface for Containers 1.0 (JSR 196)

    • Java Authentication Contract for Containers 1.3 (JSR 115)

    • Java EE Application Deployment 1.2 (JSR 88)

    • J2EE Management 1.1 (JSR 77)

Java EE6 Web Profile

Java EE 6 표준 중에서 웹과 관련된 기술들만 포함한 프로파일이 Web Profile이다. Servlet, Java Server Pages(JSP), Java Server Faces(JSF), Contexts and Dependency Injection(CDI), Java Persistence API(JPA), EJB Lite 등 웹 개발자가 일반적으로 사용하는 Java EE중 웹 관련 기술을 포함하고 있다. EJB Lite는, EJB 3 표준의 부분집합으로 웹 개발자가 Full Profile 환경이 아니더라도 EJB중 많이 사용하는 일부 기능들을 사용할 수 있다. EJB Lite는 리모트 인터페이스나 메시지 구동형 Bean(MDB) 등의 기능은 없지만 Stateful, Stateless 세션 빈 과 엔티티 빈을 지원한다.

Java EE 6 Web Profile에서 제공하는 항목

  • 웹 관련 기술

    • Servlet 3.0 (JSR 315)

    • JSP 2.2 및 Expression Language (EL) 1.2

    • Java Server Faces (JSF) 2.0 (JSR 314)

    • JSP 1.2을위한 Java Standard Tag Library (JSTL)

    • Debugging Support for Other Languages 1.0 (JSR 45)

  • 엔터프라이즈 애플리케이션 기술

    • Contexts and Dependency Injection (CDI) (JSR 299)

    • Dependency Injection for Java (JSR 330)

    • Enterprise JavaBeans 3.1 Lite (JSR 318)

    • Java Persistence API 2.0 (JSR 317)

    • Common Annotations for the Java Platform 1.1 (JSR 250)

    • Java Transaction API (JTA) 1.1 (JSR 907)

    • Bean Validation (JSR 303)

기능 EJB Lite EJB

Stateless beans

Stateful beans

Singleton beans

Message driven beans

No interfaces

Local interfaces

Remote interfaces

Web service interfaces

Asynchronous invocation

Interceptors

Declarative security

Declarative transactions

Programmatic Transactions

Timer service

EJB 2.x support

CORBA Interoperability

표 6. EJB 와 EJB Lite 의 기능 비교

JBoss EAP 6에서는 Java EE 6에서 처음 도입된 프로파일을 설정으로 간단하게 구분하여 사용할 수 있는 기능을 제공하고 있다.

image

그림 5. Java EE 6의 Web Profile 과 Full Profile 비교

01-5.JBoss EAP 6 의 주요 특징

Java EE 6 지원

JBoss EAP 6 는 Java EE 6 호환 애플리케이션 서버이다. 자바 애플리케이션 서버는 애플리케이션 개발 아키텍처를 표준화한다. Java EE는 여러 컴포넌트 모델들을 정의하는데, 개발자들은 이러한 표준화된 모델을 사용하여 컴포넌트를 개발한다. 이 컴포넌트들은 표준 배포 모델을 사용하는 애플리케이션 서버 내에서 배포할 수 있다. 서버 내에서 컴포넌트들이 동작할 때, 서버는 컴포넌트가 동작할 수 있도록 일련의 서비스들을 제공한다.

누구도 따라 올 수 없는 빠른 부팅 시간

JBoss EAP 6 이전 버전은 부팅 프로세스가 거의 단일 스레드에서 동작하여 CPU를 제대로 사용하지 못하는 것이 가장 큰 문제였다. JBoss EAP 6는 개발 초기부터 멀티 스레드를 기반으로 시작할 수 있도록 설계되었다. JBoss EAP 6는 프로세스 시작 시 병렬화를 통하여 멀티 코어 CPU를 충분히 활용 하여 보다 빠르게 부팅한다.

이전 버전에서는 JBoss EAP 시작시 불필요한 서비스들도 함께 시작되어, 최적화하려면 설정 파일의 변경이 필요했다. JBoss EAP 6에서는 요청하지 않은 서비스는 사용되지 않도록 하여 WAS 의 실행 시간 및 메모리를 효율적으로 사용할 수 있도록 향상되었다. 예를 들어 OSGi 서비스는 OSGi 번들이 배포되지 않는 한 실행되지 않는다. 일종의 Lazy 로딩이다. 클러스터 통신 모듈도 클러스터용 애플리케이션이 배포되지 않는 한 실행되지 않는다. JBoss EAP 6에서는 사용자가 별도 설정을 하지 않아도 최적화된 운영환경에서 운영할 수 있게 되었으며 부팅 시간도 대폭 줄일 수 있게 되었다.

또한 최초 실행 이후에는 모듈들에 대한 캐시와 메타 데이터의 인덱스를 통하여 시작 시간을 더욱 더 단축할 수 있게 되었다.

레드햇 내부적으로 진행한 기존 버전 대비 WAS 부팅 시간을 비교한 자료를 보면, 기존 버전 대비 20배 정도 빠른 2초 내외로 아주 빠르게 시작되는 것을 확인 할 수 있다.

image

그림 6. 기존 JBoss EAP과 시작 시간 비교

개발 시간 단축

JBoss EAP 6의 빠른 부팅 시간과 병렬형 애플리케이션 배포 그리고 EJB Lite 나 Web Profile과 같은 새로운 표준을 사용하여 기존의 개발, 배포 및 테스트 시간을 줄여 개발 생산성이 향상된다.

모듈형 클래스 로딩

계층형 클래스 로더를 사용하는 경우에는 부모와 자식 클래스 로더 간에 동일한 클래스의 충돌로 인하여 개발자나 관리자에게 많은 어려움이 있었고, 이를 해결하기 위해 많은 시간을 소모하였다.

JBoss Modules은 배포된 모듈마다 검색 범위가 한정되고 그 내부에서도 패키지마다 인덱스되어 있어 신속하게 클래스를 로드 할 수 있게 되었다.

JBoss EAP 6에서는 JBoss Modules 통해 의존성을 사용하여 애플리케이션에서 사용하는 클래스와 JBoss가 사용하는 클래스의 충돌을 회피할 수 있다. 개발자가 원하는 클래스를 항상 명시적으로 지정하여 로딩하기 때문에, 기존 계층형 클래스 로더에서 클래스가 어디서 로딩되는지 파악하기 어려운 문제를 해결할 수 있다.

JBoss Modules은 애플리케이션이 요청할 때 클래스를 병렬로 빠르게 로드할 수 있다.

Module 클래스는 컬렉션을 사용한 것으로 명시적으로 다른 모듈의 종속성을 지정하지 않으면 의존성을 갖지 않는다.

계층형 클래스로더 모듈형 클래스로더
  • 중복 배포

  • 로드 순서에 의한 교착 상태 발생

  • 복잡/ 클래스 검색이 늦음

  • 중복 배포에 의한 오류 발생

  • 클래스 공유

  • 문제를 회피하기 위한 구조가 더 복잡도를 높여 악순환

  • 계층형 클래스 로더의 문제점 해결

  • 모듈 하나에 대해서 하나의 클래스로더

  • 각 모듈은 런타임으로 필요로 하는 모듈의 의존성을 정의

  • 계층형이 아닌 그래프 구조

  • 「클래스 패스」 는 사라짐

  • 단순하여 초고속

표 7. 계층형 클래스로더와 모듈형 클래스로더의 비교

image

그림 7. 계층형 클래스 로더와 모듈형 클래스 로더의 비교

다이어트된 메모리 사용

JBoss EAP 6에서는 GC 정지 시간을 최소화하기 위해 메모리 관리 부분에서 많은 개선점이 있었다. 예를 들어 jar 파일에 대한 색인 데이터를 사용하는 방법이나, 모든 클래스를 로딩해 놓는 것이 아니라 애플리케이션에서 사용하는 시점에 로드하는 방법 등이 메모리 효율화를 위한 개선사항이다. 이런 방식을 사용하여 메모리 사용량이 크게 줄어들었다. 최적화된 메모리 사용으로 소형 디바이스나 아마존 AWS 와 같은 클라우드 환경에서 사용이 쉬워졌다. 또, Profile을 정의하여 애플리케이션에서 사용하지 않는 기능(mail, messaging 등)을 손쉽게 제거할 수 있어 최적화된 상태로 서버를 운영할 수 있다.

다음 그림은 기존 EAP 버전과 새로운 EAP6 버전의 메모리 사용량의 비교이다.

image

그림 8. 기존 버전과 JBoss EAP 6의 메모리 사용량 비교

인덱스를 이용한 성능 향상

프레임워크를 개발하거나 성능 이슈로 인하여 프로파일링을 해본 개발자들은 이해할 수 있는 내용이겠지만, 배포시 XML과 어노테이션 클래스를 리플렉션으로 스캔하는 것은 매우 비용이 큰 작업이다.

JBoss EAP 6에서는 org.jboss.as.server.deployment.DeploymentUnit라는 클래스가 배포에 관련된 실제 작업을 수행하고 다양한 컴포넌트에 배포관련 정보를 전달한다. DeploymentUnit에는 Attachments라는 클래스를 포함하고 있고, 거기에 DeploymentReflectionIndex라는 클래스 인덱스와 Jandex라는 주석 인덱스를 포함하고 있다.

클래스 인덱스 및 주석 인덱스를 이용하여 클래스 정보를 얻을 수 있으며 한 번 로드 된 클래스 정보는 캐시되어 실제 java.lang.ref를 호출하는 횟수를 최소화한다. 현재의Java 구현에서는 예를 들어 java.lang.ref의 호출 시 메서드 목록을 검색하여 실행할 수 밖에 없다. JBoss EAP 6에서는 메서드 목록이 캐시되어 있어, 캐시에서 찾아 실행만 하면 되기 때문에 성능이 상당히 빨라졌다. JBoss EAP6에서 애플리케이션 배포와 관련된 부분들은 jar 파일내의 클래스들에 대한 인덱스를 만들어 두었다가 사용하기 때문에 클래스 정보를 얻기 위해 클래스를 스캔할 때 생기는 병목 문제를 해결하고 있다.

결론적으로는 두 번째 호출부터 캐시, 색인된 메타 데이터를 사용하기 때문에 부팅시간을 현저히 줄일 수 있게 되었다.

중앙 집중화된 설정 파일과 편리한 관리 도구

기존의 JBoss EAP 5제품에서는 설정 파일을 서비스마다(AJP, Clustering , Datasource 등) 여러 가지 XML 파일로 여러 디렉터리에 나누어 관리하여 설정 파일을 찾아 직접 수정하는 것이 어려운 작업이었다. JBoss EAP 6에서는 중앙 집중화된 파일(domain.xml, standalone.xml, host.xml)을 사용하여 관리하기 때문에 이런 불편이 사라졌다.

JBoss EAP 6 설정 정보들은 중앙 집중화되어 있고, 사용자가 편리하게 사용할 수 있도록 관리도구들도 함께 제공하고 있다. 중앙 집중화된 CLI, 관리 콘솔 등의 설정 방법들을 사용하여 관리 작업도 통합되었다. 이런 방식이기 때문에 도메인의 여러 서버들이 동일한 설정 파일을 공유 할 수 있는 방식도 제공하고 있다.

위의 설명들을 정리하면 다음 두 가지 핵심적인 내용으로 정리할 수 있다.

  • 설정 파일은 도메인, 스탠드얼론 모드 모두 중앙 집중화 되었다.

  • 도메인 모드에서는 도메인내의 서버들 간에 설정을 공유할 수 있다.

이전 버전의 관리 방식 JBoss EAP 6 관리 방식
  • 주요 WAS 관련 작업마다 개별 디렉터리와 파일들을 수작업으로 편집해야 함

  • 전문 지식이나 경험이 필요함

  • 수작업에 의한 운영자 오류에 주의해야 함

  • 구성 방법 (standalone 또는 domain) 에 따른 일원화 되고 통합된 xml 파일 관리

  • xml 파일에 대한 history 생성

  • Single Log On

  • CLI 스크립트를 통한 자동화와 템플릿

  • WAS 관리에 필요한 주요 Task 에 대하여 cli 스크립트를 통한 설정

표 8. JBoss EAP6 와 이전 버전의 관리 방식 비교

image

그림 9. 기존 버전과 JBoss EAP 6의 관리 방법 비교

CLI 를 통한 커맨드 형식의 관리

JBoss EAP 6에서는 이전 버전에 비해 사용자가 쉽게 사용할 수 있는 웹 관리 콘솔과 정교한 관리가 가능한 CLI 스크립트 및 외부 애플리케이션과 인터페이스를 위한 REST API, Java API, HTTP API를 사용하여 설정에 대한 유지보수 및 관리가 가능하다.

웹 관리 콘솔은 데이터소스 설정, JNDI 검색, 로깅 설정, 응용 프로그램 배포, IP 주소 및 포트 설정, 시스템 속성 등을 설정하고 모니터링 하는 등 거의 대부분의 관리작업을 할 수 있게 되었다.

또, CLI를 사용하여 JMS, 데이터소스, Deploy, Undeploy 같은 자원의 관리 및 설정 파일(XML)을 노드 구조에 접근하여 값을 확인하고 변경할 수 있다. CLI는 XML로 할 수 있는 모든 작업을 지원한다. 실제로 웹 관리 콘솔에서도 CLI가 제공하는 API를 사용하여 변경 사항을 관리한다.

개선된 내용 중 가장 편리한 것은 변경된 설정 내용에 대한 버전관리를 지원하기 때문에 구성 파일의 변경내역을 수작업으로 관리해야 하는 작업들이 많이 줄어들게 되었다.

웹 관리 콘솔 또는 CLI를 통해 변경한 내용들은 중앙에서 XML 파일로 관리한다.

01-6.서브스크립션

JBoss EAP 6의 라이선스는 LGPL로 제공되고 있다. 즉 소프트웨어 자체는 무상으로 제공되고 있다. 엔터프라이즈 환경에서 여러 가지 문제점들이 발생한다. 물론 소프트웨어가 오픈소스이기 때문에 커뮤니티를 통해 문제들을 스스로 해결할 수도 있다. 이런 문제 해결과정에 시간이 많이 필요하기 때문에, 전문가의 기술지원이 필요한 경우가 많다.

레드햇은 이런 기술 지원을 ‘서브스크립션(Subscription)’으로 판매하고 있다. 기술지원 서브스크립션은 마치 신문을 구독하는 것과 마찬가지로 정해진 기간만큼 제품에 대한 기술 서비스를 받는 방식이다.

서브스크립션에는 다음과 같은 서비스들이 포함된다.

  • 소프트웨어 다운로드

    JBoss EAP 6를 포함한 JBoss Enterprise Middleware 제품들을 다운로드 받을 수 있다.

  • 패치, 업데이트

    제품에 대한 패치나 보안 업데이트 등을 고객포털에서 다운로드 받을 수 있다.

  • 제품 기술지원

    고객포털(http://access.redhat.com)에서 케이스를 생성하여 전문 엔지니어의 기술지원을 받을 수 있다.

  • 오픈소스 보증

    레드햇의 오픈소스 소프트웨어를 사용 중 저작권 문제가 발생하였을 때 레드햇이 보증한다.

  • 제품 문서와 지식 검색

    제품에 대한 문서를 제공하고, 기술적 이슈를 쉽게 해결할 수 있도록 잘 정리된 지식(Knowledge)들을 검색할 수 있다.

01-7.JBoss Enterprise Middleware 제품군

JBoss의 제품은 JBoss EAP 6만 있는 것은 아니다. 현재 레드햇에서 제공하는 제품들은 디자인/개발환경, 운영환경, 관리환경으로 나누어 다양한 제품을 공급하고 있다.

기본적으로 모든 제품들은 jboss.org의 오픈소스 프로젝트의 결과물을 Q/A, 문서화 작업을 거쳐 배포하는 것이다.

image

그림 . JBoss Enterprise Middleware 제품군

JBoss Developer Studio는 애플리케이션 개발에 사용되는 이클립스 기반의 IDE 개발툴이며, BRMS는 오픈소스 룰 엔진으로 긴 역사를 갖고 있는 Drools 프로젝트를 기반으로 한 룰엔진 및 CEP(Complex Event Processing) 기능을 제공하는 제품이다.

또, 포틀릿 컨테이너 기능을 제공하는 Portal 제품, Integration을 위한 SOA(Service Oriented Architecture) 제품과 분산 인메모리 Key Value Store 기능을 제공하는 Infinispan을 기반으로 한 JBoss Data Grid 제품 등이 있다.