-
Tomcat 환경에서 Class Loader 돌아보기 1탄!개발 일지 2022. 7. 12. 17:51반응형
안녕하세요. 오늘은... 정말 오랜만에 톰캣 탐구생활을 해보았습니다.
운영에서 손 뗀지 4년 반 만에?! 다시 톰캣을 건드려보게 되었는데요.
문제의 발단은 오래된 *.jar 라이브러리 정리 작업에서부터 시작되었습니다.
이클립스에서 개발할 때 중요한 기능 중에 하나이죠.
바로 .classpath를 잡는 곳입니다.
이곳에서는 실제로 개발할 때 import 하는 라이브러리들을 관리하게 됩니다.
하지만... 이클립스 내에서 톰캣을 기동하거나 아니면 로컬환경에서 stand-alone으로 톰캣을 기동하게 되면 이때는 톰캣의 *Class Loader에 대해서 이해를 해야 합니다.
https://tomcat.apache.org/tomcat-8.5-doc/class-loader-howto.html
위 링크의 도큐먼트에서 간단히 살펴보면 아래와 같습니다.
Tomcat이 시작되면 아래와 같이 parent-child 관계로 구성된 클래스 로드 세트를 생성합니다.
여기서 고려해 봐야하는 부분이 Webapp-N 입니다.
애플리케이션 인스턴스 부분으로 ../conf/server.xml에서 docBase로 구성한 애플리케이션 root의 WEB-INF/lib 을 톰캣이 클래스 로더를 통해 자동으로 가져오기 때문이죠!
무슨 말이냐면... 이클립스에서 설정한 build path와는 *별개라는 얘기입니다.
톰캣 기동시에 클래스 로더가 아래와 같은 순서로 클래스와 리소스를 로드합니다.
- JVM의 Bootstrap classes
- 웹 애플리케이션의 /WEB-INF/classes
- 웹 애플리케이션의 /WEB-INF/lib/*.jar
- System 클래스 로더의 클래스들
- Common 클래스 로더의 클래스들
최근에는 거의 maven이나 gradle의 빌드 스크립트로 의존성과 리소스를 관리하기 때문에 톰캣 환경에서의 리소스 로드는 정말 오랜만에 보게 되었습니다.
반응형