데브허브 | DEVHUB | [10분 테코톡] 히포의 클래스 패스와 클래스 로더[10분 테코톡] 히포의 클래스 패스와 클래스 로더
- JVM은 애플리케이션 실행 시 클래스 파일을 찾고, 읽고, 메모리에 적재하기 위해 클래스패스와 클래스 로더의 도움을 받습니다. 🔍
- 클래스패스는 JVM이 리소스를 탐색하는 경로 목록으로, 주로 실행 가능한 JAR 파일 내
MANIFEST 파일에 정의됩니다. 🗺️
- 스프링 부트 애플리케이션의
MANIFEST 파일은 BOOT-INF/classes/ (컴파일된 클래스 및 리소스)와 BOOT-INF/lib/ (의존성 JAR 파일) 경로를 클래스패스에 추가합니다. 📁
- 클래스 로더는 클래스패스 경로를 활용하여 Fully Qualified Class Name(FQCN)으로 클래스의 정확한 위치를 찾아 메모리에 적재합니다. 🚀
- 클래스 로더는
Bootstrap, Platform, Application의 3계층 구조를 가지며, 각 계층은 특정 범위의 클래스 로딩 책임을 맡습니다. 🏗️
- 클래스 로딩은 위임 모델을 따르는데, 로드 요청은 항상 상위 클래스 로더로 위임된 후, 최상위부터 하위로 내려오며 탐색 및 로드를 시도합니다. ⬆️⬇️
- 이러한 복잡한 계층 구조와 위임 모델은 자바의 보안 및 안정성을 강화하고, 핵심 JVM 클래스 변조나 중복 로딩을 방지하는 목적을 가집니다. 🛡️
- 동일한 클래스 파일이라도 서로 다른 클래스 로더에 의해 로드되면 JVM은 이를 별개의 타입으로 인식합니다. 👯
- 개발자는 필요에 따라 커스텀 클래스 로더를 만들어 계층 구조에 삽입할 수 있으며, 톰캣 등이 이를 활용합니다. 🛠️