파란하늘의 지식창고
Published 2021. 11. 23. 14:28
Spring Boot 2.6 Release Notes Study/Java
반응형

 

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

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


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

Upgrading from Spring Boot 2.5

Deprecations from Spring Boot 2.4

Spring Boot 2.4에서 더 이상 사용되지 않는 class, method 및 properties가 이번 release에서 제거되었습니다.
upgrade 하기 전에 더 이상 사용되지 않는 method를 호출하지 않는지 확인하세요.

 

Circular References Prohibited by Default

이제 기본적으로 bean 간의 순환 참조(circular reference)가 허용되지 않습니다.
BeanCurrentlyInCreationException으로 인해 application이 시작되지 않는 경우 dependency cycle을 해제하도록 구성을 업데이트해야 합니다.
그렇게 하지 못하는 경우 spring.main.allow-circular-referencestrue로 설정하거나 SpringApplicationSpringApplicationBuilder에서 새로운 setter method를 사용하여 circular reference를 허용할 수 있습니다.
그러면 2.5의 동작으로 복원되고 dependency cycle이 자동으로 해제됩니다.

 

PathPattern Based Path Matching Strategy for Spring MVC

등록된 Spring MVC handler mapping request에 대한 request path matching의 default strategy가 AntPathMatcher에서 PathPatternParser로 변경되었습니다.

Spring Security를 사용하는 경우 'mvcMatchers' 사용을 검토하여 matcher가 계속해서 요구사항을 충족하는지 확인해야 합니다.
'AntPathMatcher'를 사용하면 'authorizeRequests.mvcMatchers("hello").permitAll()'이 '/hello'에 대한 access 권한을 부여합니다.
'PathPatternParser'를 보다 정확하게 일치시키려면 'authorizeRequests.mvcMatchers("/hello").permitAll()'을 사용해야 합니다. (앞의 '/' 참고)


만약 AntPathMatcher로 default를 변경하고 싶은 경우 spring.mvc.pathmatch.matching-strategyant-path-matcher로 설정하면 됩니다.

이제 actuator endpoint 또한 PathPattern 기반 URL matching을 사용합니다.
actuator endpoint에 대한 path matching strategy는 configuration property를 통해 설정할 수 없습니다.
Actuator 및 Springfox를 사용하는 경우 application이 구동하지 않을 수 있습니다.
자세한 내용은 이곳을 참조하세요.

 

Actuator Env InfoContributor Disabled by Default

이제 env info contributor는 기본적으로 비활성화되어 있습니다.
활성화하려면 management.info.env.enabledtrue로 설정하세요.

 

Application Startup

ApplicationStartup에 기록된 spring.boot.application.running 시작 단계의 이름이 spring.boot.application.ready로 변경되었습니다.
만약 FlightRecorderApplicationStartup 또는 BufferingApplicationStartup에서 생성된 파일을 처리하는 경우 새 이름을 사용해야 합니다.

 

Web Resources Configuration

Resources를 직접 inject 하는 작업은 이 구성이 WebProperties로 일치되었으므로 더 이상 동작하지 않습니다.
이 정보에 접근해야 하는 경우 WebProperties를 inject해야 합니다.

 

Dependency Management Removals

JBoss Transaction SPI

org.jboss:jboss-transaction-spi에 대한 dependency management가 제거되었습니다.
org.jboss:jboss-transaction-spi를 사용하는 경우 별도로 dependency management를 정의해야 합니다.

Nimbus DS

com.nimbusds:oauth2-oidc-sdkcom.nimbusds:nimbus-jose-jwt에 대한 dependency management가 제거되었습니다.
Spring Security를 사용하는 경우 전달된 dependency의 버전에 의존해야 합니다.
Spring Security를 사용하지 않는 경우 별도로 dependency management를 정의해야 합니다.

HAL Browser

org.webjars:hal-browser에 대한 dependency management가 제거되었습니다.
org.webjars:hal-browser를 사용하는 경우 별도로 dependency management를 정의해야 합니다.

 

Prometheus Version Property

Prometheus의 version 관리 property가 prometheus-pushgateway.version에서 prometheus-client.version로 변경되었습니다.
이는 property가 pushgateway만이 아닌 prometheu의 모든 module version을 관리한다는 사실을 반영하기 위한 것입니다.

 

Embedded Mongo

이제 embedded mongo를 사용하기 위해 spring.mongodb.embedded.version property를 설정해야 합니다.
이렇게 하면 embedded 지원에서 사용하는 MongoDB version과 application이 production에서 사용할 MongoDB version과 일치합니다.

 

Oracle Database Driver Dependency Management

oracle database driver에 대한 dependency management가 간소화되었습니다.
여전히 이전 com.oracle.ojdbc groupId에 의존하는 경우 이전 dependency management를 제거했으므로  com.oracle.database.jdbc group으로 upgrade 해야 합니다.

 

Vault-related Flyway Properties Removed

Flyway의 7.12 release는 Vault 관련 설정을 closed-source extension으로 이전되었습니다.
Spring Boot에서는 불행하게도 이를 구성할 수 없습니다.
이로 인해 spring.flyway.vault-secrets, spring.flyway.vault-tokenspring.flyway.vault-url properties가 제거되었습니다.
만약 Flyway Teams 사용자인 경우 FlywayConfigurationCustomizer bean, FluentConfiguration.getExtensionConfiguration 및 Valut ApiExtension을 통해 설정을 구성할 수 있습니다.

 

WebFlux Session Properties

spring.webflux.session property group이 제거되고 server.reactive.session로 재배치되었습니다.
이전 property는 계속 동작하지만 가능하면 새 property로 migration 해야 합니다.

Elasticsearch Property Consolidation

Elasticsearch client를 구성하는 데 사용되는 configuration properties가 통합되었습니다.
이전에는 blocking high-level REST client 및 reactive REST client를 구성하기 위한 많은 공통 properties가 spring.elasticsearch.restspring.data.elasticsearch.client.reactive에 중복되었습니다.

만약 blocking REST client를 사용하고 있다면 아래처럼 이전 properties를 교체 대상 properties로 변경해야 합니다.

Deprecated Property Replacement
spring.elasticsearch.rest.uris spring.elasticsearch.uris
spring.elasticsearch.rest.username spring.elasticsearch.username
spring.elasticsearch.rest.password spring.elasticsearch.password
spring.elasticsearch.rest.connection-timeout spring.elasticsearch.connection-timeout
spring.elasticsearch.rest.read-timeout spring.elasticsearch.socket-timeout
spring.elasticsearch.rest.sniffer.interval spring.elasticsearch.restclient.sniffer.interval
spring.elasticsearch.rest.sniffer.delay-after-failure spring.elasticsearch.restclient.sniffer.delay-after-failure

만약 reactive client를 사용하고 있다면 아래처럼 이전 properties를 교체 대상 properties로 변경해야 합니다.

Deprecated Property Replacement
spring.data.elasticsearch.client.reactive.endpoints spring.elasticsearch.uris
spring.data.elasticsearch.client.reactive.use-ssl https scheme when configuring spring.elasticsearch.uris
spring.data.elasticsearch.client.reactive.username spring.elasticsearch.username
spring.data.elasticsearch.client.reactive.password spring.elasticsearch.password
spring.data.elasticsearch.client.reactive.connection-timeout spring.elasticsearch.connection-timeout
spring.data.elasticsearch.client.reactive.socket-timeout spring.elasticsearch.socket-timeout
spring.data.elasticsearch.client.reactive.max-in-memory-size spring.elasticsearch.webclient.max-in-memory-size

 

@Persistent no longer considered with Spring Data Couchbase

Spring Data Couchbase에서 default behavior를 정렬하기 위해 @Persistent-annotated type을 더 이상 사용되지 않습니다.
해당 annotation에 의존하는 경우 @Document를 대신 사용할 수 있습니다.

 

Maven Build Info’s Default Time

maven plugin의 build info 지원은 이제 project의 project.build.outputTimestamp value를 default build time으로 사용합니다.
property가 설정되지 않은 경우 이전처럼 build session의 start time이 사용됩니다.
이전과 마찬가지로 time을 off로 설정하여 완전히 비활성화할 수 있습니다.

 

Records and @ConfigurationProperties

만약 Java 16 Record와 함께 @ConfigurationProperties를 사용하고 record에 single constructor가 있는 경우 더 이상 @ConstructorBinding으로 annotation을 달 필요가 없습니다.
record에 여러 constructor가 있는 경우 property binding에 사용할 constructor를 식별하는데 @ConstructorBinding을 계속 사용해야 합니다.

 

Deferred OpenID Connect Discovery

OpenID connect issuer-uri로 구성된 spring-security-oauth2-resource-server를 사용하는 resource server application의 경우 Spring Boot는 이제 NumbusJwtDecoder 대신 SupplierJwtDecoder를 자동으로 구성합니다.
이것은 start time을 향상시키는 Spring Security의 lazy OIDC discovery 지원을 가능하게 합니다.
마찬가지로 reactive application의 경우 ReactiveSupplierJwtDecode가 자동 구성됩니다.

 

Minimum Requirements Changes

없음

 

New and Noteworthy

configuration의 변경에 대한 전체 목록은 configuration changelog를 참고하세요.

SameSite Cookie Attribute Servlet Support

이제 server.servlet.session.cookie.same-site property를 사용하여 servlet application의 session cookie에서 SameSite attribute를 구성할 수 있습니다.
이 기능은 자동 구성된 Tomcat, Jetty 및 Undertow server에서 동작합니다.

또한 다른 cookie에 SameSite attribute를 적용하려는 경우에도 CookieSameSiteSupplier interface를 사용할 수 있습니다.
자세한 내용과 예제 코드는 업데이트된 documentation을 참조하세요.

 

Reactive Server Session Properties

reactive server (이전 spring.webflux.session 하위)에 지원되는 session property는 이번 release에서 확장되었습니다.
새 properties는 server.reactive.session에서 사용할 수 있으며, 이제 servlet version과 동등성을 제공합니다.

 

Pluggable Sanitization Rules

Spring Boot는 /env/configprops endpoint에 있는 민감한 값을 삭제합니다.
configuration properties를 통해 삭제되는 property를 구성하는 것이 가능했지만 사용자는 property가 시작된 PropertySource를 기반으로 삭제 규칙을 적용할 수 있습니다.
예를 들어 Spring Cloud Vault는 Vault를 사용하여 암호화된 값을 저장하고 이를 Spring 환경에 로드합니다.
모든 값이 암호화되므로 전체 property source의 모든 key의 value를 비우는 것이 좋습니다.
이러한 santization customization은 SanitizingFunction type의 @Bean을 추가하여 구성할 수 있습니다.

 

Java Runtime Information

info endpoint는 이제 다음 예제와 같이 java key아래 Java Runtime information을 노출할 수 있습니다.

{
  "java": {
    "vendor": "BellSoft",
    "version": "17",
    "runtime": {
      "name": "OpenJDK Runtime Environment",
      "version": "17+35-LTS"
    },
    "jvm": {
      "name": "OpenJDK 64-Bit Server VM",
      "vendor": "BellSoft",
      "version": "17+35-LTS"
    }
  }
}

이 information을 info endpoint의 응답에 노출하려면 management.info.java.enabled property를 true로 설정합니다.

 

Build Info Property Exclusions

이제 Spring Boot Maven 또는 Gradle plugin에 의해 생성된 build-info.properties 파일에 추가되는 특정 properties를 제외할 수 있습니다.

Maven 사용자는 <excludeInfoProperties> tag를 사용하여 standard group, artifact, name, version 또는 time properties를 제외할 수 있습니다.
예를 들어 version property를 제외하려면 다음과 같이 설정합니다.

<configuration>
	<excludeInfoProperties>
		<excludeInfoProperty>version</excludeInfoProperty>
	</excludeInfoProperties>
</configuration>

Gradle 사용자는 DSL의 properties block과 함께 null value를 사용할 수 있습니다.

task buildInfo(type: org.springframework.boot.gradle.tasks.buildinfo.BuildInfo) {
	destinationDir project.buildDir
	properties {
		version = null
	}
}

 

Health Support

Additional Path on Main or Management Port

health group은 main 또는 management port의 additional path에서 사용할 수 있습니다.
이는 보안 복적으로 actuator endpoint에 대해 별도의 management port를 사용하는 것이 일반적인 kubernetes와 같은 cloud 환경에서 유용합니다.
별도의 port가 있으면 health check에 성공하더라도 main application이 제대로 동작하지 않을 수 있으므로 신뢰할 수 없는 health check가 발생할 수 있습니다.
일반적인 구성에는 별도의 port에 있는 모든 actuator endpoint와 main port와 additional path에서 liveness와 readiness에 사용되는 health group이 있습니다.

 

Composite Contributor Include/Exclude Support

health group은 CompositeHealthContributor의 일부를 포함/제외하도록 구성할 수 있습니다.
이는 component에 대한 완전한 qualified path를 지정하여 수행할 수 있습니다.
예를 들어 test로 명명된 component 안에 중첩된 component springtest/spring을 사용하여 포함될 수 있습니다.

 

Metrics Support

Application Startup

auto-configuration은 application startup과 관련한 2개의 metric을 노출합니다.

  • application.started.time: time taken to start the application.
  • application.ready.time: time taken for the application to be ready to service requests.

Disk Space

Micrometer의 DiskSpaceMetrics는 이제 자동 구성됩니다.
현재 작업 디렉터리로 식별되는 partition에 대해 disk.freedisk.total metric이 제공됩니다.
사용되는 경로를 변경하려면 DiskSpaceMetrics bean을 정의하면 됩니다.

Task Execution and Scheduling

Micrometer의 ExecutorServiceMetrics는 이제 기본 ThreadPoolExecutor를 사용할 수 있는 한 모든 ThreadPoolTaskExecutor 및 ThreadPoolTaskScheduler bean에 대해 자동 구성됩니다.
Metric은 bean name에서 파생된 executor의 name으로 tag가 지정됩니다.

Jetty Connection and SSL

이제 Micrometer의 JettyConnectionMetrics가 자동으로 구성됩니다.
또한 server.ssl.enabledtrue로 설정되면 Micrometer의 JettySslHandshakeMetrics도 자동 구성됩니다.

Exporting to the Dynatrace v2 API

Dynatrace v2 API로 metric 내보내기 지원이 추가되었습니다.
host에서 local OneAgent를 실행하는 경우 io.micrometer:micrometer-registry-dynatrace에 대한 종속성만 있으면 됩니다.
local OneAgent가 없으면 management.metrics.export.dynatrace.urimanagement.metrics.export.dynatrace.api-token properties를 구성해야 합니다.
v2 API와 관련된 기타 설정은 management.metrics.export.dynatrace.v2 properties를 사용하여 구성할 수 있습니다.
자세한 내용은 업데이트된 reference documentation을 참조하세요.

 

Docker Image Building Support

Additional Image Tags

Maven 및 Gradle plugin은 이제 tags configuration parameter를 사용하여 빌드한 후 생성된 이미지에 추가 태그 적용을 지원합니다.

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

Network Configuration

Maven plugin spring-boot:build-image goal 및 Gradle bootBuildImage task에 network configuration parameter가 추가되었습니다.
이 parameter는 Cloud Native Buildpacks builder process를 실행하는 container에서 사용하는 network driver를 구성하는 데 사용할 수 있습니다.

Cache Configuration

Maven 및 Gradle plugin은 이제 buildCachelaunchCache configuration parameter를 사용하여 buildpack에 의해 빌드된 image에 기여한 layer를 cache 하는 데 사용되는 volume의 name customizing을 지원합니다.

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

 

Auto-configuration for Spring Data Envers

이제 Spring Data Envers에 대한 자동 구성이 제공됩니다.
이를 사용하려면 org.springframework.data:spring-data-envers에 대한 dependency를 추가하고 JPA repository를 업데이트하여 RevisionRepository에서 확장하십시오.

 

Redis Connection Pooling

Redis(Jedis와 Lettuce 모두)는 이제 commons-pool2가 classpath에 있을 때 pooling을 자동으로 활성화합니다.
필요한 경우 풀링을 비활성화하려면 spring.redis.jedis.pool.enabled 또는 spring.redis.lettuce.pool.enabledfalse로 설정하십시오.

 

Auto-configuration for spring-rabbit-stream

Spring AMQP의 새로운 spring-rabbit-stream module에 대한 자동 구성이 추가되었습니다.
spring.rabbitmq.listener.type property가 stream으로 설정되면 StreamListenerContainer가 자동으로 구성됩니다.
spring.rabbitmq.stream.* property를 사용하여 broker에 대한 access를 구성할 수 있고 spring.rabbitmq.listener.stream.native-listener를 사용하여 native listener 지원을 활성화할 수 있습니다.

 

Support for PEM format in Kafka SSL Properties

이전에 Kafka는 SSL용 file 기반 key 및 trust store만 지원했습니다.
KIP-651을 사용하면 이제 PEM format을 사용할 수 있습니다.
Spring Boot는 PEM format을 사용하여 SSL 인증서 및 private key 구성을 허용하는 다음 속성을 추가했습니다.

  • spring.kafka.ssl.key-store-key
  • spring.kafka.ssl.key-store-certificate-chain
  • spring.kafka.ssl.trust-store-certificates

 

Improved Configuration of the Maven Plugin’s Start Goal

Maven plugin의 start goal은 command line에서 좀 더 설정할 수 있습니다.
waitmaxAttempts property는 각각 spring-boot.start.waitspring-boot.start.maxAttempts를 사용하여 지정할 수 있습니다.

 

Auto-configured Spring Web Service Server Tests

web service @Endpoint bean을 테스트하는 데 사용할 수 있는 새로운 annotation @WebServiceServerTest가 도입되었습니다.
annotation은 @Endpoint bean을 포함하는 test slice를 생성하고 web service endpoint를 테스트하는 데 사용할 수 있는 MockWebServiceClient bean을 자동 구성합니다.

 

MessageSource-based Interpolation of Bean Validation Messages

이제 constraint message에서 {parameters}를 확인할 때 application의 MessageSource가 사용됩니다.
이를 통해 Bean Validation message에 application의 messages.properties file을 사용할 수 있습니다.
parameter가 resolve 되면 Bean Validation의 default interpolator를 사용하여 message interpolation이 완료됩니다.

 

Using WebTestClient for Testing Spring MVC

개발자는 WebTestClient를 사용하여 mock environment에서 WebFlux app을 테스트하거나 라이브 서버에 대해 Spring web app을 테스트할 수 있습니다.
이 변경은 또한 mock environment에서 Spring MVC용 WebTestClient를 활성화합니다.
@AutoConfigureMockMvc로 annotation이 달린 class는 WebTestClient를 주입할 수 있습니다.
이로써 지원이 완료되었으며 이제 단일 API를 사용하여 모든 웹 테스트를 실행할 수 있습니다!

 

Spring Integration PollerMetadata Properties

Spring Integration PollerMetadata(매초 무제한 message polling)는 이제 spring.integration.poller.* configuration properties로 사용자 정의할 수 있습니다.

 

Support for Log4j2’s Composite Configuration

이제 Log4j2의 composite configuration이 지원됩니다.
이를 사용하려면 main configuration을 재정의할 secondary configuration file의 쉼표로 구분된 목록으로 logging.log4j2.config.override property를 구성합니다.
기본 구성은 Spring Boot의 기본값인 log4j2.xml과 같은 잘 알려진 표준 위치 또는 이전과 같이 logging.config 속성으로 지정된 위치에서 가져옵니다.

 

Dependency Upgrades

Spring Boot 2.6에서 여러 Spring project가 새 버전으로 변경되었습니다.

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

 

Miscellaneous

위에 나열된 변경 사항 외에도 다음과 같은 minor tweak 및 improvements가 많이 있습니다.

  • NoSuchMethodError에 대한 failure analysis에는 이제 호출 class가 로드된 위치에 대한 정보가 포함됩니다.
  • 이제 ClientResourcesBuilderCustomizer bean을 정의하여 Lettuce의 ClientResources가 default auto-configuration을 유지하도록 customize 할 수 있습니다.
  • Flyway의 detectEncoding, failOnMissingLocationsignoreMigrationPatterns configuration setting에 대한 configuration properties가 추가되었습니다.
  • SpringApplicationBulder를 생성할 때 application에서 사용할 custom ResourceLoader를 제공할 수 있습니다.
  • 이제 WebSessionIdResolver를 정의하여 자동 구성된 WebSessionManager에서 사용할 resolver를 customize 정의할 수 있습니다.
  • 이제 모든 RSocketConnectorConfigurer bean이 자동 구성된 RSocketRequester.Builder에 자동으로 적용됩니다.
  • spring-boot-configuration-processor는 이제 Lombok의 @Value로 annotation이 달린 class에 대한 metadata를 생성할 수 있습니다.
  • 새로운 server.tomcat.reject-illegal-header configuration property를 true로 설정하여 Tomcat이 잘못된 header를 허용하도록 구성할 수 있습니다.
  • Stackdriver를 사용할 때 이제 management.metrics.export.stackdriver.resource-labels.* configuration properties를 설정하여 monitor resource에서 label을 구성할 수 있습니다.
  • @EntityScan은 이제 basePackages attribute에서 쉼표로 구분된 값을 지원합니다.
  • Reactor Netty의 idle timeout을 제어하는 데 사용할 수 있는 새로운 configuration property인 server.netty.idle-timeout이 추가되었습니다.
  • Devtools가 global setting을 로드하는 위치는 이제 spring.devtools.home system property 또는 SPRING_DEVTOOLS_HOME environment variable를 사용하여 구성할 수 있습니다.
  • RabbitTemplateConfigurer의 setter method가 이제 public입니다.
  • heapdump endpoint는 이제 PHD format으로 heapdump를 생성하는 OpenJ9에서 지원됩니다.
  • 이제 spring.webflux.multipart.*에서 WebFlux의 multipart 지원을 위해 새로운 configuration properties가 지원됩니다.
  • 이제 자동 구성된 Spring AMQP MessageListenerContainer를 구성하기 위해 모든 ContainerCustomizer bean이 호출됩니다.
  • jackson의 기본 관용성(default leniency)은 spring.jackson.default-leniency property를 사용하여 구성할 수 있습니다.
  • 이제 distribution statistic의 만료 및 buffer length를 구성할 수 있습니다.
  • 이제 Lettuce에 대한 command latency metric이 자동으로 구성됩니다.
  • management.metrics.system.diskspace.paths property를 사용하여 하나 이상의 경로로 disk space metric을 구성할 수 있습니다.
  • 사용자는 RedisStandaloneConfiguration bean을 제공하여 Redis 자동 구성을 제어할 수 있습니다.
  • 사용 가능한 모든 data source의 URL은 이제 H2 콘솔이 자동 구성될 때 기록됩니다.
  • 새로운 configuration proerty spring.integration.management.default-logging-enabled는 값을 false로 설정하여 Spring Integration의 default logging을 비활성화하는 데 사용할 수 있습니다.
  • 이제 AuthenticationManagerProvider bean이 있는 경우 UserDetailsService에 대한 자동 구성이 취소됩니다.

 

Deprecations in Spring Boot 2.6.0

  • AbstractDataSourceInitializer는 더 이상 사용되지 않으며 DataSourceScriptDatabaseInitializer를 사용합니다.
    유사하게, AbstractDataSourceInitializer의 subclass는 새로운 DataSourceScriptDatabaseInitializer-based 동등물을 위해 더 이상 사용되지 않습니다.
  • SpringPhysicalNamingStrategy는 Hibernate 5.5의 CamelCaseToUnderscoresNamingStrategy를 위해 더 이상 사용되지 않습니다.
  • AbstractApplicationContextRunner의 세 가지 메서드는 새로운 RunnerConfiguration-based 동등물을 위해 더 이상 사용되지 않습니다.
  • SpringApplicationRunListenerstartedrunning method는 Duration을 허용하는 버전으로 대체되었습니다.
  • ApplicationStartedEventApplicationReadyEvent의 constructor가 Duration을 허용하는 버전으로 대체되었습니다.
  • EnvironmentEndpoint.sanitize는 제거를 위해 더 이상 사용되지 않습니다.
반응형
profile

파란하늘의 지식창고

@Bluesky_

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