파란하늘의 지식창고
반응형

Condition Evaluation Report 소개

spring-boot-autoconfigure 를 사용하면 여러 조건에 따라 제공되는 AutoConfiguration 설정들이 활성화 또는 비활성화된다.

예를 들어 DataSource를 사용할 때 DataSource 관련 properties나 bean 설정을 하고 DataSource 관련 jar를 참조하는 경우 DataSourceAutoConfiguration에서 활성화 조건들에 대해 체크한 후 활성화되어 사용자가 일일이 설정하지 않아도 기본적인 설정들을 제공해 준다.

Spring Boot는 어떤 AutoConfiguration이 활성화되고 어떤 AutoConfiguration이 비활성화되었는지 확인할 수 있도록 Condition Evaluation Report 를 제공한다.

Condition Evaluation Report 활성화하기

간단하게 다음처럼 debug 설정을 true 로 활성화하거나 java 실행 시 --debug argument를 추가하면 Condition Evaluation Report 를 로그에서 확인할 수 있게 된다.

debug=true
$ java -jar myproject-0.0.1-SNAPSHOT.jar --debug

Condition Evaluation Report는 다음과 같은 항목을 안내해 준다.

  • Positive matches : 현재 활성화된 AutoConfiguration 목록
  • Negative matches : 현재 비활성화된 AutoConfiguration 목록
  • Exclusions : 예외처리 한 AutoConfiguration 목록
  • Unconditional classes : conditional 조건이 없는 AutoConfiguration 목록 (활성화된 것으로 보면 됨)

로그에 출력되는 Condition Evaluation Report 전체가 너무 길기 때문에 간략하게 앞에 몇 개만 출력한 예를 들면 다음과 같다.

============================
CONDITIONS EVALUATION REPORT
============================


Positive matches:
-----------------

   AopAutoConfiguration matched:
      - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)

   AopAutoConfiguration.AspectJAutoProxyingConfiguration matched:
      - @ConditionalOnClass found required class 'org.aspectj.weaver.Advice' (OnClassCondition)

   AopAutoConfiguration.AspectJAutoProxyingConfiguration.CglibAutoProxyConfiguration matched:
      - @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition)

   ApplicationAvailabilityAutoConfiguration#applicationAvailability matched:
      - @ConditionalOnMissingBean (types: org.springframework.boot.availability.ApplicationAvailability; SearchStrategy: all) did not find any beans (OnBeanCondition)

// 이하 생략

Negative matches:
-----------------

   ActiveMQAutoConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required class 'jakarta.jms.ConnectionFactory' (OnClassCondition)

   AopAutoConfiguration.AspectJAutoProxyingConfiguration.JdkDynamicAutoProxyConfiguration:
      Did not match:
         - @ConditionalOnProperty (spring.aop.proxy-target-class=false) did not find property 'proxy-target-class' (OnPropertyCondition)

   AopAutoConfiguration.ClassProxyingConfiguration:
      Did not match:
         - @ConditionalOnMissingClass found unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition)

   AppOpticsMetricsExportAutoConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required class 'io.micrometer.appoptics.AppOpticsMeterRegistry' (OnClassCondition)

// 이하 생략

Exclusions:
-----------

    None


Unconditional classes:
----------------------

    org.springframework.cloud.client.ReactiveCommonsClientAutoConfiguration

    org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration

    org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration

    org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration

// 이하 생략

출력되는 Condition Evaluation Report 에는 Spring Boot가 제공하는 AutoConfiguration 뿐만 아니라 사용자가 직접 작성한 AutoConfiguration 도 포함된다.

이 글에서는 이 부분에 대해 설명을 하진 않지만 Spring Boot AutoConfiguration 기반 application을 개발하고자 하는 경우 해당 문서를 참고하면 된다.

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-auto-configuration.condition-annotations

FailureAnalyzers 소개

만약 Spring Boot를 사용하면서 application이 올바르게 startup 하지 않거나 또는 의도한 대로 동작을 하지 않는 경우 FailureAnalyzers 로그가 출력되어 문제가 되는 지점을 확인할 수 있다.

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.spring-application.startup-failure

이런 경우엔 FailureAnalyzers 를 통해 등록된 문제가 출력된다.

대략 다음과 같은 형태이다.

***************************
APPLICATION FAILED TO START
***************************

Description:

Embedded servlet container failed to start. Port 8080 was already in use.

Action:

Identify and stop the process that is listening on port 8080 or configure this application to listen on another port.

위의 예에서는 application이 사용하려는 8080 port가 이미 사용중이어서 startup에 실패하였다고 설명하고 있다.

Spring Boot를 사용한 application이 startup 되지 않으면 FailureAnalyzers 의 내용을 확인하고 AutoConfiguration 의 설정 문제는 Condition Evaluation Report 를 통해 확인하면 된다.

 
반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요