Spring Boot 3.3 Release Notes
전체 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을 지원하기 위해 MetricsApplicationEventListener
가 ObservationApplicationEventListener
로 대체되었습니다.
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.jar
및 your-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-enabled
및 spring.pulsar.template.observations-enabled
properties의 default value가 true
에서 false
로 변경되었습니다.
이는 observation-enabled
properties를 통합하기 위해 수행되었으며, 이제 모두 default가 false
로 설정됩니다.
Pulsar observation에 의존하고 있는데 명시적으로 활성화하지 않은 경우 spring.pulsar.listener.observation-enabled=true
및 spring.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가 되어 WebClient
및 RestTemplate
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의 새 버전으로 이동합니다.:
- Spring Authorization Server 1.3.0
- Spring Data 2024.0.0
- Spring GraphQL 1.3.0
- Spring HATEOAS 2.3.0
- Spring Integration 6.3.0
- Spring Kafka 3.2.0
- Spring Pulsar 1.1.0
- Spring Security 6.3.0
- Spring Session 3.3.0
수많은 타사 dependencies도 업데이트 되었으며, 그 중 주목할만한 것은 다음과 같습니다:
- AssertJ 3.25
- Brave 6.0
- Commons DBCP2 2.12
- Elasticsearch Client 8.13
- Flyway 10.10
- Hazelcast 5.4
- Hibernate 6.5
- HikariCP 5.1.0
- Infinispan 15.0
- Jackson 2.17
- JMustache 1.16
- Kafka 3.7
- Liquibase 4.27
- Micrometer 1.13
- Micrometer Tracing 1.3.0
- Mockito 5.11
- MySQL 8.3
- OpenTelemetry 1.37
- Oracle R2DBC 1.2.0
- Rabbit AMQP Client 5.21
- Rabbit Stream Client 0.15
- REST Assured 5.4
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
DefaultErrorAttributes
는request.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-id
및subscription-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가 자동으로 감지됩니다. CloudFoundryVcapEnvironmentPostProcessor
와ConfigDataEnvironmentPostProcessor
의 순서 사이에 간격을 더 추가합니다.- Cassandra driver가
com.datastax.oss
에서org.apache.cassandra
로 위치가 변경되었습니다. - 이제 새로운 property
management.observations.long-task-timer.enabled
를false
로 설정하면 모든 observation에 대해LongTaskTimer
가 생성되지 않습니다. - infrastructure role의 bean은 이제 lazy initialization에서 자동으로 제외됩니다.
- Spring Config는 이제 property를 확인할 때 environment의 conversion service를 사용합니다.
- 새 property
spring.docker.compose.start.skip
을never
로 지정하면 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
ZipkinRestTemplateBuilderCustomizer
및ZipkinWebClientBuilderCustomizer
를 새로운ZipkinHttpClientBuilderCustomizer
로 대체합니다.-Djarmode=layertools extract
를-Djarmode=tools extract --layers
로 변경합니다.-Djarmode=layertools list
를-Djarmode=tools list-layers
로 변경합니다.includeTools
를 대신하여BootJar
및BootWar
task에서layers.includeLayerTools
를 사용합니다.<layers><enabled>...</enabled></layers>
를<includeTools>...</includeTools>
로 대체합니다.- Actuator endpoint를 선언하기 위한
@ServletEndpoint
,@ControllerEndpoint
및@RestControllerEndpoint
annotation은 더 이상 사용되지 않습니다.
대신 application은 endpoint에 기여하는 endpoint에@Endpoint
/@ReadOperation
/@WriteOperation
model을 사용 해야 합니다.
자세한 내용은 #31768 을 참조하세요.