6장. JBoss EAP 클래스 로드
JBoss EAP는 배포된 애플리케이션의 클래스 경로를 제어하기 위해 모듈식 클래스 로드 시스템을 사용합니다. 이 시스템은 계층적 클래스 로더의 기존 시스템보다 유연성과 제어 기능을 제공합니다. 개발자는 애플리케이션에서 사용할 수 있는 클래스를 세밀하게 제어할 수 있으며 애플리케이션 서버에서 제공하는 클래스를 무시하도록 배포를 구성할 수 있습니다.
모듈식 클래스 로더는 모든 Java 클래스를 모듈이라는 논리 그룹으로 구분합니다. 각 모듈은 해당 모듈의 클래스를 자체 클래스 경로에 추가하기 위해 다른 모듈에 대한 종속성을 정의할 수 있습니다. 배포된 각 JAR 및 WAR 파일은 모듈로 처리되므로 개발자는 애플리케이션에 모듈 구성을 추가하여 애플리케이션 클래스 경로의 콘텐츠를 제어할 수 있습니다.
6.1. 모듈 링크 복사링크가 클립보드에 복사되었습니다!
모듈은 클래스 로드 및 종속성 관리에 사용되는 클래스의 논리 그룹입니다. JBoss EAP는 정적 및 동적 이라는 두 가지 유형의 모듈을 식별합니다. 이 둘의 가장 큰 차이점은 패키지화 방법입니다.
정적 모듈
정적 모듈은 애플리케이션 서버의 EAP_HOME/modules/ 디렉터리에 정의됩니다. 각 모듈은 하위 디렉터리로 존재합니다(예: EAP_HOME/modules/com/mysql/ ). 각 모듈 디렉터리에는 기본적으로 main 로, module.xml 구성 파일과 필요한 JAR 파일이 포함된 slot 하위 디렉터리가 포함되어 있습니다. 모든 애플리케이션 서버 제공 API는 Java EE API 및 기타 API를 포함하여 정적 모듈로 제공됩니다.
MySQL JDBC Driver module.xml 파일의 예
모듈 이름(com.mysql)은 슬롯 이름(기본)을 제외하고 모듈의 디렉터리 구조와 일치해야 합니다.
동일한 타사 라이브러리를 사용하는 동일한 서버에 많은 애플리케이션이 배포되는 경우 사용자 지정 정적 모듈을 생성할 수 있습니다. 각 애플리케이션과 함께 이러한 라이브러리를 번들하는 대신 관리자가 이러한 라이브러리를 포함하는 모듈을 생성하고 설치할 수 있습니다. 그런 다음 애플리케이션은 사용자 지정 정적 모듈에 대한 명시적 종속성을 선언할 수 있습니다.
JBoss EAP 배포에 제공된 모듈은 EAP_HOME/modules 디렉터리 내의 시스템 디렉터리에 있습니다. 이렇게 하면 타사가 제공하는 모듈과 별도로 유지됩니다. JBoss EAP 상단에 계층이 있는 모든 Red Hat 제품도 시스템 디렉터리에 모듈을 설치했습니다.
사용자는 모듈당 하나의 디렉터리를 사용하여 사용자 지정 모듈이 EAP_HOME/modules 디렉터리에 설치되어 있는지 확인해야 합니다. 이렇게 하면 제공된 버전 대신 시스템 디렉터리에 이미 존재하는 모듈의 사용자 지정 버전이 로드됩니다. 이러한 방식으로 사용자 제공 모듈이 시스템 모듈보다 우선합니다.
JBOSS_MODULEPATH 환경 변수를 사용하여 JBoss EAP가 모듈을 검색하는 위치를 변경하는 경우 제품은 지정된 위치 중 하나의 시스템 하위 디렉터리 구조를 찾습니다. 시스템 구조는 JBOSS_MODULEPATH 로 지정된 위치에 있어야 합니다.
동적 모듈
동적 모듈은 애플리케이션 서버에서 각 JAR 또는 WAR 배포(또는 EAR의 하위 배포)에 의해 생성 및 로드됩니다. 동적 모듈의 이름은 배포된 아카이브의 이름에서 파생됩니다. 배포는 모듈로 로드되므로 종속성을 구성하고 다른 배포에서 종속성으로 사용할 수 있습니다.
모듈은 필요한 경우에만 로드됩니다. 이는 일반적으로 명시적 또는 암시적 종속 항목이 있는 애플리케이션이 배포되는 경우에만 발생합니다.