본문 바로가기
개발/SpringBoot

Spring Boot 3.0 → 3.1 변경 사항

by Mingvel 2023. 6. 5.

Release Notes


Upgrading from Spring Boot 3.0


Apache HttpClient 4 의 종속성 관리

  • Spring Framework 6 에서 HttpClient 4(RestTemplate)에 대한 지원이 중단 되고, HttpClient 5로 대체되었다
    • 따라서 SpringBoot 3.0 에서 HttpClient 4와 5에 대한 의존성 관리를 포함하도록 한다
    • HttpClient 4를 여전히 사용 가능하지만, RestTemplate을 사용하면서 만나는 에러 상황들을 트래킹하기 어려울 수 있다
  • 정리하자면, SpringBoot 3.1에선 HttpClient 4와 5를 모두 지원하지만 HttpClient 5를 사용하는 것을 권장한다

Servlet 및 Filter 등록

  • ServletRegistrationBean , FilterRegistrationBean Bean 등록에 실패할 경우 warning 이 아닌 IllegalStateException 을 발생시킨다
  • setIgnoreRegistrationFailure(true) 옵션으로 기존과 같은 동작을 수행할 수 있다

Git Commit ID Maven Plugin Version Property

  • io.github.git-commit-id:git-commit-id-maven-plugin 의 버전을 재정의하는 데 사용되는 프로퍼티가 artifact 이름과 일치하도록 변경되었다
  • 해당 사항을 적용하려면 pom.xml 에서 git-commit-id-plugin.version 속성을 git-commit-id-maven-plugin.version 으로 바꾸어야 한다

Spring Kafka Retry Topic Auto-configuration

  • Auto-Configured 된 retryable topic 설정(spring.kafka.retry.topic.enabled: true)을 사용하는 경우, maxDelay 를 사용하여 back off 하면 maxDelay 수준의 모든 retry가 동일 topic으로 전송 된다
  • 이전에는 maxDelay 를 초과하더라도, retry 시 마다 별도의 topic이 사용 되었다

Testcontainers 의 종속성 관리

  • SpringBoot의 종속성이 이제 TestContainers를 포함한다
  • SpringBoot에서 관리하는 Testcontainers의 버전은 testcontainers.version 로 재정의가 가능하다

Hibernate 6.2


Jackson 2.15

  • SpringBoot 3.1의 Jackson 버전이 Jackson 2.15로 업그레이드 된다

Mokito 5

  • Springboot 3.1의 Mockito 버전이 Mockito 5로 업그레이드 된다

Health Group Membership 유효성 검증

  • staratup 시에 구성 된 Health Group의 유효성을 검사 한다
  • 존재하지 않는 health indicator가 포함되거나 제외 된 경우 startup에 실패한다
  • management.endpoint.health.validate-group-membership 속성으로 해당 기능을 disabled 할 수 있다

New and Noteworthy


Service Connections

  • 새로운 서비스 connection 개념이 도입 되었으며 이는 ConnectionDetails Bean으로 표현 된다
  • ConnectionDetails Bean은 서비스 제거에 대한 연결을 설정하는 데 필요한 세부 정보를 제공하며, SpringBoot는 auto-configured 된 ConnectionDetails Bean을 사용한다
  • ConnectionDetails Bean을 사용할 수 있는 경우, 이는 connection 관련 구성 속성들보다 우선순위가 높다
  • connection 자체와 관련이 없는 구성 프로퍼티는 계속 사용 된다
  • 위와 같은 low-level 기능은 ConnectionDetails Bean을 정의하여 사용하는 다른 higher-level 기능을 위한 building block으로 사용 된다

Testcontainers

  • 개발 시점에 Testcontainer를 사용하여 외부 서비스를 관리할 수 있는 기능을 지원한다
  • 개발 시점에 Testcontainer를 사용하는 데, Maven goal (spring-boot:test-run) 와 Gradle task (bootTestRun) 를 사용할 수 있다
  • Testcontainer의 컨테이너 인스턴스를 static field로 선언하는 클래스는 @ImportTestcontainers 어노테이션으로 import 할 수 있다
  • Testcontainer 수명 주기 관리가 개선되어 컨테이너가 먼저 초기화되고 마지막으로 파기 되도록 개선 되었다
  • 재사용 가능한 컨테이너에 대한 지원이 개선 되었다
  • 컨테이너 @Bean 메서드에서 프로퍼티를 제공하려면, DynamicPropertyRegistry 를 주입할 수 있다
  • 프로퍼티 based Testcontainer 사용 시, @DynamicPropertySource 어노테이션을 주로 사용 했었는데, 이는 @ServiceConnection 어노테이션으로 간단히 표현이 가능해졌다

Docker Compose

  • 신규 모듈인 spring-boot-docker-compose 는 Docker Compose와의 통합을 제공한다
  • Application이 시작 되면, Docker Compose integration이 현재 작업 디렉터리에서 설정 파일을 찾는다
  • 지원되는 file 타입
    • compose.yaml
    • compose.yml
    • docker-compose.yaml
    • docker-compose.yml
    • 비표준 파일을 사용하려면 spring.docker.compose.file 속성을 정의하여 사용해야 한다
  • 기본적으로 설정 파일에 선언 된 서비스는 docker compose up 을 사용하여 시작 된다
  • 설정 파일에 선언 된 서비스 중지 시, docker compose down 을 사용하여 서비스가 종료 된다
  • Docer Compose의 라이프사이클 관리를 제공하는 프로퍼티는 다음과 같다
    • spring.docker.compose.lifecycle-management
    • spring.docker.compose.startup.command
    • spring.docker.compose.shutdown.command

SSL 설정

  • Java KeyStores 와 PEM-encoded 인증서와 같은 SSL 신뢰 자료를 프로퍼티로 구성이 가능하다
  • Embedded web server, data services, RestTemplate, WebClient와 같은 다양한 유형의 connection에 일관된 방식으로 적용이 가능하다

Auto-configuration for Spring Authorization Server

  • 새로운 spring-boot-starter-oauth2-authorization-server 스타터 를 지원한다

Docker Image Building

  • Maven goal(spring-boot:build-image) 와 Gradle task(bootBuildImage) 에서 createdDate 를 설정할 수 있다.
    • 이는 특정한 시간으로 설정할 수 있고, now 에 해당하는 시간으로도 설정이 가능하다
  • Maven goal(spring-boot:build-image) 와 Gradle task(bootBuildImage) 에서 applicationDirectory 옵션을 사용할 수 있다
    • 이는 buildpack이 사용한 application 컨텐츠를 업로드 할 builder image의 위치를 설정하는데 사용 된다

Spring for GraphQL

  • GraphQL 컨트롤러에 @GraphQlExceptionHandler 을 정의하거나, @ControllerAdvice 를 사용하는 것을 지원한다
  • GraphQlSource 의 구성을 통해 QueryDslDataFetcher , QueryByExampleDataFetcher 와 같은 DataFetcher 구현에 대해 @ControllerAdvice 예외 처리를 자동으로 지원한다
  • Spring Data가 classpath에 있는 경우, paging 처리와 sorting을 자동으로 제공한다
  • GraphQlSourceConnectionTypeDefinitionConfigurer 로 자동 설정 된다
    • “Connection” 으로 끝나는 field를 찾아 Connection Type 을 생성하고, 필요한 type 정의가 없는 경우 이를 추가한다

Support for Exporting Traces Using OTLP

  • io.opentelemetry:opentelemetry-exporter-otlp 가 classpath에 있으면, OtlpHttpSpanExporter 가 자동 설정 된다—
  • management.otlp.tracing.* 프로퍼티로 exporter에 대한 커스터마이징이 가능하다

Wavefront Span Tag Customization


Different log levels for file and console

  • Logbakc 혹은 Log4j2 를 사용한다면, console log와 file log의 Log level을 다르게 설정할 수 있다
    • logging.threshold.console
    • logging.threshold.file

Maximum HTTP Response Header Size

  • Tomcat 이나 Jetty 를 사용한다면, HTTP Response Header의 최대 값을 제한할 수 있다 (기본 제한 값 : 8kb)
    • Tomcat : server.tomcat.max-http-response-header-size 프로퍼티 사용
    • Jetty : server.jetty.max-http-response-header-size 프로퍼티 사용

ActiveMQ Support

  • SpringBoot 3.0 에서 제거 되었던 ActiveMQ Client에 대한 자동 구성이 다시 추가 되었다
  • Embedded ActiveMQ broker에 대한 지원은 ActiveMQ의 broker가 아직 JMS 3.0을 지원하지 않기 때문에 복원 되지 않았다

Dependency Upgrades


그 외 잡다한 사항들

  • Spring Kafka의 ContainerCustomizer Bean이 KafkaListenerContainerFactory 에 대한 자동 구성을 지원한다
  • OLTP registry에서 sending headers를 지원하기 위해 management.otlp.metrics.export.headers 프로퍼티가 추가되었다
  • AOT 처리에서 JoranConfigurators Bean을 사용할 수 있다
  • spring.kafka.admin 프로퍼티에 신규 프로퍼티가 추가 되었다
    • close-timeout
    • operation-timeout
    • auto-startup
    • auto-create
  • 자동 구성 된 ConcurrentKafkaListenerContainerFactoryBatchInterceptor Bean이 적용 된다
  • recognized 된 CloudPlaform 값에 Nomad가 추가 되었다
  • spring.jmxregistration-policy 프로퍼티를 명시할 수 있다
  • SanitizableData 를 위해 withSanitizedValue 유틸리티 메서드가 추가 되었다
  • RabbitTemplateCustomizer 가 추가 되었다
    • 이는 자동 구성 된 RabbitTemplate 타입을 커스터마이징 할 수 있다
  • CNB Platform API 0.11 을 지원한다
  • spring-boot-starter-parentmaven.compiler.release 에서 구성 된 Java 버전으로 설정한다
  • Dspring-boot.build-info.skip 세팅을 통해 build-info 를 건너뛸 수 있다
  • Micrometer의 OtlpMeterRegistry 에 대한 Aggregation temporality 설정 지원
  • Log4j2 and Logback 에 대한 추가 색상 지원
  • R2DBC MySQL driver (io.asyncer:r2dbc-mysql) 에 대한 종속성 관리 지원
  • R2DBC MariaDB driver (org.mariadb:r2dbc-mariadb) 에 대한 종속성 관리 지원
  • OpenTelemetry 를 사용할 때, 자동 구성 된 SdkTracerProvider 를 생성하는 데 사용 되는 SdkTracerProviderBuilder 가 정의 된 SdkTracerProviderBuilderCustomizer Bean에 의해 커스터마이즈 될 수 있다
  • MockServerRestTemplateCustomizersetBufferContent 메서드를 통해 content buffering활성화를 지원한다
  • BatchConversionServiceCustomizer Bean을 정의하여 Spring Batch 에서 사용 되는 conversion service(변환 서비스)를 커스터마이징 할 수 있다
  • JWK Set URI를 위한 JTWW decoder를 생성하는 builder를 JwkSetUriReactiveJwtDecoderBuilderCustomizer , JwkSetUriJwtDecoderBuilderCustomizer Bean을 통해 커스터마이징 할 수 있다
  • io.r2dbc:r2dbc-mssql 에 대한 종속성이 복원되었다
  • Logback의 루트 로그 레벨이 INFO 로 default 설정 가능하다
  • 기본적으로, Docker Compose는 down 보다 stop 을 사용하여 정지한다

Deprecations in Spring Boot 3.1.0

  • spring.kafka.streams.cache-max-size-bufferingspring.kafka.streams.state-store-cache-max-size 로 대체 된다
  • MongoPropertiesClientSettingsBuilderCustomizerStandardMongoClientSettingsBuilderCustomizer 로 대체 된다
  • org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesRegistrationAdapterorg.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper 로 대체 된다
  • org.springframework.boot.web.server.SslStoreProvider 가 SSL bundle로 대체 된다

반응형

댓글