Home Spring Boot 3.0 Release Notes
Post
Cancel

Spring Boot 3.0 Release Notes

들어가며

이 글은 Spring Boot 3.0 Release Notes를 번역 및 이해를 위한 일부 내용을 덧 붙인 글입니다.

참고하면 좋을 문서들

Upgrading from Spring Boot 2.7

스피링 부트 3.0은 스프링 부트의 주요 릴리즈(major release)로, 기존 애플리케이션을 업그레이드하는 것이 평소보다 조금 더 복잡할 수 있습니다. 우리는 기존의 스프링 부트 2.7 애플리케이션을 업그레이드하는 데 도움이 될 수 있는 전용 마이그레이션 가이드를 준비했습니다.

현재 스프링 부트의 이전 버전을 사용 중이라면, 스프링 부트 3.0으로 이전하기 전에 반드시 스프링 부트 2.7로 업그레이드하시는 것을 강력히 권장합니다.

New and Noteworthy

|Tip|설정 변경에 대한 전체 개요는 설정 변경 로그에서 확인하세요.| |—-|—-|

Java 17 Baseline and Java 19 Support

Spring Boot 3.0은 최소한 Java 17 버전이 필요합니다. 현재 Java 8 또는 Java 11을 사용하고 있다면, Spring Boot 3.0 애플리케이션을 개발하기 전에 JDK를 업그레이드해야 합니다.

Spring Boot 3.0은 JDK 19와 잘 작동하며, JDK 19에서 테스트되었습니다.

GraalVM Baseline and Native Build Tools

Spring Boot는 Graal 22.3 이상 및 Native Build Tools Plugin 0.9.17 이상이 필요합니다.

Third-party Library Upgrades

Spring Boot 3.0은 Spring Framework 6을 기반으로 하며 이를 필요로 합니다. Spring Framework 6.0에서 사용 가능한 새로운 기능에 대해 읽어보시면 좋을 것입니다.

이번 릴리즈에서 업그레이드된 다른 Spring 프로젝트는 다음과 같습니다:

Spring Boot 3.0은 모든 의존성에 대해 Java EE에서 Jakarta EE API로 마이그레이션하였습니다. 가능한 한 Jakarta EE 10 호환 의존성이 선택되었습니다, 이에는 다음이 포함됩니다:

  • Jakarta Activation 2.1

  • Jakarta JMS 3.1

  • Jakarta JSON 2.1

  • Jakarta JSON Bind 3.0

  • Jakarta Mail 2.1

  • Jakarta Persistence 3.1

  • Jakarta Servlet 6.0

  • Jakarta Servlet JSP JSTL 3.0

  • Jakarta Transaction 2.0

  • Jakarta Validation 3.0

  • Jakarta WebSocket 2.1

  • Jakarta WS RS 3.1

  • Jakarta XML SOAP 3.0

  • Jakarta XML WS 4.0

가능한 한 곳에서는 최신 안정화 릴리즈의 서드파티 jar로 업그레이드했습니다. 여기에서 주목할 만한 의존성 업그레이드는 다음과 같습니다:

GraalVM Native Image Support

Spring Boot 3.0 애플리케이션은 이제 GraalVM 네이티브 이미지로 변환될 수 있으며, 이는 메모리 및 시작 성능 향상에 상당한 향상을 제공할 수 있습니다. GraalVM 네이티브 이미지를 지원하는 것은 전체 Spring 포트폴리오에 걸쳐 수행된 주요 엔지니어링 노력이었습니다.

GraalVM 네이티브 이미지를 시작하려면, 업데이트된 Spring Boot 참조 문서를 확인하십시오.

Log4j2 Enhancements

Log4j2 지원이 업데이트되어 다음 기능을 제공하는 새로운 확장 기능을 가지게 되었습니다:

  • 프로필 특정 구성

  • 환경 속성 조회

  • Log4j2 시스템 속성

자세한 내용은 업데이트된 문서를 확인하십시오.

Improved @ConstructorBinding Detection

생성자 바인딩 @ConfigurationProperties을 사용할 때 클래스에 단일 매개변수 생성자가 있다면 @ConstructorBinding 어노테이션이 더 이상 필요하지 않습니다. 만약 두 개 이상의 생성자가 있다면, Spring Boot에게 어느 것을 사용할지 알리기 위해 여전히 @ConstructorBinding을 사용해야 합니다.

대부분의 사용자에게 이 업데이트된 로직은 더 간단한 @ConfigurationProperties 클래스를 가능하게 할 것입니다. 그러나, @ConfigurationProperties가 있고 생성자에 빈을 주입하기보다는 바인딩하고 싶다면, 이제 @Autowired 어노테이션을 추가해야 합니다.

Micrometer Updates

Auto-configuration for Micrometer Observation API

Spring Boot 3.0은 Micrometer 1.10에서 도입된 새로운 관찰 API(observation API)를 지원합니다. 새로운 ObservationRegistry 인터페이스는 메트릭과 추적 모두에 대한 단일 API를 제공하는 관찰(observations)을 생성하는 데 사용할 수 있습니다. Spring Boot는 이제 ObservationRegistry 인스턴스를 자동으로 구성합니다.

micrometer-core가 클래스 경로에 있다면, DefaultMeterObservationHandlerObservationRegistry에 등록되고, 이는 모든 중단된 Observation이 타이머로 이어진다는 것을 의미합니다. ObservationPredicate, GlobalObservationConvention, 그리고 ObservationHandler는 자동으로 ObservationRegistry에 등록됩니다. 필요한 경우 ObservationRegistryCustomizer를 사용하여 ObservationRegistry를 추가로 사용자 지정할 수 있습니다.

자세한 내용은 참조 문서의 새로운 ‘Observability’ 섹션을 참조하십시오.

Auto-configuration for Micrometer Tracing

Spring Boot는 이제 Micrometer Tracing을 자동으로 구성합니다. 이에는 Brave, OpenTelemetry, Zipkin, 그리고 Wavefront에 대한 지원이 포함됩니다.

Micrometer Observation API를 사용할 때, 관찰을 마치는 것은 Zipkin이나 Wavefront에 보고되는 스팬으로 이어집니다. 추적은 management.tracing 아래의 속성으로 제어할 수 있습니다. Zipkin은 management.zipkin.tracing으로 구성할 수 있으며, Wavefront는 management.wavefront를 사용합니다.

추가해야 할 다양한 의존성을 포함한 더 많은 세부 정보는 참조 문서의 추적 섹션에 있습니다.

Auto-configuration for Micrometer’s OtlpMeterRegistry

io.micrometer:micrometer-registry-otlp이 클래스 경로에 있을 때 OtlpMeterRegistry가 이제 자동으로 구성됩니다. 메터 레지스트리는 management.otlp.metrics.export.* 속성을 사용하여 구성할 수 있습니다.

Prometheus Support

Auto-Configuration for Prometheus Exemplars

Micrometer Tracing Tracer 빈과 Prometheus가 클래스 경로에 있을 때, SpanContextSupplier가 이제 자동으로 구성됩니다. 이 공급자는 현재의 추적 ID와 스팬 ID를 Prometheus에 사용 가능하게 함으로써 메트릭을 추적에 연결합니다.

Making a PUT to Prometheus Push Gateway on Shutdown

Push Gateway는 종료 시 PUT을 수행하도록 구성할 수 있습니다. 이를 수행하려면, management.prometheus.metrics.export.pushgateway.shutdown-operationput으로 설정합니다. 추가로, 기존의 push 설정은 더 이상 사용되지 않고 post가 대신 사용되어야 합니다.

More Flexible Auto-configuration for Spring Data JDBC

Spring Data JDBC에 대한 자동 구성이 이제 더 유연해졌습니다. Spring Data JDBC에 필요한 여러 자동 구성된 빈들이 이제 조건부이며, 동일한 유형의 빈을 정의함으로써 대체될 수 있습니다. 이제 대체될 수 있는 빈들의 유형은 다음과 같습니다:

  • org.springframework.data.jdbc.core.JdbcAggregateTemplate

  • org.springframework.data.jdbc.core.convert.DataAccessStrategy

  • org.springframework.data.jdbc.core.convert.JdbcConverter

  • org.springframework.data.jdbc.core.convert.JdbcCustomConversions

  • org.springframework.data.jdbc.core.mapping.JdbcMappingContext

  • org.springframework.data.relational.RelationalManagedTypes

  • org.springframework.data.relational.core.dialect.Dialect

Enabling Async Acks with Apache Kafka

Kafka와 함께 비동기 acks를 활성화하기 위한 새로운 구성 속성인 spring.kafka.listener.async-acks가 추가되었습니다. 비동기 acks를 활성화하려면, 이 속성을 true로 설정하십시오. 이 속성은 spring.kafka.listener.async-modemanual 또는 manual-immediate로 설정될 때만 적용됩니다.

Elasticsearch Java Client

새로운 Elasticsearch Java 클라이언트에 대한 자동 구성이 도입되었습니다. 기존의 spring.elasticsearch.* 구성 속성을 사용하여 구성할 수 있습니다.

Auto-configuration of JdkClientHttpConnector

Reactor Netty, Jetty의 반응형 클라이언트, 그리고 Apache HTTP 클라이언트가 없는 경우, JdkClientHttpConnector가 이제 자동으로 구성됩니다. 이를 통해 WebClient는 JDK의 HttpClient와 함께 사용될 수 있습니다.

@SpringBootTest with Main Methods

@SpringBootTest와 메인 메소드 @SpringBootTest 어노테이션은 이제 사용 가능한 경우 발견된 @SpringBootConfiguration 클래스의 main을 사용할 수 있습니다. 이는 메인 메소드에 의해 수행된 모든 사용자 정의 SpringApplication 구성이 이제 테스트에 의해 선택될 수 있음을 의미합니다.

테스트에 main 메소드를 사용하려면, @SpringBootTestuseMainMethod 속성을 UseMainMethod.ALWAYS 또는 UseMainMethod.WHEN_AVAILABLE로 설정하십시오.

자세한 내용은 업데이트된 참조 문서를 참조하십시오.

Miscellaneous

위에서 나열된 변경사항 외에도, 약간의 수정과 개선이 있었습니다:

  • 호스트 이름은 더 이상 애플리케이션 시작 동안에 로그에 남지 않습니다. 이는 네트워크 검색을 방지하여 시작 시간을 개선하는 데 도움이 됩니다.

  • JDK에서 deprecated 처리된 SecurityManager에 대한 지원이 제거되었습니다.

  • Spring Framework 6에서 제거된 CommonsMultipartResolver에 대한 지원이 제거되었습니다.

  • Spring Framework의 변화를 따라 spring.mvc.ignore-default-model-on-redirect가 deprecated 처리되었습니다.

  • WebJars 리소스 핸들러 경로 패턴은 spring.mvc.webjars-path-pattern 또는 spring.webflux.webjars-path-pattern을 사용하여 커스터마이즈 할 수 있습니다.

  • Tomcat의 원격 IP 밸브의 신뢰할 수 있는 프록시는 server.tomcat.remoteip.trusted-proxies를 사용하여 구성할 수 있습니다.

  • Bean Validation Configuration은 이제 ValidationConfigurationCustomizer 빈을 정의함으로써 커스터마이즈 될 수 있습니다.

  • Log4j2의 Log4jBridgeHandler는 이제 SLF4J를 통해 라우팅하는 대신 JUL 기반 로깅을 Log4j2로 라우팅하는 데 사용됩니다.

  • MeterBinder 인터페이스를 구현하는 빈은 이제 모든 싱글톤 빈이 초기화된 후에만 미터 레지스트리에 바인딩됩니다.

  • Brave와 OpenTelemetry에 대한 SpanCustomizer 빈들은 이제 자동으로 구성됩니다.

  • Micrometer의 JvmCompilationMetrics는 이제 자동으로 구성됩니다.

  • DiskSpaceHealthIndicator는 이제 로그 메시지와 건강 상세 정보에 경로를 포함합니다.

  • DataSourceBuilder는 이제 감싸진 DataSource에서 파생될 수 있습니다.

  • MongoDB에 대해 여러 호스트를 spring.data.mongodb.additional-hosts 속성을 사용하여 구성할 수 있습니다.

  • Elasticsearch의 socketKeepAlive 속성은 spring.elasticsearch.socket-keep-alive 속성을 사용하여 구성할 수 있습니다.

  • spring-rabbit-stream을 사용할 때, spring.rabbitmq.listener.typestream인지 여부에 관계없이 RabbitStreamTemplateEnvironment가 이제 자동으로 구성됩니다.

  • 기존 Kafka 주제는 spring.kafka.admin.modify-topic-configs를 사용하여 수정할 수 있습니다.

  • WebDriverScopeWebDriverTestExecutionListener가 공개되었으므로 사용자 정의 테스트 설정에서 WebDriver를 쉽게 사용할 수 있습니다.

Deprecations in Spring Boot 3.0

  • @ConstructorBindingorg.springframework.boot.context.properties 패키지에서 org.springframework.boot.context.properties.bind로 이동되었습니다.

  • JsonMixinModule 스캔 기반 생성자가 deprecated 처리되었습니다.

  • ClientHttpRequestFactorySupplierClientHttpRequestFactories로 대체해야 합니다.

  • 쿠키의 comment 속성은 더 이상 지원되지 않습니다.

  • RestTemplateExchangeTagsProvider, WebClientExchangeTagsProvider, WebFluxTagsProvider, WebMvcTagsProvider 및 관련 클래스들은 ObservationConvention에 해당하는 것으로 대체되었습니다.

  • HealthContributor @Configuration 기본 클래스의 인수 없는 생성자가 deprecated 처리되었습니다.

  • DefaultTestExecutionListenersPostProcessorSpringBootDependencyInjectionTestExecutionListener는 Spring Framework의 ApplicationContextFailureProcessor를 대신하여 deprecated 처리되었습니다.

  • management.metrics.export.<product> 속성은 deprecated 처리되었으며, 대체는 management.<product>.metrics.export입니다.

  • management.prometheus.metrics.export.pushgateway.shutdown-operationpush 설정은 post를 대신하여 deprecated 처리되었습니다.

  • @AutoConfigureMetrics@AutoConfigureObservability를 대신하여 deprecated 처리되었습니다.

This post is licensed under CC BY 4.0 by the author.

MODULAR MONOLITH - DOMAIN-CENTRIC DESIGN (모듈러 모놀로스 - 도메인 중심 설계)

Spring Boot 3.1 Release Notes