CDS와 AOT, Layered JAR로 Spring Boot 시작 시간, 메모리 최적화하기
·
Spring
개인적으로 테스트나 서비스 운영 목적으로 라즈베리파이를 활용해 소규모 서버를 운영하고 있습니다. 리소스가 매우 제한적인 화경에서 운영하다 보니, 자원을 조금이라도 효율적으로 활용하기 위해 다양한 시도를 해왔습니다. 이 과정에서 CDS(Class Date Sharing)와 AOT(Ahead-of-Time Compilation)라는 기술을 알게 되었고, 실제로 적용한 결과 애플리케이션의 시작 시간과 메모리 사용량에서 유의미한 개선을 확인할 수 있었습니다. Spring 공식 블로그에서 언급된 것처럼 극적인 개선은 이루어지지 않았지만, 리소스가 제한된 환경에서도 충분히 의미 있는 성과를 얻을 수 있었습니다. 특히, 이번에 적용한 프로젝트는 규모가 작은 편이었지만, 프로젝트 규모가 클수록 이러한 기술의 효과는 더..
Docker Multi-stage Builds, Layered JAR로 빌드 성능과 이미지 최적화하기
·
DevOps
현재 동아리에서 Docker 컨테이너를 활용하여 여러 서비스를 운영하고 있으며, 모든 서비스는 Dockerfile을 통해 빌드 및 배포되고 있습니다. 그러나 Gradle 빌드와 Docker 이미지 빌드를 포함한 전체 소요 시간이 평균 5분에 달해, 라즈베리 파이 4 환경을 고려할 때에도 비효율적이라는 판단에 이르게 되었습니다. 이를 해결하기 위해 Docker Multi-stage Builds와 Layered JAR를 도입했습니다. Dockerfile 내에서 빌드 단계와 런타임 단계를 분리하고, JAR 파일을 계층화함으로써 빌드 속도를 최적화하는 동시에 최종 이미지 크기도 효율적으로 줄일 수 있었습니다. 본 글에서는 이러한 멀티 스테이지 빌드와 레이어드 JAR의 적용 과정을 공유하며, 동일한 문제를 겪고 ..