ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Tomcat 환경에서 Class Loader 돌아보기 1탄!
    개발 일지 2022. 7. 12. 17:51
    반응형

    안녕하세요. 오늘은... 정말 오랜만에 톰캣 탐구생활을 해보았습니다.

     

    운영에서 손 뗀지 4년 반 만에?! 다시 톰캣을 건드려보게 되었는데요.

    문제의 발단은 오래된 *.jar 라이브러리 정리 작업에서부터 시작되었습니다.


    이클립스 - Java Build Path

    이클립스에서 개발할 때 중요한 기능 중에 하나이죠.

    바로 .classpath를 잡는 곳입니다.

     

    이곳에서는 실제로 개발할 때 import 하는 라이브러리들을 관리하게 됩니다.


    tomcat/bin/startup.bat 기동!

    하지만... 이클립스 내에서 톰캣을 기동하거나 아니면 로컬환경에서 stand-alone으로 톰캣을 기동하게 되면 이때는 톰캣의 *Class Loader에 대해서 이해를 해야 합니다.

     

    https://tomcat.apache.org/tomcat-8.5-doc/class-loader-howto.html

     

    Apache Tomcat 8 (8.5.81) - Class Loader How-To

    Like many server applications, Tomcat installs a variety of class loaders (that is, classes that implement java.lang.ClassLoader) to allow different portions of the container, and the web applications running on the container, to have access to different r

    tomcat.apache.org

     

    위 링크의 도큐먼트에서 간단히 살펴보면 아래와 같습니다.

     

    Tomcat이 시작되면 아래와 같이 parent-child 관계로 구성된 클래스 로드 세트를 생성합니다.

    출처: https://tomcat.apache.org

    여기서 고려해 봐야하는 부분이 Webapp-N 입니다.

     

    애플리케이션 인스턴스 부분으로 ../conf/server.xml에서 docBase로 구성한 애플리케이션 root의 WEB-INF/lib 을 톰캣이 클래스 로더를 통해 자동으로 가져오기 때문이죠!

     

    무슨 말이냐면... 이클립스에서 설정한 build path와는 *별개라는 얘기입니다.

     

    톰캣 기동시에 클래스 로더가 아래와 같은 순서로 클래스와 리소스를 로드합니다.

    1. JVM의 Bootstrap classes
    2. 웹 애플리케이션의 /WEB-INF/classes
    3. 웹 애플리케이션의 /WEB-INF/lib/*.jar
    4. System 클래스 로더의 클래스들
    5. Common 클래스 로더의 클래스들

    최근에는 거의 maven이나 gradle의 빌드 스크립트로 의존성과 리소스를 관리하기 때문에 톰캣 환경에서의 리소스 로드는 정말 오랜만에 보게 되었습니다.

     

     

    반응형

    '개발 일지' 카테고리의 다른 글

    빠른 메모  (0) 2022.01.03
Designed by Tistory.