Spring Boot 3.0 Release Notes

2022. 12. 06 5 분 소요

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

위의 원문을 번역한 내용입니다.

Spring Boot 2.7에서 업그레이드

이것은 Spring Boot의 주요 릴리스이므로 기존 애플리케이션을 업그레이드하는 것이 평소보다 조금 더 복잡할 수 있습니다. 기존 Spring Boot 2.7 애플리케이션을 업그레이드하는 데 도움이 되는 전용 마이그레이션 가이드를 마련했습니다.

마이그레이션 가이드 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide

현재 이전 버전의 Spring Boot 로 실행 중인 경우 Spring Boot 3.0으로 마이그레이션하기 전에 Spring Boot 2.7로 업그레이드하는 것이 좋습니다.

새로운 주목할만한 사항

Tip. configuration 에 대한 전체 개요는 the configuration changelog 를 확인하십시오.

Java 17 Baseline and Java 19 Supportpplications.

Spring Boot 3.0에는 최소 버전으로 Java 17 이 필요합니다. 현재 Java 8 또는 Java 11을 사용 중인 경우 Spring Boot 3.0 어플리케이션을 개발하려면 먼저 JDK를 업그레이드 해야 합니다.

Spring Boot 3.0 도 잘 작동하며 JDK 19에서 테스트 되었습니다.

GraalVM Baseline and Native Build Tools

Spring Boot 3.0은 Graal 22.3 이상 및 Native Build Tools Plugin 0.9.17 이상이 필요합니다.

Third-party Library Upgrades

Spring Boot 3.0은 Spring Framework 6을 기반으로 하며 Spring Framework 6이 필요합니다 . Spring Framework 6.0에서 사용할 수 있는 새로운 기능 에 대해 읽어보고 싶을 것 입니다.

이 릴리스에서 업그레이드된 다른 Spring 프로젝트는 다음과 같습니다.

Spring Boot 3.0은 모든 종속성에 대해 Java EE에서 Jakarta EE API로 마이그레이션했습니다. 가능하면 다음을 포함하여 Jakarta EE 10 호환 종속성을 선택했습니다.

  • 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

또한 가능할 때마다 타사 jar의 최신 안정 릴리스로 업그레이드했습니다. 여기서 주목할 만한 종속성 업그레이드는 다음과 같습니다.

GraalVM Native Image 지원

Spring Boot 3.0 애플리케이션은 이제 상당한 메모리 및 시작 성능 향상을 제공할 수 있는 GraalVM 네이티브 이미지로 변환될 수 있습니다. GraalVM 네이티브 이미지 지원은 전체 Spring 포트폴리오에서 수행된 주요 엔지니어링 노력이었습니다.

GraalVM 네이티브 이미지를 시작하려면 업데이트된 Spring Boot 참조 문서 를 참조하세요 .

Log4j2 개선사항

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

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

자세한 내용은 updated documentation 를 참조하십시오.

향상된 @ConstructorBinding 탐지

When using constructor

바인딩된 생성자를 사용할 때 @ConfigurationProperties클래스 @ConstructorBinding에 단일 매개 변수화된 생성자가 있는 경우 어노테이션이 더 이상 필요하지 않습니다. 하나 이상의 생성자가 있는 경우 @ConstructorBindingSpring Boot에 사용할 것을 알리기 위해 여전히 사용해야 합니다.

대부분의 사용자는 이 업데이트된 논리를 통해 더 간단한 @ConfigurationProperties클래스를 사용할 수 있습니다. 그러나 @ConfigurationPropertiesbean을 바인딩하지 않고 생성자에 주입하려는 경우 이제 @Autowired어노테이션을 추가해야 합니다.

Micrometer 업데이트

Micrometer Observation API 을 위한 Auto-configuration

Spring Boot 3.0은 Micrometer 1.10에 도입된 새로운 관찰 API를 지원합니다.  ObservationRegistry인터페이스를 사용하여 지표와 추적 모두에 단일 API를 제공하는 관찰을 생성할 수 있습니다. Spring Boot는 이제 ObservationRegistry 인스턴스를 자동으로 구성 합니다.

micrometer-core가 class path에 있으면 DefaultMeterObservationHandlerObservationRegistry에 등록됩니다. 즉, 모든 중지된 관찰이 타이머로 이어집니다. ObservationPredicate, GlobalObservationConventionObservationHandlerObservationRegistry에 자동으로 등록됩니다. 필요한 경우 ObservationRegistryCustomizer를 사용하여 ObservationRegistry를 추가로 커스터마이징 설정을 할 수 있습니다.

자세한 내용은 참조 문서의 새로운 ‘Observability’ 섹션 을 참조하세요.

Micrometer Tracing 을 위한 Auto-configuration

Spring Boot는 이제 마이크로미터 추적을 자동으로 구성합니다. 여기에는 Brave, OpenTelemetry, Zipkin 및 Wavefront에 대한 지원이 포함됩니다.

Micrometer Observation API를 사용하는 경우 관찰을 마치면 Zipkin 또는 Wavefront에 보고된 범위로 이어집니다. 추적은 management.tracing 아래의 속성으로 제어할 수 있습니다. Zipkin은 management.zipkin.tracing으로 구성할 수 있으며 Wavefront는 management.wavefront를 사용합니다.

추가해야 하는 다양한 종속성을 포함한 자세한 내용은 참조 문서의 the tracing section 에 있습니다.

Micrometer’s OtlpMeterRegistry 을 위한 Auto-configuration for

OtlpMeterRegistry는 이제 io.micrometer:micrometer-registry-otlp가 classpath에 있을 때 자동으로 구성됩니다. meter registry는 management.otlp.metrics.export.* 속성을 사용하여 구성할 수 있습니다.

Prometheus 지원

Prometheus Exemplars 을 위한 Auto-Configuration

When there is a Micrometer Tracing Tracer bean and Prometheus is on the classpath, a SpanContextSupplier is now auto-configured. This supplier links metrics to traces by making the current trace ID and span ID available to Prometheus.

Shutdown 시 Prometheus Push Gateway 에 대한 Put 생성

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

Spring Data JDBC 를 위한 보다 유연한 Auto-configuration

Spring Data JDBC의 Auto-configuration이 이제 더 유연해졌습니다. Spring Data JDBC에 필요한 Auto-configuration Bean은 이제 조건부이며 동일한 유형의 bean을 정의하여 대체할 수 있습니다. 이제 교체할 수 있는 bean 유형은 다음과 같습니다.

  • 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

Apache Kafka로 Async Acks 활성화

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

Elasticsearch Java Client

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

JdkClientHttpConnector의 Auto-configuration

Reactor Netty가 없으면 Jetty의 반응형 클라이언트 및 Apache HTTP 클라이언트 JdkClientHttpConnector가 이제 auto-configured됩니다. 이를 통해 WebClient를 JDK의 HttpClient와 함께 사용할 수 있습니다.

Main Methods 가 있는 @SpringBootTest

@SpringBootTest 어노테이션은 이제 사용 가능한 경우 검색된 모든 @SpringBootConfiguration 클래스의 main을 사용할 수 있습니다. 즉, main 메서드에서 수행한 모든 맞춤 SpringApplication 구성을 이제 테스트에서 선택할 수 있습니다.

테스트에 main 메서드를 사용하려면 @SpringBootTestuseMainMethod 속성을 UseMainMethod.ALWAYS 또는 UseMainMethod.WHEN_AVAILABLE로 설정하세요.

updated reference documentation 에 자세한 내용을 확인하십시오.

그외 여러가지 사항

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

  • 애플리케이션 시작 중에 호스트 이름이 더 이상 기록되지 않습니다. 이는 시작 시간을 개선하는 데 도움이 되는 네트워크 조회를 방지합니다.
  • Java SecurityManager 지원이 JDK에서 지원 중단됨에 따라 제거되었습니다.
  • Spring Framework의 CommonsMultipartResolver에 대한 지원이 Spring Framework 6에서 제거된 후 제거되었습니다.
  • spring.mvc.ignore-default-model-on-redirect는 업스트림 Spring Framework 변경 사항에 맞춰 지원 중단되었습니다.
  • WebJars 리소스 핸들러 경로 패턴은 spring.mvc.webjars-path-pattern 또는 spring.webflux.webjars-path-pattern을 사용하여 커스터마이징 할 수 있습니다.
  • Tomcat remote IP valve의 신뢰할 수 있는 프록시는 server.tomcat.remoteip.trusted-proxies를 사용하여 구성할 수 있습니다.
  • 이제 ValidationConfigurationCustomizer bean을 정의하여 bean 유효성 검사 Configuration을 커스터마이징 할 수 있습니다.
  • Log4j2의 Log4jBridgeHandler는 이제 SLF4J를 통한 라우팅이 아닌 JUL 기반 로그인을 Log4j2로 라우팅하는 데 사용됩니다.
  • MeterBinder 인터페이스를 구현하는 Bean은 이제 모든 싱글톤 Bean이 초기화된 후에만 meter registries에 바인딩됩니다.
  • Brave 및 OpenTelemetry용 SpanCustomizer bean이 이제 자동으로 구성됩니다.
  • Micrometer의 JvmCompilationMetrics는 이제 자동으로 구성됩니다.
  • DiskSpaceHealthIndicator는 이제 로그 메시지 및 상태 세부정보에 path를 포함합니다.
  • DataSourceBuilder는 이제 래핑된 DataSource에서 파생될 수 있습니다.
  • 이제 spring.data.mongodb.additional-hosts 속성을 사용하여 MongoDB에 대해 여러 호스트를 구성할 수 있습니다.
  • Elasticsearch의 socketKeepAlive 속성은 spring.elasticsearch.socket-keep-alive 속성을 사용하여 구성할 수 있습니다.
  • spring-rabbit-stream을 사용할 때 RabbitStreamTemplateEnvironment는 이제 spring.rabbitmq.listener.typestream인지 여부에 관계없이 자동 구성됩니다.
  • Existing Kafka topics can be modified using spring.kafka.admin.modify-topic-configs.
  • 기존 Kafka topics는 spring.kafka.admin.modify-topic-configs를 사용하여 수정할 수 있습니다.
  • WebDriverScopeWebDriverTestExecutionListener가 공개되어 커스텀 테스트 설정에서 WebDriver를 쉽게 사용할 수 있습니다.

Spring Boot 3.0의 지원 중단

  • @ConstructorBinding 의 패키지가 org.springframework.boot.context.properties 에서 org.springframework.boot.context.properties.bind 으로 재배치 되었습니다.
  • JsonMixinModule scanning based 생성자는 더 이상 사용되지 않습니다.
  • ClientHttpRequestFactoriesClientHttpRequestFactorySupplier 교
  • Cookie comment 속성은 더 이상 지원되지 않습니다.
  • RestTemplateExchangeTagsProviderWebClientExchangeTagsProviderWebFluxTagsProviderWebMvcTagsProvider 와 관련 클래스가 동등한 ObservationConvention 로 대체되었습니다.
  • HealthContributor @Configuration 기본 클래스의 인수 없는 생성자는 더 이상 사용되지 않습니다.
  • DefaultTestExecutionListenersPostProcessorSpringBootDependencyInjectionTestExecutionListener는 Spring Framework의 ApplicationContextFailureProcessor를 위해 더 이상 사용되지 않습니다.
  • 속성 management.metrics.export.<product> 는 더 이상 사용되지 않으며, 대체는management.<product>.metrics.export입니다.
  • post 를 선호하는 management.prometheus.metrics.export.pushgateway.shutdown-operationpush 설정입니다.
  • @AutoConfigureMetrics 는 @AutoConfigureObservability 을 위해 더 이상 사용하지 않습니다.

댓글남기기