1.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초 내외로 아주 빠르게 시작되는 것을 확인 할 수 있다.

그림 6. 기존 JBoss EAP과 시작 시간 비교
개발 시간 단축
JBoss EAP 6의 빠른 부팅 시간과 병렬형 애플리케이션 배포 그리고 EJB Lite 나 Web Profile과 같은 새로운 표준을 사용하여 기존의 개발, 배포 및 테스트 시간을 줄여 개발 생산성이 향상된다.
모듈형 클래스 로딩
계층형 클래스 로더를 사용하는 경우에는 부모와 자식 클래스 로더 간에 동일한 클래스의 충돌로 인하여 개발 자나 관리자에게 많은 어려움이 있었고, 이를 해결하기 위해 많은 시간을 소모하였다.
JBoss Modules은 배포된 모듈마다 검색 범위가 한정되고 그 내부에서도 패키지마다 인덱스되어 있어 신속하게 클래스를 로드 할 수 있게 되었다.
JBoss EAP 6에서는 JBoss Modules 통해 의존성을 사용하여 애플리케이션에서 사용하는 클래스와 JBoss가 사용하는 클래스의 충돌을 회피할 수 있다. 개발자가 원하는 클래스를 항상 명시적으로 지정하여 로딩하기 때문에, 기존 계층형 클래스 로더에서 클래스가 어디서 로딩되는지 파악하기 어려운 문제를 해결할 수 있다.
JBoss Modules은 애플리케이션이 요청할 때 클래스를 병렬로 빠르게 로드할 수 있다.
Module 클래스는 컬렉션을 사용한 것으로 명시적으로 다른 모듈의 종속성을 지정하지 않으면 의존성을 갖지 않는다.
| 계층형 클래스로더 | 모듈형 클래스로더 |
|---|---|
| * 중복 배포 * 로드 순서에 의한 교착 상태 발생 * 복잡/ 클래스 검색이 늦음 * 중복 배포에 의한 오류 발생 * 클래스 공유 * 문제를 회피하기 위한 구조가 더 복잡도를 높여 악순환 | * 계층형 클래스 로더의 문제점 해결 * 모듈 하나에 대해서 하나의 클래스로더 * 각 모듈은 런타임으로 필요로 하는 모듈의 의존성을 정의 * 계층형이 아닌 그래프 구조 * 「클래스 패스」 는 사라짐 * 단순하여 초고속 |
표 7. 계층형 클래스로더와 모듈형 클래스로더의 비교

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

그림 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 와 이전 버전의 관리 방식 비교

그림 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 파일로 관리한다.