Spring Boot 3 구동 지연 원인 분석 및 ConditionEvaluationReport 활용

1. 배경

Spring Boot 3 기반의 배치 시스템을 운영 중, 일부 구동 시점에서 눈에 띄는 지연 현상이 발생하여 이에 대한 분석을 진행하였습니다. JPA 미사용, 보안 비활성화 등의 전제가 있는 프로젝트입니다.

2. 분석 방식

Spring Boot 3.1 이상에서 제공하는 ConditionEvaluationReport 로그를 통해 자동 설정이 어떤 조건에 따라 적용 또는 제외되는지를 확인했습니다. 이를 통해 병목 구간과 불필요한 구성의 식별을 시도했습니다.

3. 주요 분석 내용

3.1 @Lazy 처리로 Bean 로딩 최적화

  • @Lazy 어노테이션을 통해 실제 필요한 시점까지 Bean 생성을 지연시키는 방식 적용
  • 초기 구동 시점의 리소스 소모와 병렬 초기화를 최소화하는 데 효과적

3.2 Unconditional classes 해석

다음은 조건 없이 항상 적용되는 자동 구성 목록 중 일부입니다:

  • ConfigurationPropertiesAutoConfiguration – 프로퍼티 바인딩
  • AvailabilityHealthContributorAutoConfiguration – Liveness/Readiness Health 구성
  • JasyptSpringBootAutoConfiguration – 암호화 프로퍼티 복호화 처리
  • SpringDocSpecPropertiesConfiguration – OpenAPI 구성

위 항목 중 일부(Jasypt, SpringDoc)는 외부 의존성과 연계되어 초기화 시간이 늘어날 수 있으므로 필요에 따라 @SpringBootApplication(exclude = ...) 방식으로 제외 검토 가능

3.3 JPA 사용 여부

현재 JPA는 사용하지 않으므로 관련 AutoConfiguration은 조건부 로딩에서 제외됨.

4. 최종 결론

현재 상황에서는 @Lazy 처리만으로도 구동 병목 문제에 대한 대응은 충분하다고 판단되며, 그 외 AutoConfiguration에 대한 대규모 변경은 오히려 복잡도를 증가시킬 가능성이 있음.

단, 향후 Jasypt 또는 OpenAPI 관련 구성 로딩 시간이 체감될 경우 이 부분을 우선적으로 타겟팅하여 exclude 처리하는 방향을 추천드립니다.


참고 정보

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다