본문으로 바로가기

1. Classloader와 JAVA 패키지

JAVA의 압축 Package들은 Application이 압축된 형태 그대로 사용할 수 있다. 어떤 Application이 사용하느냐에 따라 확장자가 달라진다.

- JAR (Java ARchive) -

기본적으로 JAVA Application이 사용할 수 있도록 되어 있다. path 등의 방식을 이용하여 경로를 유지하기 때문에 jar 파일의 사용 및 배포는 경로설정의 문제에서 벗어날 수 있다. 

Class Loader 관점에서는 EJB 파일을 배치하게 되면, JAR 파일 당 각각의 Class Loader를 생성하게 된다. 그래서, 다른 JAR파일에 있는 Class들은 참조를 할 수가 없고, 오로지 Parent Class Loader인 JVM Level의 CLASSPATH에 적용된 CLASS들만 참조를 할 수 있다. 

- WAR(Web ARchive) -

Web Application을 지원하는 압축방식이다. Web Application을 지원하기 위해서 WAR 압축방식은 jsp, servlet, gif, html, jar등을 압축하고 지원해준다.

Class Loader 관점에서는 Servlet이나 JSP를 패키징 하는 WAR파일은 웹로직에서 우선순위 변경이 가능하다. 일반적으로 Class Loader의 우선순위를 따르는 것 이외에, WEB-INF/classes와 WEB-INF/lib 디렉토리가 우선순위를 가지는 것이 가능하다. 이 디렉토리 안에 class가 있을 경우에 parent class loader에 load된 class보다 우선순위를 갖게 설정할 수 있다. 이 설정은 웹 로직 콘솔에서 PreferWebInfClasses 라는 옵션을 true로 설정(default는 false이다.)을 하면 가능하다.

- EAR(Enterprise ARchive) -

EAR은 하나의 웹 어플리케이션 단위를 넘어 실제 서버에서 배포하기 위한 단위이다. 그래서 JAR와 WAR를 묶어서 각각의 기능을 지원해준다. JAR를 Application Level (Business Layer), WAR를 Web Application Level(Web Layer)로 하여 지원이 가능하다.

Class Loader 관점에서는 JAR와 WAR는 각각 하나의 Class Loader를 가지는데 반해서, EAR은 두개의 Class Loader를 가지게 된다. JAR를 위한 Class Loader와 WAR을 위한 Class Loader 두개가 Invoke되고, 그 관계는 JAR Class Loader가 WAR Class Loader의 Parent관계가 되서 Servlet/JSP는 당연히 EJB Class를 참조해서 사용이 가능해지게 되는 것이다. 

2. Reference

http://sunsol20.egloos.com/3932780

3. Check

ClassLoader 1 : ClassLoader Delegation Model

ClassLoader 2 : Java Application Server ClassLoader

ClassLoader 3 : Classloader & JAVA Packages


댓글을 달아 주세요

티스토리 툴바