목록 보기
Spring Boot Startup Time 최적화 : 90초에서 30초까지의 여정(feat. 오픈소스 기여)
백엔드

Spring Boot Startup Time 최적화 : 90초에서 30초까지의 여정(feat. 오픈소스 기여)

라포랩스
라포랩스
2026년 4월 14일

두줄요약

Spring Boot Startup Time을 90초에서 30초로 줄인 6단계 최적화 과정을 정리했습니다. 프로파일링으로 원인을 찾고, Spring 내부 동작과 오픈소스 패치까지 활용해 병목을 해소했습니다.

문제 상황

  • Kubernetes 환경에서 Spring Boot 애플리케이션의 Startup Time이 너무 길어 Pod 기동, CronJob 실행, 노드 이주 시 가용성 저하
  • 동일 이미지·동일 애플리케이션인데도 Pod마다 부팅 시간이 크게 달라지는 편차
  • 평균 90초 수준의 부팅 시간으로 서비스 영향이 큰 상태

구조와 흐름

  • Spring 초기화가 main thread에서 순차적으로 진행되어, 하나의 블로킹이 전체 부팅 지연으로 이어지는 구조
  • Async Profiler, Flame graph, BufferingApplicationStartup으로 병목 구간을 단계별 추적
  • 부팅 과정의 주요 병목을 순차적으로 제거하며 원인과 해결책을 좁혀감

해결 방법

  • 초기화 시점의 외부 API 호출을 fire-and-forget으로 전환해 main thread 블로킹 제거
  • 불필요한 Java Agent 제거로 bytecode 변환 비용 절감
  • EntityManagerFactory 비동기 초기화, JPA bootstrapMode: DEFERRED, Spring Data 버그 임시 패치, repository 구조 정리, background 초기화 적용

적용해볼 점

  • 평균값보다 실제 메트릭과 프로파일로 병목을 찾는 접근
  • 프레임워크 내부 동작을 소스 코드로 확인해 우회가 아닌 근본 원인 해결
  • class loading/linking 병목에는 CDS/AOT Cache 같은 추가 최적화 검토

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...