데브허브 | DEVHUB | Step up the performance game with Spring Boot and Project Leyden by Moritz Halbritter @ Spring I/OStep up the performance game with Spring Boot and Project Leyden by Moritz Halbritter @ Spring I/O
- 런타임 효율성 개선은 호스팅 비용 절감, 환경 보호, 컨테이너 성능 최적화 등 여러 이점을 제공합니다. 💰
- Spring Boot와 Project Leyden은 CDS(Class Data Sharing), AOT 캐시, 프로파일링 및 코드 컴파일을 통해 애플리케이션 성능을 향상시킵니다. 💡
- '트레이닝 런'은 애플리케이션 시작 시 클래스 로딩 및 프로파일링 정보를 기록하여 캐시 파일을 생성하고, 이를 배포 시 활용해 시작 속도를 높입니다. 🏋️
- 최적화를 통해 '스케일 투 제로'가 가능해져 요청이 없을 때 인스턴스를 중단하고, 요청 시 빠르게 시작하여 사용자 경험을 저해하지 않습니다. 📉
- 메모리 사용량 감소로 동일한 노드에 더 많은 서비스를 배포하거나 클러스터 크기를 줄여 비용을 절감할 수 있습니다. 🧠
- JVM 워밍업 시간을 단축하여 애플리케이션이 거의 즉시 최고 성능에 도달하도록 돕습니다. 🔥
- CDS를 사용하려면 Java 17+, Spring Boot 3.3+가 필요하며,
spring.context.exit=on-refresh 옵션으로 트레이닝 런 종료 시점을 제어합니다. 🛑
- Spring Boot의 중첩 JAR 구조는 CDS와 호환되지 않으므로,
java -jar mode tools jar app my-app extract 명령으로 JAR 파일을 추출하여 평탄한 클래스패스를 만듭니다. 📂
- CDS 적용 시 시작 시간이 최대 1.9배 빨라지고, 메모리 사용량은 약 19.1% 절감되는 효과를 보입니다. ⏱️
- CDS 캐시를 사용하려면 트레이닝 런과 배포 런에 동일한 JVM(패치, 아키텍처)을 사용하고, JAR 파일의 타임스탬프를 보존해야 합니다. ⚠️
- 클라우드 네이티브 빌드팩은 CDS 지원을 내장하여 최적화된 컨테이너 이미지를 쉽게 생성할 수 있도록 돕습니다. ☁️