#classloader
글
-
Gradle 소스 파헤치기 6: 프로젝트와 빌드 스크립트 — build.gradle.kts가 실행되기까지
build.gradle.kts 한 파일은 소스에서 무엇이 될까요. settings가 적어 둔 설명서로 DefaultProject를 만드는 곳, 프로젝트 잠금 안에서 도는 평가기 사슬과 beforeEvaluate·afterEvaluate 상태, 파일 이름 끝으로 Groovy와 Kotlin을 고르는 선택기, plugins {}를 먼저 떼어 두 번 컴파일하는 두 DSL, tasks.compileJava를 가능하게 하는 생성된 접근자, settings에서 하위 프로젝트로 이어지는 클래스로더 스코프까지, 같은 스크립트를 두 DSL로 돌리고 스택을 찍어 소스와 함께 확인합니다.
-
Gradle 소스 파헤치기 7: 플러그인 적용 — plugins {} 블록에서 apply()까지
plugins { java } 한 줄은 소스에서 무엇이 될까요. 요청을 모두 먼저 해석하고 나서 한꺼번에 적용하는 DefaultPluginRequestApplicator, 핵심 플러그인·buildSrc·포함된 빌드·플러그인 포털을 차례로 묻는 해석기 사슬과 마커 아티팩트, id를 클래스로 바꾸는 META-INF/gradle-plugins 설명 파일, 같은 플러그인을 두 번 걸어도 한 번만 도는 DefaultPluginManager, withPlugin이 불리는 정확한 시점, 확장이 붙는 자리, java → java-base → base 사슬, buildSrc와 precompiled script plugin까지 직접 만든 플러그인으로 확인합니다.
-
Tomcat 소스 파헤치기 4: 클래스로더 — 웹앱마다 따로 보는 클래스
Tomcat 한 프로세스 안에서 두 웹앱이 같은 이름의 서로 다른 클래스를 쓸 수 있는 이유를 소스에서 찾습니다. Bootstrap 이 만드는 common·server·shared 로더와 catalina.properties, 웹앱마다 하나씩 생기는 WebappClassLoaderBase 가 부모 위임 순서를 뒤집는 loadClass(), jakarta.servlet 같은 예외를 고르는 filter(), delegate 설정, reloadable 리로드와 스레드 누수 경고까지 기준 커밋을 빌드한 Tomcat 으로 직접 확인합니다.
-
Tomcat 소스 파헤치기 16: 내장 Tomcat, JMX, 로깅 — 그리고 연재를 마치며
server.xml 없이 Tomcat을 코드로 띄우는 startup/Tomcat 클래스가 무엇을 대신 만들어 주고 무엇을 만들어 주지 않는지, 부품마다 MBean이 올라가는 JMX 등록 과정, 웹앱마다 로그 설정을 따로 두는 JULI의 ClassLoaderLogManager를 소스와 예제로 확인하고, 16편 연재를 정리합니다.