클래스 로더는 클래스 파일을 찾아서 로드합니다. 배치된 애플리케이션이
적절하게 실행되도록 하려면, 애플리케이션 및 해당 모듈에 영향을 주는 클래스 로더를
구성하여 애플리케이션이 필요로 하는 파일 및 자원을 찾을 수 있도록 해야 합니다.
클래스 로더에 대한 문제점 진단은 복잡하며 상당한 시간이 소요됩니다.
문제점을 더 신속하게 진단하고 수정하려면 관리 콘솔 클래스 로더 뷰어를 사용하여 클래스 로더와 각 클래스 로더에 의해 로드된
클래스를 조사하십시오.
시작하기 전에
이 주제에서는 제품에서 지원하는 서버에 애플리케이션을 설치했으며
애플리케이션 또는 해당 모듈에 사용되는 클래스 로더를 조사하려 한다고
가정합니다. 모듈은 웹 모듈(.war 파일)이거나 엔터프라이즈
Bean(EJB) 모듈(.jar 파일)일 수 있습니다. 클래스 로더 뷰어를 사용하면
런타임 환경에서 클래스 로더를 조사할 수 있습니다.
이 주제에서는
또한 클래스 로더 뷰어 서비스를 사용 가능하게 했다고 가정합니다.
를 클릭하고 서비스를 사용 가능하게 한 후
서버를 다시 시작하십시오.
이 태스크 정보
WebSphere® Application Server의
런타임 환경은 다음 클래스 로더를 사용하여 다음 순서로 애플리케이션에 대한
새 클래스를 찾고 로드합니다.
- 부트스트랩, 확장자, 및 CLASSPATH 클래스 로더는
Java 가상 시스템으로 작성됩니다.
- WebSphere 확장 클래스 로더
- 서버에서 실행 중인 엔터프라이즈 애플리케이션 요소를 로드하는 하나
이상의 애플리케이션 모듈 클래스 로더.
- 0 이상의 웹 모듈 클래스 로더

이전 클래스 로더는 그 위에 있는 클래스 로더의 하위입니다. 즉, 애플리케이션
모듈 클래스 로더는 CLASSPATH Java 클래스 로더의 하위 요소인
WebSphere 확장 클래스 로더의 하위 요소입니다. 클래스를
로드해야 할 때마다 클래스 로더는 대개 요청을 상위 클래스 로더에
위임합니다. 어떤 상위 클래스 로더도 클래스를 찾을 수 없는 경우,
원래 클래스 로더가 클래스를 로드하려 시도합니다. 요청은 상위
클래스 로더로만 이동하며 하위 클래스 로더로 이동할 수 없습니다.
클래스 로더에서 클래스가 로드된 후,
로드하려 시도하는 새 클래스는 동일한 클래스 로더를 다시 사용하거나 해당 클래스를 찾을 때까지 이전 목록을 거슬러 올라갑니다.
애플리케이션의
아티팩트를 로드하는 클래스 로더가 제대로 구성되어 있지 않은 경우 해당 애플리케이션
시작 또는 실행 시 JVM(Java Virtual Machine)이 클래스 로딩 예외를
발행할 수 있습니다. 클래스 로딩 예외에서는
부적절하게 구성된 클래스 로더에 의해 발생되는 예외 유형을 설명하고 클래스 로더 구성을 정정하기 위해
클래스 로더 뷰어를 사용하는 방법을 제안합니다. 예외 유형은 다음과 같습니다.
클래스 로더 뷰어를 사용하여
클래스 로더를 조사하고 애플리케이션이나 클래스 로더 구성 문제점을 정정합니다.
프로시저
- 설치된 모든 애플리케이션과 해당 모듈을 나열하는 트리 보기를 조사하십시오. 모듈은 웹 모듈(.war
파일)이거나 EJB 모듈(.jar 파일)일 수 있습니다.
를 클릭하여 엔터프라이즈 애플리케이션 토폴로지 페이지에 액세스하십시오.
- 클래스 로더 위임 계층 구조를 조사하십시오.
엔터프라이즈 애플리케이션 토폴로지 페이지에서 클래스 로더 뷰어
페이지에 액세스할 모듈을 선택하십시오. 페이지에는 설치된 엔터프라이즈 애플리케이션의 웹 및
EJB 모듈에 대해 표시 가능한 클래스 로더가 나열됩니다. 이 페이지는 어떤 클래스 로더가 모듈의 파일을 로드하는지
판별하고 클래스 로더의 문제점을 진단하는 데 도움이 됩니다.
위임 계층 구조는 애플리케이션이나 웹 모듈에 대해 지정된
클래스 로더 위임 모드 또는 클래스 로더 순서에 의해
판별됩니다. 값은 상위 클래스 로더를 사용하여 로드된 클래스 먼저
또는 로컬 클래스 로더를 사용하여 로드된 클래스 먼저(상위 마지막) 중
하나입니다. 자세한 정보는 클래스 로더
구성 단계를 참조하십시오.
- 클래스 로더에 대한 정보를 내보내십시오.
- 클래스 로더 뷰어 페이지에서 내보내기를 클릭하십시오.
- 클래스 로더 정보에 대해 브라우저 또는 편집기를 열거나
디스크에 XML 형식으로 정보를 저장할 것을 선택하십시오.
- 확인을 클릭하고 시스템이 요청하는 추가 정보를 지정하십시오.
- 모듈에 대해 표시 가능한 클래스 로더에 대한 정보를 HTML 테이블 형식으로 표시하십시오.
클래스 로더 뷰어 페이지에서
테이블 보기를 클릭하십시오. 테이블 보기
페이지는 다음 정보를 표시합니다.
표 1. 테이블 보기 페이지. 클래스 로더 속성에 대한 정보가 제공되어 있습니다. 클래스 로더 속성 |
설명 |
위임 |
클래스 로더가 모듈의 로딩을 상위 클래스 로더에
위임하는지 여부를 표시합니다. true 값에는 상위 애플리케이션의
클래스 로더가 사용된다는 사실이 내포되어 있습니다(상위 클래스 로더를
사용하여 로드된 클래스 먼저). false 값에는
모듈 클래스 로더가 사용된다는 사실이 내포되어 있습니다(로컬 클래스
로더를 사용하여 로드된 클래스 먼저(상위 마지막)). 자세한 정보는 클래스 로더
구성 단계를 참조하십시오. |
클래스 경로 |
클래스 로더가 클래스 및 자원을 검색하는 경로를 나열합니다. |
클래스 |
이 클래스 로더가 JVM에서 로드한 클래스의 이름을 나열합니다. |
테이블 보기 옵션은 메모리 부족 오류가 생성될 때
값을 리턴하지 않습니다. 메모리 부족 오류는 메모리 누수와 관련되어 있을 수 있습니다.
테이블에서 클래스 로더에 대한 정보를 검토하려면 메모리 부족 문제를
해결한 다음 테이블 보기를 다시 클릭하십시오.
- 클래스 로더를 검색하십시오.
클래스 로더 뷰어 페이지에서
검색을 클릭하여
검색 페이지에
액세스하면 다음과 같은 클래스 로더를 검색할 수 있습니다.
- 특정 문자열
- 특정 .jar 파일
- 특정 디렉토리에 있는 파일의 이름
- 특정 클래스 로더에서 로드한 파일의 이름
검색은 대소문자를 구분합니다.
클래스 로딩 예외에서는 몇 가지의
검색 페이지 사용법에 대해 설명합니다.
- 클래스 로더를 구성하십시오. 다음에 대해
클래스 로더를 구성할 수 있습니다.
클래스 로더 구성에 따라 애플리케이션이나 웹 모듈의 클래스와 자원 파일을
로드하는 클래스 로더가 결정됩니다. 애플리케이션 및 WAR 모듈 클래스 로더
구성 설정값에는 클래스 로더 순서 및 WAR
클래스 로더 정책이 포함됩니다.
클래스 로더 순서 값은 상위
클래스 로더를 사용하여 로드된 클래스 먼저 또는 로컬
클래스 로더를 사용하여 로드된 클래스 먼저(상위 마지막) 중
하나입니다. 기본값은 상위 클래스 로더를 사용하여 로드된 클래스 먼저입니다.
상위 클래스 로더를 사용하여 로드된 클래스 먼저
모드를 가진 클래스 로더는 클래스 경로 검색 전에 클래스 또는 자원 로딩을
바로 위 클래스 로더에 위임합니다.
클래스 로딩 문제 해결 시 상위 클래스 로더에 가시적인 클래스를
대체해야할 수 있습니다. 이러한 클래스를 애플리케이션에 대해 특정한 클래스로
대체하려면 클래스 경로에 애플리케이션 클래스를 포함하는 클래스 로더에서
클래스 로더 순서를 로컬 클래스 로더를 사용하여
로드된 클래스 먼저(상위 마지막)로 설정하십시오. 애플리케이션은
상위 클래스 로더에 표시된 클래스를 대체할 수 있지만, 대체된 클래스와
대체되지 않은 클래스를 혼합하여 사용할 경우 ClassCastException
또는 UnsatisfiedLinkError가 발생할 수 있습니다.
예를 들어 기본 클래스 로더 정책 아래에서 웹 모듈은
일반적으로 WEB-INF/classes 및 WEB-INF/lib
디렉토리에 있는 웹 모듈 아티팩트를 로드하기 위한 자체의
웹 모듈(WAR) 클래스 로더를 가지고 있습니다.
애플리케이션 모듈 클래스 로더는 이 WAR 클래스 로더의 바로 상위입니다.
웹 모듈 클래스 로더가 특정 클래스 또는 자원에 대한 이러한 경로를 먼저
검색하도록 하려면 로드 조작을 애플리케이션 모듈 클래스 로더로 위임하기 전에
웹 모듈의 클래스 로더 순서를 로컬 클래스
로더를 사용하여 로드된 클래스 먼저(상위 마지막)로 설정하십시오.
클래스
로더 정책은 애플리케이션 및 WAR 모듈 클래스 로더의 구조를 판별합니다.
기본 정책 아래에서, 실행 중인 모든 애플리케이션 EAR은 자체 애플리케이션
모듈 클래스 로더를 가지며 모든 웹 모듈은 자체 WAR 모듈 클래스 로더를
가집니다. 기본 정책은 애플리케이션 아티팩트 간 분리 및 가시성에 관한
Java EE 준수를 보장합니다. 클래스 로딩 문제 해결 시 기본 정책은 변경하지 않는 것이
좋습니다.
다음에 수행할 작업
클래스 로더 문제점이 계속 발생할 경우에는 클래스 로딩 예외 및 클래스 로딩의 내용을 참조하십시오.