파란하늘의 지식창고
Published 2022. 11. 27. 03:30
Spring Boot 3.0 Release Notes Study/Java
반응형

전체 Release Notes 목록은 이 곳에서 확인할 수 있습니다.

https://luvstudy.tistory.com/tag/Release%20Notes


https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes

21 revision 기준으로 작성됨

Upgrading from Spring Boot 2.7

이것은 Spring boot의 주요 release이기 때문에 기존 application을 upgrade하는 것은 평소보다 조금 복잡할 수 있습니다.
기존 Spring Boot 2.7 application을 upgrade하는데 도움이 되는 전용 migration guide를 마련했습니다.

현재 이전 버전의 Spring Boot를 실행 중인 경우 Spring Boot 3.0으로 migration 하기 전에 Spring Boot 2.7로 upgrade하는 것이 좋습니다.

New and Noteworthy

Tip configuration에 대한 전체 변경 사항은 configuration changelog를 참고하세요.

Java 17 Baseline and Java 19 Support

Spring Boot 3.0은 최소 버전으로 Java 17이 필요합니다.
만약 Java 8이나 Java 11을 사용하고 있다면 Spring Boot 3.0 application을 개발하기전에 JDK를 upgrade 해야 합니다.

Spring Boot 3.0은 또한 JDK 19에서도 잘 동작하는 것을 확인하였습니다.

GraalVM Baseline and Native Build Tools

Spring Boot는 Graal 22.3 이후 버전 및 Native Build Tools Plugin 0.9.17 이후 버전이 필요합니다.

Third-party Library Upgrades

Spring Boot 3.0은 Spring Framework 6.0을 기반으로 합니다.
Spring Framework 6.0에서 사용할 수 있는 new features에 대해 읽어보세요.

이 release에서 upgrade 된 다른 Spring project는 다음과 같습니다.

Spring Boot 3.0은 모든 dependencies에 대해 Java EE에서 Jakarta EE로 migration 되었습니다.
다음을 포함하여 Jakrta EE 10 호환 dependencies를 선택하였습니다.

  • Jakarta Activation 2.1
  • Jakarta JMS 3.1
  • Jakarta JSON 2.1
  • Jakarta JSON Bind 3.0
  • Jakarta Mail 2.1
  • Jakarta Persistence 3.1
  • Jakarta Servlet 6.0
  • Jakarta Servlet JSP JSTL 3.0
  • Jakarta Transaction 2.0
  • Jakarta Validation 3.0
  • Jakarta WebSocket 2.1
  • Jakarta WS RS 3.1
  • Jakarta XML SOAP 3.0
  • Jakarta XML WS 4.0

또한 가능한 한 third-party jar의 최신 stable release로 upgrade했습니다.
이 중 주목할만한 dependency upgrade는 다음과 같습니다.

GraalVM Native Image Support

Spring Boot 3.0 application은 이제 상당한 memory 및 start-up 성능 향상을 제공할 수 있는 GraalVM native image로 변환될 수 있습니다.
GraalVM Native Image 지원은 전체 Spring portfolio에서 수행된 주요 엔지니어링 작업이었습니다.

GraalVM native image를 시작하려면 업데이트된 Spring Boot reference documentation을 참조하세요.

Log4j2 Enchancements

다음 기능을 제공하는 새로운 extension으로 log4j2 지원이 업데이트 되었습니다.

  • Profile-specific Configuration
  • Environment Properties Lookup
  • Log4j2 System Properties

자세한 내용은 업데이트된 documentation을 참조하세요.

Improved @ConstructorBinding Detection

counstructor bound @ConfigurationProperties 를 사용할 때 class에 single parameterized constructor가 있는 경우 @ConstructorBinding annotation이 더 이상 필요하지 않습니다.
만약 하나 이상의 constructor가 있는 경우 @ConstructorBinding 을 사용하여 Spring Boot에 사용할 것을 알려줘야 합니다.

대부분의 사용자는 이 업데이트된 logic을 통해 더 간단한 @ConfigurationProperties class를 사용할 수 있습니다.
그러나 @ConfigurationProperties 가 있고 bean을 binding 하지 않고 constructor에 inject 하려는 경우 이제 @Autowired annotation을 추가해야 합니다.

Micrometer Updates

Auto-configuration for Micrometer Observation API

Spring Boot 3.0은 Mircometer 1.10에 도입된 새로운 observation API를 지원합니다.
새로운 ObservationRegistry interface를 사용하여 metric과 trace 모두에 단일 API를 제공하는 observation을 생성할 수 있습니다.
Spring Boot는 이제 ObservationRegistry 의 instance를 auto-configure합니다.

micrometer-core 가 classpath에 있는 경우 DefaultMeterObservationHandlerObservationRegistry 에 등록됩니다.
즉, 모든 중지된 Observation이 timer로 연결됩니다.
ObservationPredicate , GlobalObservationConventionObservationHandlerObservactionRegistry 에 자동으로 등록됩니다.
필요한 경우 ObservationRegistryCustomizer 를 사용하여 ObservationRegistry 를 추가로 customize 할 수 있습니다.

자세한 내용은 reference documentation의 new 'Observability' section을 참조하세요

Auto-configuration for Micrometer Tracing

Spring Boot는 이제 Micremeter Tracing을 auto-configure 합니다.
여기에는 Brave, OpenTelemetry, Zipkin 및 Wavefront에 대한 지원이 포함됩니다.

Micrometer Observation API를 사용하는 경우 observation을 마치면 Zipkin 또는 Wavefront로 보고되는 범위가 표시됩니다.
Tracing은 management.tracing properties로 제어할 수 있습니다.
Zipkin은 management.zipkin.tracing 으로 구성할 수 있으며 Wavefront는 management.wavefront 를 사용합니다.

추가해야 하는 다양한 dependency를 포험한 자세한 내용은 reference documentation의 tracing section에 있습니다.

Auto-configuration for Micrometer's OtlpMeterRegistry

OtlpMeterRegistry 는 이제 io.micrometer:micrometer-registry-otlp 가 classpath에 있을 때 auto-configure됩니다.
meter registry는 management.otlp.metrics.export.* properties를 사용하여 configure 할 수 있습니다.

Prometheus Support

Auto-Configuration for Prometheus Examplars

Micrometer Tracing Tracer bean이 있고 Prometheus가 classpath에 있으면 이제 SpanContextSupplier 가 auto-configure 됩니다.
이 supplier는 Prometheus에서 현재 trace ID 및 span ID를 사용할 수 있도록 하여 metric 항목을 trace에 연결합니다.

Making a PUT to Prometheus Push Gateway on Shutdown

Push Gateway는 shutdown 시 PUT을 수행하도록 구성할 수 있습니다.
이렇게 하려면 management.prometheus.metrics.export.pushgateway.shutdown-operation 을 put 으로 설정합니다.
또한 기존 push 설정은 deprecate 되었으며 이제 post 를 대신 사용해야 합니다.

More Flexible Auto-configuration for Spring Data JDBC

Spring Data JDBC의 auto-configuration이 이제 더 유연해졌습니다.
Spring Data JDBC에 필요한 여러 auto-configure된 bean은 이제 conditional 이며 동일한 type의 bean을 정의하여 replace 할 수 있습니다.
이제 replace 할 수 있는 bean type은 다음과 같습니다.

  • org.springframework.data.jdbc.core.JdbcAggregateTemplate
  • org.springframework.data.jdbc.core.convert.DataAccessStrategy
  • org.springframework.data.jdbc.core.convert.JdbcConverter
  • org.springframework.data.jdbc.core.convert.JdbcCustomConversions
  • org.springframework.data.jdbc.core.mapping.JdbcMappingContext
  • org.springframework.data.relational.RelationalManagedTypes
  • org.springframework.data.relational.core.dialect.Dialect

Enabling Async Acks with Apache Kafka

Kafka에서 async-acks를 활성화하기 위한 새로운 configuration property인 spring.kafka.listener.async-acks 가 추가되었습니다.
async acks를 활성화하려면 property를 true 로 설정합니다.
property는 spring.kafka.listener.async-modemanual 또는 manual-immediate 로 설정된 경우에만 적용됩니다.

Elasticsearch Java Client

새로운 Elasticsearch Java Client에 대한 auto-configuration이 도입되었습니다.
기존 spring.elasticsearch.* configuration properties를 사용하여 구성할 수 있습니다.

Auto-configuration of JdkClientHttpConnector

Reactor Netty가 없으면 Jetty의 reactive client와 Apache HTTP client가 JdkClientHttpConnector 로 auto-configure 됩니다.
이렇게 하면 WebClient 를 JDK의 HttpClient 와 함께 사용할 수 있습니다.

@SpringBootTest with Main Methods

@SpringBootTest annotation은 이제 사용 가능한 경우 발견된 모든 @SpringBootConfiguration class의 main 을 사용할 수 있습니다.
즉, main method에서 수행한 모든 custom SpringApplication configuration을 이제 테스트에서 선택할 수 있습니다.

테스트에 main method를 사용하려면 @SpringBootTestuseMainMethod attribute를 UseMainMethod.ALWAYS 또는 UseMainMethod.WHEN\_AVAILABLE 로 설정합니다.

자세한 내용은 업데이트된 reference documentation을 참조하세요.

Miscellaneous

위에 나열된 변경 사항 외에도 다음과 같은 몇가지 사소한 tweak 및 개선 사항이 있습니다.

  • application startup 중에 host name이 더 이상 log 되지 않습니다.
    이는 startup time을 개선하는데 도움이 되는 network lookup을 방지합니다.
  • Java의 SecurityManager 에 대한 지원은 JDK에서 더 이상 사용되지 않기 때문에 제거되었습니다.
  • Spring Framework의 CommonsMultipartResolver 에 대한 지원이 Spring Framework 6에서 제거된 후 제거되었습니다.
  • spring.mvc.ignore-default-model-on-redirect 는 upstream Spring Framework 변경 사항에 맞추기 위해 더 이상 사용되지 않습니다.
  • WebJars resource handler path pattern은 spring.mvc.webjars-path-pattern 또는 spring.webflux.webjars-path-pattern 을 사용하여 customize 할 수 있습니다.
  • Tomcat의 remote IP valve의 신뢰할 수 있는 proxy는 server.tomcat.remoteip.trusted-proxies 를 사용하여 구성할 수 있습니다.
  • 이제 ValidationConfigurationCustomizer bean을 정의하여 Bean Validation Configuration 을 customize 할 수 있습니다.
  • Log4j2의 Log4jBridgeHandler 는 이제 SLF4J를 통한 routing이 아닌 JUL-based logging을 Log4j2로 routing하는데 사용합니다.
  • MeterBinder interface를 구현하는 bean은 이제 모든 singleton bean이 initialized 된 후에만 meter registry에 binding 됩니다.
  • Brave 및 OpenTelemetry 용 SpanCustomizer bean은 이제 auto-configure 됩니다.
  • Micrometer의 JvmCompilationMetrics 는 이제 auto-configure 됩니다.
  • DiskSpaceHealthIndicator 는 이제 log message의 path와 health deatil을 포함합니다.
  • DataSourceBuilder 는 이제 wrapping된 DataSource 에서 파생될 수 있습니다.
  • 이제 spring.data.mongodb.additional-hosts property을 사용하여 MongoDB에 대해 여러 host를 구성할 수 있습니다.
  • Elasticsearch의 socketKeepAlive property는 spring.elasticsearch.socket-keep-alive property를 사용하여 구성할 수 있습니다.
  • spring-rabbit-stream 을 사용할 때 RabbitStreamTemplateEnvironment 는 이제 spring.rabbitmq.listener.typestream 인지 여부에 관계없이 auto-configure 됩니다.
  • 기존 Kafka topic은 spring.kafka.admin.modify-topic-configs 를 사용하여 수정할 수 있습니다.
  • WebDriverScopeWebDriverTestExecutionListener 가 public으로 제공되어 custom test setup에서 WebDriver 를 쉽게 사용할 수 있습니다.

Deprecations in Spring Boot 3.0

  • @ConstructorBindingorg.springframework.boot.context.properties package에서 org.springframework.boot.context.properties.bind 로 재배치 되었습니다.
  • JsonMixinModule scanning 기반 constructor는 더 이상 사용되지 않습니다.
  • ClientHttpRequestFactorySupplierClientHttpRequestFactories 로 바꿔야 합니다.
  • Cookie comment property들은 더 이상 지원되지 않습니다.
  • RestTemplateExchangeTagsProvider , WebClientExchangeTagsProvider , WebFluxTagsProvider , WebMvcTagsProvider 및 관련 class는 ObservationConvention 과 동등한 항목으로 대체되었습니다.
  • HealthContributor @Configuration base class의 no-args constructor 는 더 이상 사용되지 않습니다.
  • DefaultTestExecutionListenerPostProcessorSpringBootDependencyInjectionTestExecutionListener 는 Spring Framework의 ApplicationContextFailureProcessor 를 위해 더 이상 사용되지 않습니다.
  • management.metrics.export.<product> property 들은 더 이상 사용되지 않으며 management.<product>.metrics.export 로 대체됩니다.
  • post 를 선호하는 management.prometheus.metrics.export.pushgateway.shutdown-operationpush setting
  • AutoConfigureMetrics@AutoConfigurationObservability 를 위해 더 이상 사용되지 않습니다.
반응형
profile

파란하늘의 지식창고

@Bluesky_

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