JBoss EAP 6과 친해지기 2탄 - JBoss EAP 6의 새로운 기능 및 특징
본문 바로가기
IT 이야기/JBoss EAP

JBoss EAP 6과 친해지기 2탄 - JBoss EAP 6의 새로운 기능 및 특징

by 찬찬이 아빠 2020. 9. 15.
반응형
  1. 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 등 주요한 오픈소스 개발 지원 도구들과의 통합성을 높인 미들웨어 컴포넌트를 제공합니다. Jave EE 6 표준과 더불어 스프링, 스트러츠, 그글 웹 툴킷(GWT) 등 Java 기반의 오픈 소스 애플리케이션 프레임워크들에 대한 기술 지원을 포함합니다.

 

<JBoss EAP 6의 새로운 기능>

주요 기능 설명
Java 표준 지원 Java EE(Enterprise Edition) 6 Full Profile 및 Web Profile 표준 스펙에 인증된 제품
도메인 모드 1. 도메인 모드는 여러 서버 인스턴스 및 물리적 호스트를 중앙 집중화하여 관리할 수 있으며 스탠드얼론 모드는 단일 서버 인스턴스 단위로 관리가 가능합니다.
2. 도메인 모드에서 설정, 배포, 소켓 바인딩, 모듈, 확장, 시스템 속성은 서버 그룹별로 관리됩니다.
3. 보안 도메인 등의 응용 프로그램 보안 설정이 중앙 집중방식으로 단순회도었습니다.
관리 콘솔 및
관리 CLI
관리 콘솔 및 CLI는 도메인 또는 스탠드얼론 모드에서 JBoss EAP 6 인스턴스를 관리하는 새로운 인터페이스입니다. 더 이상 XML 설정 파일을 직접 편집하지 않아도 됩니다. 관리 CLI는 배치 모드도 제공하여 관리 작업에 대하여 스크립트를 작성하여 자동화할 수 있습니다.
단순화된
디렉터리 레이아웃
JBoss EAP 6 디렉터리 레이아웃이 단순화되었습니다. module/ 디렉터리에는 서버별  lib/ 디렉터리 대신 애플리케이션 서버 모듈이 포함되어 있습니다. domain/ 및 standalone/ 디렉터리에는 도메인 및 스탠드얼론 모드 배포용 설정 파일이 포함되어 있습니다.
모듈 클래스
로딩 메커니즘
모듈들은 애플리케이션에서 요청이 있을 때 로드, 언로드할 수 있도록 클래스 로딩 메커니즘이 완전히 모듈화되었습니다. 이 방식은 성능 및 보안 측면에서 장점이 있을 뿐만 아니라 서버를 매우 빠르게 시작, 재시작할 수 있습니다.
단순화된
데이터소스 관리
데이터베이스 드라이버는 다른 서비스와 같은 방법으로 배포됩니다. 데이터 소스는 관리 콘솔이나 관리 CLI에서 직접 만들고 관리합니다.
시작 및 정지 시간
단축
JBoss EAP 6는 시작과 정지 시간이 매우 빨라졌으며 적은 리소스를 사용하기 때문에 시스템 자원을 매우 효율적으로 사용합니다. 빈번히 애플리케이션을 배포하여 테스트하는 개발자들에게는 빠른 부팅 시간은 시간을 상당히 줄여 줍니다. 이를 통해 전체 테스트 시간이 줄어드는 효과가 있습니다.

 

 

 

  2. JBoss EAP 6 지원 표준

JBoss EAP(JBoss Enterprise Application Platform) 릴리스에서 다음과 같은 업계 표준을 지원합니다.

호환성 검증을 위해 각 주요 릴리즈에 대한 표준 인증 테스트를 완료하여 인증을 받았습니다.

(참고 : https://access.redhat.com/site/ko/articles/299283) 

 

Red Hat Customer Portal

 

access.redhat.com

 

<Java EE(Enterprise Edition)>

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

 

<JBoss EAP 버전별 기술 표준>

기술 표준 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,314] 3.0 2.5 .24
JSF(JavaServer Faces)[JSR-252,314] 2.0 1.2 1.2
JSP(JavaServer Pages & Expression Lanauage)[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 Appliaction Deployment[JSR-088] 1.2 1.2 1.1
JavaMail[JSR-910] 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] 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(Contests and Dependency Injection for Java)[JSR-299] 1.0 - -
Bean Validation[JSR-303] 1.0 - -

 

<JBoss EAP 버전별 웹 서비스 표준>

기술 표준 JBoss EAP 6 JBoss EAP 5.1 JBoss EAP 4.3
SOAP(Simple Object Access Protocol) 1.2 1.2 1.1, 1.2
SOAP MTOM(Message Transmisson Optimization Mechanism)
XOP(MXL-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 -
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 Infose(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 -
WS-Policy 1.5 1.5 -
WS-Policy Attachment 1.5 1.5 -
WS-I Attachments Profile 1.0 1.0 1.0
WS-Eventing - - -
WS-Trust 1.3 1.3 -
SAML(Security Assertion Markup Language) - 2.0 -
XACML 2.0 2.0 -

 

 

<추가 표준>

기술 표준 JBoss EAP 6 JBoss EAP 5.1 JBoss EAP 4.3
JTS(Java Transation 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 -

 

 

 

  3. Java EE 6 표준 이해

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

 

(1) Java EE 6 Full Profile

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

 

<Java EE 6 Full Profile에서 제공하는 항목>

  • EJB 3.1(Lite 아님) (JSR 318)
  • Java EE Connector Architecute 1.6 JSR 322)
  • Java Message Service (JMS) API 1.1 (JSR 914)
  • JavaMail 1.4 (JSR 919)
  • 웹 서비스 기술
    • Jax-RS RESTful Web Service 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 APIs 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)

 

(2) Java EE 6 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와 EJB Lite의 기능 비교>

기능 EJB Lite EJB
Stateless beans O O
Stateful beans O O
Singleton beans O O
Message driven beans   O
No interfaces O O
Local interfaces O O
Remote interfaces   O
Web service interface   O
Asynchronous invocation   O
Interceptors O O
Declarative security O O
Declarative transactions O O
Programmatic Transactions O O
Timer service   O
EJB 2.x supprot   O
CORBA Interoperability   O

 

<Java EE 6의 Web Profile과 Full Profile 비교>

 

 

  4. Jboss EAP 6 주요 특징

(1) Java EE 6 지원

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

 

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

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

 

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

 

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

 

 

(3) 개발 시간 단축

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

 

 

(4) 모듈형 클래스 로딩

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

 

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

 

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

 

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

 

<계층형 클래스 로더와 모듈형 클래스 로더의 비교>

계층형 클래스 로더 모듈형 클래스 로더
중복 배포
로드 순서에 의한 교착 상태 발생
복잡/클래스 검색이 늦음
중복 배포에 의한 오류 발생
클래스 공유
문제를 회피하기 위한 구족가 더 복잡도를 높여 악순환계층형 클래스
로더의 문제점 해결
모듈 하나에 대해서 하나의 클래스 로더
각 모듈은 런타임으로 필요로 하는 모듈의 의존성을 정의
계층형이 아닌 그래프 구조
"클래스 패스"는 사라짐
단순하여 초고속

 

 

(5) 다이어트된 메모리 사용

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

 

 

(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 EAP 6에서 애플리케이션 배포와 관련된 부분들은 jar 파이리 내의 클래스들에 대한 인덱스를 만들어 두었다가 사용하기 때문에 클래스 정보를 얻기 위해 클래스를 스캔할 때 생기는 병목 문제를 해결하고 있습니다.

 

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

 

 

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

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

 

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

 

  • 설정 파일은 도메인, 스탠드얼론 모드 모두 중앙 집중화
  • 도메인 모드에서는 도메인 내의 서버들 간에 설정을 공유

 

<JBoss EAP 6와 이전 버전의 관리 방식 비교>

이전 버전의 관리 방식 JBoss EAP 6 관리 방식
주요 WAS 관련 작업마다 개별 디렉터리와 파일들을 수작업으로 편집
전문 지식이나 경험이 필요함
수작업에 의한 운영자 오류에 주의해야 함
구성 방법(standalone 또는 domain)에 따른 일원화되고 통합된 mxl 파일 관리
xml 파일에 대한 history 생성
Single Log On
CLI 스크립트를 통한 자동화와 템플릿
WAS 관리에 필요한 주요 Task에 대하여 cli 스크립트를 통한 설정

 

 

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

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

 

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

 

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

 

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

 

웹 관리 콘솔 또는 CLI를 통해 변경한 내용들은 중앙에서 XML 파일로 관리합니다. 저의 경우 중앙에서 XML 파일로 관리를 주로 하고 있습니다. 

 

 

 

참고서적 : 거침없이 배우는 JBoss

반응형

댓글