6.1 클래스로더 및 모듈 소개
JBoss EAP 6에서는 배포된 애플리케이션의 클래스 패스를 제어하기 위한 새로운 모듈 형식의 클래스 로드 시 스템을 사용한다. 이 시스템은 기존의 계층형 클래스 로더보다 유연하고 관리 기능이 매우 강력해졌다. 개발자가 애플리케이션에서 사용할 수 있는 클래스에 대해 상세한 제어가 가능하여 애플리케이션 서버에서 제공하는 클래스를 무시하고 자신의 클래스를 사용하도록 설정할 수도 있다.
모듈 형식의 클래스 로더는 모든 Java 클래스를 모듈이라는 논리 그룹으로 나눈다. 각 모듈은 자신의 클래스 패스에 추가된 모듈에서 다른 모듈 의존성을 정의할 수 있다. 모듈 시스템은 JBoss EAP 6에 패키지 된 모든 Java 클래스와 배포된 애플리케이션의 Java 클래스에 적용된다.
JBoss EAP 6에서 배포하는 각각 JAR 및 WAR 파일도 모듈로 취급되기 때문에 개발자는 모듈 설정과 의존성을 추가하여 애플리케이션의 클래스 패스 내용을 쉽게 제어 할 수 있다.
JBoss Modules 와 MSC
JBoss EAP 6에서는 JBoss 모듈 서비스 컨테이너(이하, MSC)가 적용되어 애플리케이션 서버의 서브시스템(EJB, 서블릿, JNDI 바인딩 등)의 각 모듈로부터 사용자 애플리케이션까지 MSC 상에서 동작하는 모듈 서비스로 구성하고 있다.
모듈 서비스가 그냥 서비스로 불리기도 한다. 모듈 서비스는 개별적으로 시작, 정지할 수 있다. 또, 모듈 서비스간에는 의존관계(dependencies)가 있어 어느 모듈 서비스에서 필요한 다른 모듈 서비스로 의존성을 정의할 수 있기 때문에 다른 모듈 서비스를 주입하는 일도 가능하다. MSC에서는 사용하려는 모듈 서비스에 관한 모든 의존성이 채워지면, 그 모듈 서비스를 시작한다. 반대로 의존성 중 1개라도 빠졌을 경우엔 해당의 모듈 서비스는 MSC에 의해 정지된다.

그림 2. JBoss MSC 의 코어 서비스
모듈 서비스에서 사용되는 용어들을 정리해보면 다음 표와 같다.
| 구분 | 작업 |
|---|---|
| 서비스 컨트롤러 | 서브시스템이나 모듈 등이 서비스로서 실행될 수 있도록 서비스 인터페이스를 제공하거나 서비스에 대한 제어를 담당한다. |
| 서비스 빌더 | 서브시스템이 서비스를 설치하기 위해 필요한 처리를 하는 빌더 기능을 제공한다. |
| 서비스 레지스트리 | 서비스 빌더를 이용해 서비스를 실행할 때 레지스트리에 서비스명과 서비스 컨트롤러를 등록한다. MSC는 이 레지스트리를 참조하여 적합한 서비스 컨트롤러를 반환하여 서비스를 제어하게 된다. |
| 인젝터 | 서비스 빌더가 서비스를 실행할 때 서비스가 의존하는 모듈을 인젝션 하지만 이것도 MSC에서 수행된다. 인젝션 할 때에 필요한 기능이 인젝터(injector)이고, 의존성이 정의되어 있어야 한다. 또, 모든 서비스 인스턴스로 접근은 Value 인터페이스에 의해 정의되고 있다. |
| Concurrent 서비스 컨테이너 | 모든 서비스를 제어하는 기반이 되는 중요한 컴포넌트이다. 이 컨테이너는 서비스를 시작하기 위해 필요한 작업을 태스크화하여 그 태스크를 멀티 스레드로 처리하고 있다. JBoss를 시작하는데 필요한 bootstrap 처리 등도 리스너 태스크로서 등록해 처리한다. |
표 1. 모듈의 주요 용어