Spring Boot · Armeria DocService

closed된 Shared JarFile이 Spring Boot 클래스 로더 캐시에 남는 과정

  1. Spring Boot 클래스 로더와 Reflections가 Shared JarFile A 인스턴스를 함께 사용합니다.
  2. 캐시 등록 전에 Reflections가 A 인스턴스를 닫습니다. 캐시에 A 인스턴스가 없어 제거하지 못합니다.
  3. 닫힌 A 인스턴스가 뒤늦게 캐시에 등록되어 남을 수 있습니다.
  4. 이후 해당 Jar의 클래스 로딩이 ClassNotFoundException으로 실패할 수 있습니다.
A 인스턴스 · CLOSED jar → A 인스턴스 (CLOSED)
ClassNotFoundException 발생

다음 요청도 캐시에 남은 닫힌 A 인스턴스를 쓰려다가 ClassNotFoundException이 발생할 수 있습니다. JVM을 다시 시작할 때까지 문제가 이어질 수 있습니다.