Study/Java

Spring Boot 3.3 Release Notes

Bluesky_ 2024. 5. 30. 00:22
반응형

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

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


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

10 revision 기준으로 작성됨

Spring Boot 3.3.0 Release Notes

Upgrading From Spring Boot 3.2

Jersey Observability

Micrometer 1.13 에서는 Jersey 지원을 중단하고 Jersey의 jersey-micrometer module을 사용하게 되었습니다.
Application에서 Jersey metric을 사용하는 경우 업그레이드할 때 org.glassfish.jersey.ext:jersey-micrometer 에 대한 dependency를 추가하세요.

Jersey를 통한 observation을 지원하기 위해 MetricsApplicationEventListenerObservationApplicationEventListener 로 대체되었습니다.
Tag를 customize하기 위해 JerseyTagsProvider 를 사용했다면, 이제 이를 위해 JerseyObservationConvention bean을 구현해야 합니다.

Dependency Management for Dropwizard Metrics Removed

Dropwizard Metric에 대한 dependency management가 제거되었습니다.
Spring Boot는 Dropwizard metric에 직접적으로 의존하지 않으므로 특정 버전이 필요하지 않습니다.
Application이 Dropwizard metric을 직접적으로 의존하는 경우 빌드 구성을 업데이트하여 요구 사항을 충족하는 버전을 지정하세요.

Prometheus Client 1.x

Spring Boot 3.3에는 Prometheus Client 1.x에 대한 지원이 포함되어 있습니다.
이번 Client Release에는 exported metric name 변경 등 몇 가지 획기적인 변경 사항이 포함되어 있습니다.
Prometheus Push Gateway 사용은 1.x client에서 지원되지 않으며, Prometheus maintainer(유지 관리자)가 이 지원을 추가할 때까지는 지원되지 않습니다.

0.x 버전의 Prometheus client를 계속 사용하려면 dependency에서 io.micrometer:micrometer-registry-prometheus 를 제거하고 대신 io.micrometer:micrometer-registry-prometheus-simpleclient 를 추가하세요.
Spring Boot에는 Spring Boot 3.5.0에서 제거될 더 이상 사용하지 않는 형식의 simpleclient에 대한 auto-configuration이 포함되어 있습니다.

좀 더 자세한 migration guide는 Micrometer wiki의 이 section을 참조하세요.

Flyway 10

이번 Release에서 Flyway 10으로 upgrade 됩니다.
Flyway 10은 이전 버전보다 더 module화 되어 여러 database에 대한 지원이 새로운 database 별 module로 이동되었습니다.
다음 database 중 하나를 사용 중인 경우 그에 따라 dependency를 update 하세요:

  • DB2 (flyway-database-db2)
  • Derby (flyway-database-derby)
  • HSQLDB (flyway-database-hsqldb)
  • Informix (flyway-database-informix)
  • PostgreSQL (flyway-database-postgresql)
  • Redshift (flyway-database-redshift)
  • SAP HANA (flyway-database-saphana)
  • Snowflake (flyway-database-snowflake)
  • Sybase ASE (flyway-database-sybasease)

Infinispan 15

이번 Release에서는 Infinispan 15로 upgrade 됩니다.
Infinispan 15는 Jakarta EE baseline을 상향 조정했으며, 이에 따라 -jakarta module (예 : infinispan-core-jakarta)은 더 이상 존재하지 않습니다.
대신 infinispan-core 와 같은 표준 대체 module을 사용하세요.

Git Commit ID Maven Plugin

이 plugin은 8.0.x로 upgrade 되었습니다.
이 upgrade의 일환으로 default date format은 이제 yyyy-MM-dd'T'HH:mm:ssXXX 입니다.
이는 Maven의 재현 가능한 빌드 기능과의 호환성을 제공합니다.

Minimum Requirements Changes

Native Build Tools

Native Build Tool을 사용하여 GraalVM으로 project를 build 하는 경우 0.10.x version 이상의 plugin을 사용하고 있는지 확인하세요.
Maven user는 Spring Boot parent를 사용하는 경우 올바른 version을 받아야 합니다.

Gradle user는 plugins block에서 plugin version을 update해야 합니다:

plugins {
  // ...
  id 'org.graalvm.buildtools.native' version '0.10.2'
  // ...
}

자세한 내용은 #39068 참조하세요.

New and Noteworthy

TIP: configuration 변경 사항에 대한 전체 개요는 the configuration changelog를 참조하세요

CDS Support

CDS 는 Java application의 startup time과 memory 사용량을 줄이는데 도움이 되는 JVM 기능입니다.
Spring Boot는 이제 CDS 친화적인 layout을 쉽게 생성할 수 있도록 지원합니다.
이 layout은 jarmode tools 를 사용하여 uber JAR를 추출하여 만들 수 있습니다.

java -Djarmode=tools -jar your-application.jar extract

이는 your-application/your-application.jaryour-application/lib folder에 필요한 library가 생성됩니다.
그런 다음 java -jar your-application/your-application.jar 와 같이 application을 실행할 수 있습니다.

현재 jarmode tools 는 2가지 command를 지원합니다.

  • extract, 위 예시에서 사용한 -Djarmode=layertools extract 를 대체합니다.
  • list-layers, -Djarmode=layertools list-layers 를 대체합니다.

Run

java -Djarmode=tools -jar your-application.jar help <command>

to get more details.

Gradle build file에서 layers.enabled = false 를 사용했거나 Maven pom.xml 에서 <layers><enabled>false</enabled></layers> 를 사용한 경우, layer를 비활성화해도 더 이상 jarmode JAR를 포함하지 못한다는 점에 유의하세요.
이를 위해 BootJar 또는BootWar task에서 includeTools 를 사용하거나 spring-boot-maven-plugin 에서 <configuration><includeTools>false</includeTools></configuration> 을 사용하세요.

Observability Improvements

이제 simple, direct 및 stream listener와 RabbitTemplate 에서 properties를 통해 Observability를 활성화 할 수 있습니다.

Micrometer @SpanTag annotation에 대한 지원이 추가되었습니다.

Brave와 OpenTelemetry에 대한 tagged field 지원이 추가되었습니다.
Brave에 대한 local field에 대한 지원이 추가되었습니다.

management.info.process.enabled=true 로 활성화 할 수 있는 InfoContributor process가 추가되었습니다.

application name이 명시적으로 설정되지 않은 경우, 이제 OpenTelemetry에 unknown_service 가 사용됩니다.
이렇게 하면 Spring Boot default가 OpenTelemetry 사양에 맞게 조정합니다.

Spring for Apache Pulsar

spring.pulsar.listener.observation-enabledspring.pulsar.template.observations-enabled properties의 default value가 true 에서 false 로 변경되었습니다.
이는 observation-enabled properties를 통합하기 위해 수행되었으며, 이제 모두 default가 false 로 설정됩니다.
Pulsar observation에 의존하고 있는데 명시적으로 활성화하지 않은 경우 spring.pulsar.listener.observation-enabled=truespring.pulsar.template.observations-enabled=true properties를 configuration에 추가하여 이전 동작을 복원하세요.

Brave and Zipkin

Brave는 6.0으로, Zipkin은 3.0으로 update 되었습니다.
해당 upgrade를 통해 Spring Boot의 Zipkin 지원에는 Zipkin API에 data가 report되는 encoding을 지정하는 등의 새로운 기능이 추가되었습니다.
자세한 내용은 #39049 를 참조하세요.

새로운 JDK HttpClient 기반 Zipkin sender가 구현되었습니다.
이 sender는 JDK에만 의존하며 Spring Boot 3.5.0의 기본 sendoer가 되어 WebClientRestTemplate sender 구현을 대체합니다.

Spring for Apache Pulsar Improvements

이제 spring.pulsar.client.failover namespace 아래에 Pulsar에 대한 cluster-level failover를 구성하는 properties가 있습니다.

Spring Security Improvements

이제 properties 중 하나가 설정되어 있으면 JwtAuthenticationConverter (또는 ReactiveJwtAuthenticationConverter)가 자동으로 구성됩니다:

  • spring.security.oauth2.resourceserver.jwt.authority-prefix
  • spring.security.oauth2.resourceserver.jwt.principal-claim-name
  • spring.security.oauth2.resourceserver.jwt.authorities-claim-name

Service Connections

Support for Apache ActiveMQ Artemis

Apache ActiveMQ Artemis에 대한 Service connection 지원이 추가되었습니다.
Testcontainers 지원은 ArtemisContainer container와 함께 작동하며, Docker Compose 지원은 apache/activemq-artemis image와 함께 작동합니다.
The Testcontainers support works with the ArtemisContainer container, the Docker Compose support works with the apache/activemq-artemis image.

Support for the official ActiveMQ Classic images

이제 ActiveMQ service connection은 apache/activemq-classic docker image와 ActiveMQContainer testcontainer를 지원합니다.

Support for LDAP

osixia/openldap container를 사용한 LDAP에 대한 Service connection지원이 추가되었습니다.

Bitnami Container Images

Docker Compose에 대한 Spring Boot 지원은 지원되는 여러 기술에 대한 공식 이미지 외에도 Bitnami 의 container를 감지하고 구성하며, 여기에는 Cassandra, Elasticsearch, MariaDB, MySQL, MongoDB, Neo4j, PostgreSQL, RabbitMQ, Redis 등이 포함됩니다.
자세한 내용은 업데이트된 reference documentation을 참조하세요. (링크 깨져있음)

Virtual Threads

context에서 AsyncTaskExecutor 를 사용할 수 있는 경우, 이제 websocket ChannelRegistration 에 등록됩니다.
virtual thread를 사용하는 경우, 이는 일반적으로 virtual thread가 활성화된 SimpleAsyncTaskExecutor 가 되어 websocket virtual thread를 사용할 수 있게 됩니다.

Batch Transaction Manager

custom transaction manager를 사용하도록 Spring Batch를 더 쉽게 구성할 수 있도록 @BatchTransactionManager annotation이 도입되었습니다.
자세한 내용은 업데이트된 documentation 을 참조하세요.

Base64 Resources

이제 base64: prefix를 사용하여 Resource를 Base64로 인코딩된 text 값으로 load할 수 있습니다.
아래 예제처럼 SSL 인증서와 같은 resource에 유용합니다:

spring:
  ssl:
    bundle:
      pem:
        mybundle:
          keystore:
            certificate: "base64:LS0tLS1CRUdJTi..."
            private-key: "base64:QmFnIEF0dHJpYn..."

SBOM Actuator Endpoint

이제 spring-boot-actuator module에 새로운 SBOM endpoint가 포함됩니다.
기본적으로 endpoint는 jar 아래에 있는 META-INF/sbom/bom.json 또는 META-INF/sbom/application.cdx.json file을 service 합니다.

또한 spring-boot-parent-starter POM에 추가 구성이 제공되어 SBOM plugin을 더 쉽게 구성할 수 있습니다.
자세한 내용은 documentation 을 참조하세요

Documentation Updates

Spring Boot documentation이 Antora로 migration 되어 더 많은 구조와 더 나은 검색 기능을 제공합니다.

Auto-configure Embedded Web Server SSL with SNI

SSL/TLS를 사용하여 Tomcat, Netty 또는 Undertow embedded web server를 구성할 때 이제 SNI(Server Name Indication)를 지원하기 위해 각각 unique trust material로 여러 hostname을 구성할 수 있습니다.
configuration option에 대한 자세한 내용은 업데이트된 documentation 을 참조하세요.

Dependency Upgrades

Spring Boot 3.3.0은 여러 Spring project의 새 버전으로 이동합니다.:

수많은 타사 dependencies도 업데이트 되었으며, 그 중 주목할만한 것은 다음과 같습니다:

Miscellaneous

위에 나열된 변경 사항 외에도 다음과 같은 많은 사소한 조정과 개선이 이루어졌습니다:

  • 이제 active cloud platform이 null 인 경우 spring.config.activate.on-cloud-platform=none 과 일치합니다.
  • error response에 "path" field를 포함하는 configuration option이 추가되었습니다.
    이 옵션은 server.error.include-path property로 설정할 수 있습니다.
    기본값은 always 입니다.
  • 이제 WebFlux DefaultErrorAttributesrequest.requestPath().value() 를 사용하여 path error attribute를 채웁니다.
  • Tomcat web server connector의 maximum queue size를 구성하기 위해 server.tomcat.threads.max-queue-capacity property를 추가했습니다.
  • 이제 configuration processor는 추가 키가 있는지 additional-spring-configuration-metadata.json 를 확인하고 키가 있는 경우 실패합니다.
  • ThreadPoolTaskExecutor 가 context shutdown이 시작된 후 task를 수락할지 여부를 제어하기 위해 spring.task.execution.pool.shutdown.accept-tasks-after-context-close property가 추가되었습니다.
  • WebFlux 사용 시 maximum session 수를 제어하기 위해 server.reactive.session.max-sessions property를 추가했습니다.
  • ExecutionContextSerializer bean은 이제 Spring Batch configuration에 자동으로 적용됩니다.
    아무것도 제공되지 않으면 DefaultExecutionContextSerializer 가 사용됩니다.
  • 지원되는 4가지 web server (Jetty, Netty, Tomcat 및 Undertow) 에서 생성되는 started log message가 이제 더 일관성 있게 표시됩니다.
  • JMS connection에 대한 client-idsubscription-durable properties가 추가되었습니다.
  • class가 Filter 또는 Servlet 과 같은 여러 servlet interface를 구현하는 경우 이제 모든 interface에 대해 등록됩니다.
    (예: filter에 대해 한번 등록하고 servlet에 대해 한번 등록)
  • 새로운 reactive sessions actuator endpoint는 이제 지정된 username에 대한 session을 반환할 수 있습니다.
  • 이제 environment의 defaulit profile이 env actuator endpoint의 response에 포함됩니다.
  • Liquibase에서 사용하는 기본 UI service logger를 지정하는 새로운 property spring.liquibase.ui-service 가 추가되었습니다.
  • SAML 등록의 NamedID format을 지정하는 새로운 property spring.security.saml2.relyingparty.registration.*.name-id-format 가 추가되었습니다.
  • 추가 custom MIME type mapping을 구성할 수 있는 새로운 property server.mime-mappings 가 추가되었습니다.
  • jakarta.inject:jakarta.inject-api 가 이제 Spring Boot의 dependency management에 포함됩니다.
  • 재현 가능한 build를 위해 git-commit-id-maven-plugin의 date format이 yyyy-MM-dd'T'HH:mm:ssXXX 로 변경되었습니다.
    자세한 내용은 #39606 을 참조하세요.
  • spring-boot-starter-jetty 는 더 이상 default로 jetty-jndi 를 포함하지 않습니다.
    JNDI 지원이 필요한 경우, org.eclipse.jetty:jetty-jndi 를 dependencies에 추가하세요.
  • 이제 Windows에서는 dependencies가 매우 많은 경우에도 mvn srping-boot:run 으로 application을 시작할 수 있습니다.
    3.3.0 이전에는 classpath의 길이로 인해 "The filename or extension is too long" 라는 exception이 발생하여 실패했습니다.
  • 새로운 property spring.data.jdbc.dialect 를 사용하여 Spring Data JDBC의 dialect를 설정할 수 있습니다.
    설정하지 않으면 dialect가 자동으로 감지됩니다.
  • CloudFoundryVcapEnvironmentPostProcessorConfigDataEnvironmentPostProcessor의 순서 사이에 간격을 더 추가합니다.
  • Cassandra driver가 com.datastax.oss 에서 org.apache.cassandra 로 위치가 변경되었습니다.
  • 이제 새로운 property management.observations.long-task-timer.enabledfalse 로 설정하면 모든 observation에 대해 LongTaskTimer 가 생성되지 않습니다.
  • infrastructure role의 bean은 이제 lazy initialization에서 자동으로 제외됩니다.
  • Spring Config는 이제 property를 확인할 때 environment의 conversion service를 사용합니다.
  • 새 property spring.docker.compose.start.skipnever 로 지정하면 Docker Compose startup command가 항상 실행되도록 설정합니다.
  • 새로운 spring.graphql.websocket.keep-alive property가 추가되었습니다.
  • 이제 JPA auto-configuration은 ManagedClassNameFilter bean이 정의된 경우 이 bean을 사용합니다.
  • 새로운 spring.rabbitmq.template.allow-list-patterns property가 추가되었습니다.

Deprecations in Spring Boot 3.3.0

  • ZipkinRestTemplateBuilderCustomizerZipkinWebClientBuilderCustomizer를 새로운 ZipkinHttpClientBuilderCustomizer 로 대체합니다.
  • -Djarmode=layertools extract-Djarmode=tools extract --layers 로 변경합니다.
  • -Djarmode=layertools list-Djarmode=tools list-layers 로 변경합니다.
  • includeTools 를 대신하여 BootJarBootWar task에서 layers.includeLayerTools 를 사용합니다.
  • <layers><enabled>...</enabled></layers><includeTools>...</includeTools> 로 대체합니다.
  • Actuator endpoint를 선언하기 위한 @ServletEndpoint, @ControllerEndpoint@RestControllerEndpoint annotation은 더 이상 사용되지 않습니다.
    대신 application은 endpoint에 기여하는 endpoint에 @Endpoint / @ReadOperation / @WriteOperation model을 사용 해야 합니다.
    자세한 내용은 #31768 을 참조하세요.
반응형