스프링부트는 사랑입니다

스프링 부트 3.3 릴리스 노트 본문

ReleaseNotes

스프링 부트 3.3 릴리스 노트

얼바인 2024. 10. 26. 11:40
728x90

스프링 부트 3.2에서 업그레이드


Jersey Observability

Micrometer 1.13은 Jersey의 jersey-micrometer 모듈을 선호하며 Jersey 지원을 더 이상 지원하지 않습니다. 애플리케이션이 Jersey 메트릭을 사용하는 경우 업그레이드 시 org.glassfish.jersey.ext에 대한 종속성을 추가해야 합니다.

Jersey와 함께 관측을 지원하기 위해 MetricsApplicationEventListenerObservationApplicationEventListener로 대체되었습니다. 태그를 사용자 지정하기 위해 JerseyTagsProvider를 사용했던 경우, 이제 JerseyObservationConvention 빈을 구현해야 합니다.

Dependency Management for Dropwizard Metrics Removed


드롭위저드 메트릭에 대한 종속성 관리가 제거되었습니다. 스프링 부트는 드롭위저드 메트릭에 직접 의존하지 않으므로 특정 버전이 필요하지 않습니다. 애플리케이션이 드롭위저드 메트릭에 직접 의존하는 경우, 필요에 맞는 버전을 지정하도록 빌드 구성을 업데이트하십시오.

Prometheus Client 1.x


스프링 부트 3.3에는 프롬메테우스 클라이언트 1.x에 대한 지원이 포함됩니다. 이 클라이언트 릴리스에는 내보내는 메트릭 이름의 변경과 같은 몇 가지 호환성 문제 있는 변경 사항이 포함되어 있습니다. 1.x 클라이언트와 함께 프롬메테우스 푸시 게이트웨이는 지원되지 않으며, 이는 프롬메테우스 유지 관리자가 지원을 추가할 때까지입니다.

프롬메테우스 클라이언트 0.x 버전을 계속 사용하려면 io.micrometer

를 종속성에서 제거하고 대신 io.micrometer를 추가하십시오. 스프링 부트는 간단한 클라이언트에 대한 자동 구성을 비활성화된 형태로 포함하고 있으며, 이는 스프링 부트 3.5.0에서 제거될 것입니다.

자세한 마이그레이션 가이드는 Micrometer 위키의 이 섹션을 참조하십시오.

Flyway 10


이번 릴리스는 플라이웨이 10으로 업그레이드되었습니다. 플라이웨이 10은 이전 버전보다 더 모듈화되어 있으며, 여러 데이터베이스에 대한 지원이 여러 새로운 데이터베이스별 모듈로 이동되었습니다. 다음 데이터베이스를 사용하는 경우 종속성을 적절히 업데이트하십시오:

  • 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)

Ininispan 15


이번 릴리스는 인피니스팬 15로 업그레이드되었습니다. 인피니스팬 15는 자카르타 EE 기반을 높였으며, 그 결과 infinispan-core-jakarta와 같은 여러 -jakarta 모듈이 더 이상 존재하지 않습니다. 대신 infinispan-core와 같은 표준 대안을 사용하십시오.

Git Commit DI Maven Plugin

플러그인이 8.0.x로 업그레이드되었습니다. 이번 업그레이드의 일환으로 기본 날짜 형식이 이제 yyyy-MM-dd'T'HH:mm

가 되었습니다. 이는 메이븐의 재현 가능한 빌드 기능과의 호환성을 제공합니다.

Mimimum Requirements Changes

Native Build Tools

GraalVM으로 프로젝트를 빌드하는 데 네이티브 빌드 도구를 사용하는 경우 플러그인의 0.10.x 버전을 사용하고 있는지 확인하십시오. 메이븐 사용자는 스프링 부트 부모를 사용할 때 올바른 버전을 자동으로 가져옵니다.

그레이들 사용자는 플러그인 블록에서 플러그인 버전을 업데이트해야 합니다:

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

자세한 내용은 #39068을 참조하십시오.

New and Noteworthy

CDS Support

CDS는 Java 애플리케이션의 시작 시간과 메모리 발자국을 줄이는 데 도움이 되는 JVM 기능입니다. 스프링 부트는 CDS 친화적인 레이아웃의 손쉬운 생성을 지원합니다. 이 레이아웃은 다음 도구를 사용하여 우버 JAR를 추출하여 생성할 수 있습니다:

java -Djarmode=tools -jar your-application.jar extract
이 명령은 your-application/your-application.jar와 필요한 라이브러리를 your-application/lib 폴더에 생성합니다. 그런 다음 애플리케이션을 다음과 같이 실행할 수 있습니다: java -jar your-application/your-application.jar.
 
현재 tools jarmode는 두 가지 명령을 지원합니다:
  • 위에서 설명한 extract. 이는 -Djarmode=layertools extract를 대체합니다.
  • list-layers, 이는 -Djarmode=layertools list-layers를 대체합니다.

자세한 내용은 다음 명령을 실행하십시오:

java -Djarmode=tools -jar your-application.jar help <command>
그레이드 빌드 파일에서 layers.enabled = false를 사용했거나 Maven pom.xml에서 <layers><enabled>false</enabled></layers>를 사용한 경우, 레이어 비활성화가 더 이상 jarmode JAR의 포함을 방지하지 않습니다. BootJar 또는 BootWar 작업에서 includeTools를 사용하거나 spring-boot-maven-plugin에서 <configuration><includeTools>false</includeTools></configuration>를 사용하십시오.

 

Observability Improvements

관측은 이제 간단한 직접 및 스트림 리스너와 RabbitTemplate에서 속성을 통해 활성화할 수 있습니다.

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

Brave와 OpenTelemetry 모두에 대한 태그 필드 지원이 추가되었습니다. Brave에는 로컬 필드에 대한 지원이 추가되었습니다.

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

명시적으로 애플리케이션 이름이 설정되지 않은 경우, unknown_service가 이제 OpenTelemetry에 사용됩니다. 이는 스프링 부트 기본값을 OpenTelemetry 사양에 맞추기 위한 것입니다.

Spring for Apache Pulsar

속성 spring.pulsar.listener.observation-enabledspring.pulsar.template.observations-enabled의 기본값이 true에서 false로 변경되었습니다. 이는 모든 관측 가능 속성을 통일하기 위해 이루어졌으며, 이제 기본값이 false입니다. Pulsar 관측에 의존하고 명시적으로 활성화하지 않았다면, 속성 spring.pulsar.listener.observation-enabled=truespring.pulsar.template.observations-enabled=true를 구성에 추가하여 이전 동작을 복원하십시오.

Brave and Zipkin

Brave는 6.0으로 업데이트되었으며, Zipkin은 3.0으로 업데이트되었습니다. 이 업그레이드로 스프링 부트의 Zipkin 지원에 새로운 기능이 추가되었으며, 데이터가 Zipkin API에 보고되는 인코딩을 지정할 수 있습니다. 자세한 내용은 #39049를 참조하십시오.

JDK HttpClient 기반의 Zipkin 전송기가 구현되었습니다. 이 전송기는 JDK에만 의존하며, 스프링 부트 3.5.0에서 기본 전송기가 될 것입니다. 이는 WebClient 및 RestTemplate 전송기 구현을 대체합니다.

Spring for Apache Pulsar Improvements

이제 spring.pulsar.client.failover 네임스페이스 하에 Pulsar의 클러스터 수준 장애 조치를 구성하는 속성이 추가되었습니다.

Spring Security Improvements

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에 대한 서비스 연결 지원이 추가되었습니다. Testcontainers 지원은 ArtemisContainer 컨테이너와 함께 작동하며, Docker Compose 지원은 apache/activemq-artemis 이미지와 함께 작동합니다.

Support for the official ActiveMQ Classic images

ActiveMQ 서비스 연결은 이제 apache/activemq-classic 도커 이미지와 ActiveMQContainer 테스트 컨테이너를 지원합니다.

Support for LDAP 
osixia/openldap 컨테이너와 함께 LDAP에 대한 서비스 연결 지원이 추가되었습니다.

Bitnami Container Images
스프링 부트의 도커 컴포즈 지원은 여러 지원 기술에 대해 비트나미의 컨테이너를 자동으로 감지하고 구성합니다. 여기에는 Cassandra, Elasticsearch, MariaDB, MySQL, MongoDB, Neo4j, PostgreSQL, RabbitMQ 및 Redis가 포함됩니다. 자세한 내용은 업데이트된 참조 문서를 참조하십시오.

Virtual Threads
AsyncTaskExecutor가 컨텍스트에서 사용 가능한 경우, 이제 웹소켓 ChannelRegistration에 등록됩니다. 가상 스레드를 사용하는 경우, 이는 일반적으로 가상 스레드가 활성화된 SimpleAsyncTaskExecutor가 되어 웹소켓이 가상 스레드를 사용할 수 있게 됩니다.

Batch Transaction Manager
@BatchTransactionManager 주석이 도입되어 Spring Batch가 사용자 지정 트랜잭션 관리자를 사용하도록 쉽게 구성할 수 있게 되었습니다. 자세한 내용은 업데이트된 문서를 참조하십시오.

Base64 Resources
리소스는 이제 base64: 접두사를 사용하여 Base64로 인코딩된 텍스트 값으로 로드할 수 있습니다. 이는 SSL 인증서와 같은 리소스에 유용할 수 있습니다. 예를 들면 다음과 같습니다:

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

SBOM Actuator Endpoint
spring-boot-actuator 모듈에는 새로운 SBOM 엔드포인트가 포함되었습니다. 기본적으로 이 엔드포인트는 JAR에 있는 META-INF/sbom/bom.json 또는 META-INF/sbom/application.cdx.json 파일을 제공합니다.

SBOM 플러그인을 더 쉽게 구성할 수 있도록 spring-boot-parent-starter POM에 추가 구성이 제공되었습니다. 자세한 내용은 문서를 참조하십시오.

Documentation Updates
스프링 부트 문서는 Antora로 이전되어 더 나은 구조와 검색 기능을 제공합니다.

Auto-configure Embedded Web Server SSL with SNI
Tomcat, Netty 또는 Undertow 임베디드 웹 서버를 SSL/TLS로 구성할 때, 이제 고유한 신뢰 자료로 여러 호스트 이름을 구성할 수 있어 서버 이름 표시(SNI)를 지원합니다. 구성 옵션에 대한 자세한 내용은 업데이트된 문서를 참조하십시오.

Dependency Upgrades
스프링 부트 3.3.0은 여러 스프링 프로젝트의 새로운 버전으로 이동합니다:

  • 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

많은 서드파티 종속성도 업데이트되었으며, 그 중 일부는 다음과 같습니다:

  • 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
위에 나열된 변경 사항 외에도 많은 사소한 수정 및 개선 사항이 포함되었습니다:

  • spring.config.activate.on-cloud-platform=none이 활성 클라우드 플랫폼이 null일 때 일치합니다.
  • 오류 응답에서 "path" 필드 포함을 위한 구성 옵션이 추가되었습니다. 이는 server.error.include-path 속성으로 제어할 수 있으며, 기본값은 always입니다.
  • WebFlux의 DefaultErrorAttributes는 이제 request.requestPath().value()를 사용하여 경로 오류 속성을 채웁니다.
  • Tomcat 웹 서버 커넥터의 최대 대기열 크기를 구성하기 위한 server.tomcat.threads.max-queue-capacity 속성이 추가되었습니다.
  • 구성 프로세서는 이제 additional-spring-configuration-metadata.json에서 불필요한 키를 확인하고, 이를 발견할 경우 실패합니다.
  • spring.task.execution.pool.shutdown.accept-tasks-after-context-close라는 속성이 추가되어 컨텍스트 종료가 시작된 후 ThreadPoolTaskExecutor가 작업을 수락하는지 여부를 제어합니다.
  • WebFlux를 사용할 때 최대 세션 수를 제어하는 server.reactive.session.max-sessions 속성이 추가되었습니다.
  • ExecutionContextSerializer 빈이 이제 Spring Batch 구성에 자동으로 적용됩니다. 제공되지 않는 경우 DefaultExecutionContextSerializer가 사용됩니다.
  • 지원되는 네 개의 웹 서버(Jetty, Netty, Tomcat, Undertow)가 생성하는 시작 로그 메시지가 이제 더 일관성 있게 변경되었습니다.
  • JMS 연결을 위한 client-idsubscription-durable 속성이 추가되었습니다.
  • 클래스가 Filter 또는 Servlet과 같은 여러 서블릿 인터페이스를 구현하는 경우, 이제 모든 인터페이스에 대해 등록됩니다(예: 필터에 대한 하나의 등록 및 서블릿에 대한 하나의 등록).
  • 새로운 반응형 Session 액추에이터 엔드포인트가 이제 주어진 사용자 이름에 대한 세션을 반환할 수 있습니다.
  • 환경의 기본 프로필이 이제 env 액추에이터 엔드포인트의 응답에 포함됩니다.
  • Liquibase에서 사용하는 기본 UI 서비스 로거를 지정하기 위한 새로운 속성 spring.liquibase.ui-service가 추가되었습니다.
  • SAML 등록의 NameID 형식을 지정하기 위한 새로운 속성 spring.security.saml2.relyingparty.registration.*.name-id-format이 추가되었습니다.
  • 추가 사용자 정의 MIME 유형 매핑을 구성할 수 있는 새로운 속성 server.mime-mappings가 추가되었습니다.
  • jakarta.inject:jakarta.inject-api가 이제 Spring Boot의 종속성 관리에 포함되었습니다.
  • git-commit-id-maven-plugin의 날짜 형식이 yyyy-MM-dd'T'HH:mm:ssXXX로 변경되어 재현 가능한 빌드를 허용합니다. 자세한 내용은 #39606을 참조하십시오.
  • spring-boot-starter-jetty는 더 이상 기본적으로 jetty-jndi를 포함하지 않습니다. JNDI 지원이 필요하면 org.eclipse.jetty:jetty-jndi를 종속성에 추가하십시오.
  • Windows에서 매우 많은 수의 종속성이 있는 경우에도 mvn spring-boot:run으로 애플리케이션을 시작할 수 있게 되었습니다. 3.3.0 이전에는 클래스 경로의 길이로 인해 "파일 이름 또는 확장자가 너무 깁니다"라는 예외가 발생했습니다.
  • 새로운 속성 spring.data.jdbc.dialect를 사용하여 Spring Data JDBC의 방언을 설정할 수 있습니다. 설정하지 않으면 방언이 자동 감지됩니다.
  • CloudFoundryVcapEnvironmentPostProcessor와 ConfigDataEnvironmentPostProcessor 간의 간격을 더 벌렸습니다.
  • Cassandra 드라이버의 좌표가 com.datastax.oss에서 org.apache.cassandra로 변경되었습니다.
  • 새로운 속성 management.observations.long-task-timer.enabled를 false로 설정하면 모든 관찰에 대한 LongTaskTimer 생성이 방지됩니다.
  • 인프라 역할의 빈은 이제 자동으로 지연 초기화에서 제외됩니다.
  • Spring Config는 속성을 해결할 때 환경의 변환 서비스를 사용합니다.
  • 새로운 속성 spring.docker.compose.start.skipnever로 설정하면 Docker Compose 시작 명령을 항상 실행합니다.
  • 새로운 속성 spring.graphql.websocket.keep-alive가 추가되었습니다.
  • JPA 자동 구성은 정의된 경우 ManagedClassNameFilter 빈을 사용합니다.
  • 새로운 속성 spring.rabbitmq.template.allow-list-patterns가 추가되었습니다.

Deprecations in Spring Boot 3.3.0

  • ZipkinRestTemplateBuilderCustomizerZipkinWebClientBuilderCustomizer는 새로운 ZipkinHttpClientBuilderCustomizer로 대체되었습니다.
  • -Djarmode=layertools extract-Djarmode=tools extract --layers로 대체되었습니다.
  • -Djarmode=layertools list-Djarmode=tools list-layers로 대체되었습니다.
  • BootJarBootWar 작업에서 layers.includeLayerToolsincludeTools로 대체되었습니다.
  • <layers><enabled>…​</enabled></layers><includeTools>…​</includeTools>로 대체되었습니다.
  • 액추에이터 엔드포인트를 선언하기 위한 @ServletEndpoint, @ControllerEndpoint 및 @RestControllerEndpoint 주석은 사용 중단되었습니다. 대신, 애플리케이션은 엔드포인트 기여를 위해 @Endpoint / @ReadOperation / @WriteOperation 모델을 사용해야 합니다. 자세한 내용은 #31768을 참조하십시오.
728x90