Loading...
Spring Framework Reference Documentation 7.0.2의 JVM AOT Cache의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
사전 컴파일 캐시는 Java 24에서 JEP 483를 통해 도입된 JVM 기능으로, Java 애플리케이션의 시작 시간과 메모리 사용량을 줄이는 데 도움이 됩니다. AOT 캐시는 Class Data Sharing (CDS)의 자연스러운 진화입니다.
Spring Framework는 CDS와 AOT 캐시를 모두 지원하며, 사용 중인 JVM 버전(Java 24+)에서 가능하다면 후자를 사용하는 것이 좋습니다.
이 기능을 사용하려면, 애플리케이션의 특정 클래스패스에 대해 AOT 캐시를 생성해야 합니다. 이 캐시는 배포된 인스턴스에서 생성할 수도 있고, 예를 들어 애플리케이션을 패키징할 때 수행되는 트레이닝 실행 동안 생성할 수도 있으며, 이러한 사용 사례를 쉽게 하기 위해 Spring Framework에서 제공하는 훅 포인트 덕분에 가능합니다.
캐시가 준비되면, 사용자는 JVM 플래그를 통해 이를 사용하도록 선택해야 합니다.
Spring Boot를 사용하는 경우, 실행 가능한 JAR 압축 해제 지원을 활용하는 것이 매우 권장되며, 이는 AOT 캐시와 CDS 모두의 클래스 로딩 요구 사항을 충족하도록 설계되었습니다.
AOT 캐시는 일반적으로 애플리케이션이 종료될 때 생성할 수 있습니다. Spring Framework는
ApplicationContext가 리프레시된 후 프로세스가 자동으로 종료될 수 있는 동작 모드를 제공합니다.
이 모드에서는 모든 non-lazy 초기화된 싱글톤이 인스턴스화되었고,
InitializingBean#afterPropertiesSet 콜백이 호출되었지만, 라이프사이클은 시작되지 않았고
ContextRefreshedEvent는 아직 발행되지 않았습니다.
트레이닝 실행 중에 캐시를 생성하려면, -Dspring.context.exit=onRefresh
JVM 플래그를 지정하여 Spring 애플리케이션을 시작한 다음
ApplicationContext가 리프레시되면 종료하도록 할 수 있습니다:
1# 두 명령은 동일한 클래스패스로 실행되어야 합니다 2java -XX:AOTMode=record -XX:AOTConfiguration=app.aotconf -Dspring.context.exit=onRefresh ... 3java -XX:AOTMode=create -XX:AOTConfiguration=app.aotconf -XX:AOTCache=app.aot ...
1# CDS 아카이브를 생성하려면, JDK/JRE에 베이스 이미지가 있어야 합니다 2java -XX:ArchiveClassesAtExit=app.jsa -Dspring.context.exit=onRefresh ...
캐시 파일이 생성되면, 이를 사용하여 애플리케이션을 더 빠르게 시작할 수 있습니다:
1# 트레이닝 실행과 동일한 클래스패스(또는 그 상위 집합)로 2java -XX:AOTCache=app.aot ...
1# 트레이닝 실행과 동일한 클래스패스(또는 그 상위 집합)로 2java -XX:SharedArchiveFile=app.jsa ...
AOT 캐시가 성공적으로 사용되고 있는지 확인하려면 로그와 시작 시간을 주의 깊게 살펴보세요.
캐시가 얼마나 효과적인지 파악하려면, -Xlog:class+load:file=aot-cache.log라는
추가 속성을 추가하여 클래스 로딩 로그를 활성화할 수 있습니다.
이렇게 하면 클래스 로딩 시도와 그 소스가 모두 기록된 aot-cache.log가 생성됩니다.
캐시에서 로드된 클래스는 다음 예제와 같이 "shared objects file" 소스를 가져야 합니다:
1[0.151s][info][class,load] org.springframework.core.env.EnvironmentCapable source: shared objects file 2[0.151s][info][class,load] org.springframework.beans.factory.BeanFactory source: shared objects file 3[0.151s][info][class,load] org.springframework.beans.factory.ListableBeanFactory source: shared objects file 4[0.151s][info][class,load] org.springframework.beans.factory.HierarchicalBeanFactory source: shared objects file 5[0.151s][info][class,load] org.springframework.context.MessageSource source: shared objects file
AOT 캐시를 활성화할 수 없거나 캐시에서 로드되지 않는 클래스가 많다면, 캐시를 생성하고 사용할 때 다음 조건이 충족되는지 확인하세요:
* 와일드카드 문자의 사용은 피해야 합니다.Observability Support
JVM Checkpoint Restore