본문 바로가기
개발/SpringBoot

Spring Boot 2.6 -> 2.7 변경 사항

by Mingvel 2023. 6. 19.

Release Note

Upgrading from Spring Boot 2.6

@SpringBootTest Property Source 우선 순위

  • @TestPropertySource 어노테이션으로 명시 한 테스트 속성은 args 로 받은 명령 속성보다 더 우선순위가 높
  • @TestPropertySource 와 실행 인자를 동시에 받아 실행하는 경우 우선순위를 고려할 것

신규 Flyway 모듈

  • Flyway Version을 8.0 → 8.5 로 지원한다
  • 여러 DB에 대한 Flyway의 지원이 모듈로 추출되었다 - 아래 명시 된 DB를 사용하고자 한다면 의존성을 추가하여 사용해야 한다
    • flyway-firebird : Firebird
    • flyway-mysql : MariaDB & MySQL
    • flyway-sqlserver : SQL Server

H2 2.1

  • 지원하는 H2 Version이 2.1.120 로 업그레이드 되었다
  • 위 버전은 이전 버전과 호환되지 않으며, 여러 보안 취약점을 개선하였다

jOOQ

  • JOOQ 오픈 소스 버전은 Java 8과 H2 2.x 버전을 지원하지 않는다
  • 따라서 Java 11 버전을 사용한다면 jooq.version 프로퍼티를 3.16 버전 이상으로 업그레이드 해야 한다
  • Java 8 버전을 사용하고 싶다면 JOOQ Professional Edition을 사용해야 한다

Microsoft SQL Server JDBC Drive 10

  • MSSQL driver 버전이 v9 → v10 으로 업그레이드 된다
  • v10 버전은 암호화를 기본으로 제공한다
  • 서버에 신뢰할 수 있는 인증서를 설치하거나, JDBC 연결 URL에 encrypt=false 를 포함하도록 업데이트 하는 것을 권장한다

OkHttp 4

  • OkHTTP 3 → OkHTTP 4 로 업그레이드 된다
  • 속성 또한 okhttp3.versionokhttp.version 으로 변경 된다
  • OkHTTP 4 는 OkHTTP 3 과 역 호환이 가능하다. 따라서 OkHTTP 3 을 계속 사용하고 싶다면 okhttp.version 속성을 구성해서 사용해야한다

netty-tcnative 에 대한 별도 종속성 관리 제거

  • netty-tcnative 에 대한 별도 종속성 관리가 제거 되어, Netty의 bom에서 제공하는 종속성 관리가 제공 된다
  • 이는 netty-tcnative 버전이 Netty 버전과 일치하도록 하기 위함이다
  • 더이상 netty-tcnative.version 속성으로 netty-tcnative 버전을 재정의 할 수 있다
  • 여전히 자체 종속성 관리를 제공하긴 하지만, 기존 Netty 버전과 일치하도록 유지하는 것을 권장한다

spring.mongodb.embedded.features 속성 제거

  • 임베디드 Mongo 3.4에서 Mongo 기능 설정에 대한 지원이 중단 되었다
  • 그에 따라, spring.mongodb.embedded.features 속성도 제거 되었다

Servlet-specific Mustache Properties

  • 아래 속성들이 deprecated 되었다
    • spring.mustache.allow-request-override
    • spring.mustache.allow-session-override
    • spring.mustache.cache
    • spring.mustache.content-type
    • spring.mustache.expose-request-attributes
    • spring.mustache.expose-session-attributes
    • spring.mustache.expose-spring-macro-helpers
  • 아래 속성들이 새로 소개되었다
    • spring.mustache.servlet.allow-request-override
    • spring.mustache.servlet.allow-session-override
    • spring.mustache.servlet.cache
    • spring.mustache.servlet.content-type
    • spring.mustache.servlet.expose-request-attributes
    • spring.mustache.servlet.expose-session-attributes
    • spring.mustache.servlet.expose-spring-macro-helpers

자동 구성 된 ReactiveElasticsearchTemplate 의 기본 인덱스 옵션

  • 자동 구성 된 ReactiveElasticsearchTemplate의 기본 인덱스 옵션이 Spring Data Elasticsearch와 일치하도록 변경 되었다
  • 기본값이 변경 되었다
    • strictExpandOpenAndForbidClosedstrictExpandOpenAndForbidClosedIgnoreThrottled
  • 이전 인덱스 옵션을 복원하려면 reactiveElasticsearchTemplate Bean을 정의해야 한다

MongoDB 속성 우선순위

  • url 프로퍼티가 개발 프로퍼티보다 우선순위가 높아졌다
  • spring.data.mongodb.url 이 설정 되면 위 프로퍼티는 무시된다
  • 이는 spring.redis.url 과 동작이 일치한다

Maven 프로세스에서 애플리케이션 실행

  • 기본적으로spring-boot:runspring-boot:start 플러그인은 application을 fork하여 동작하는데, 이제 이 fork 작업을 비활성화 할 수 있다

Ordered Exit Code Generators

  • ExitCodeGenerators 는 이제 Ordered 구현과 @Order 어노테이션에 따라 정렬 된다
  • 생성 되는 0이 아닌 첫 번재 종료 코드가 사용 된다

Metric Tag Keys Renamed

  • 소문자. 구분 기호를 모두 사용하라는 Micrometer 의 권장 사항을 준수하기 위해 소문자로 되어 있던 메트릭 태그 키의 이름이 변경 되었다
  • 이전 네이밍을 사용하고 싶다면 MeterFilter Bean을 정의하면 된다

Support for Elasticsearch’s RestHighLevelClient is Deprecated

  • Elasticsearch가 RestHighLevelClient 를 deprecated 함에 따라, SpringBoot의 자동 구성 RestHighLevelClient 도 deprecated 된다
  • 이는 RestClient 로 대체해 사용할 수 있다

R2DBC Driver Changes

  • Borca release에서는 PostgreSQL용 드라이버인 r2dbc-postgresql의 그룹 ID가 io.r2dbc → org.postgresql로 변경되었다
  • MySQL driver인 r2dbc-mysql 은 삭제 되었고, 대안으로 r2dbc-mariadb 를 고려해볼 수 있다

WebSecurityConfigurerAdapter 에서 SecurityFilterChain 으로의 마이그레이션

  • SpringBoot 2.7에서 지원하는 Spring Security 버전이 5.7 로 업그레이드 되었는데, 이는 WebSecurityConfigurerAdapter 에 대한 deprectate를 포함한다
  • [WebSecurityConfigurerAdapter 없이 설정 하는 것](https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter)과, @WebMvcTest 를 사용해 테스트를 수행하는 경우, @Import 어노테이션으로 security configuration 클래스를 임포트 하여 SecurityFilterChain bean이 사용 가능하도록 추가 설정을 수행해야 한다

Building Jars With Maven Shade Plugin and Gradle Shadow Plugin

  • 자동 구성 및 management context 클래스들이 검색 되는 방식이 변경 되었다
    • META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
    • META-INF/spring/org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration.imports

MIMEPull

  • org.jvnet.mimepull:mimepull 에 대한 종속성 관리가 제거 되었다

Support for Hazelcast 3.0 is Deprecated

  • Hazelcast 3 에 대한 지원이 Deprecated 되었다
  • 하지만 classpath에 hazelcast-client 를 추가함으로써 아직까진 사용이 가능하다

Spring MVC’s requestMappingHandlerMapping is No Longer Primary

  • 더 이상 MVC의 main requestMappingHandlerMapping Bean을 @Primary 로 선언할 수 없다
  • RequestMappingHandlerMapping 을 주입받아야 할 때, 이러한 Bean이 여러가지 있을 경우 @Qualifier 어노테이션으로 주입 선택이 가능하다
  • ``List` 을 사용하여 모든 후보를 주입 받을 수 있다

MySQL JDBC Driver

  • MySQL JDBC driver의 좌표가 변경 되었다
  • 8.0.31 은 mysql:mysql-connector-java , com.mysql:mysql-connector-j 에 publish 된다
  • 8.0.32 이상은 com.mysql:mysql-connector-j 에만 publish 된다
  • SpringBoot 2.7.8 이상의 버전에서는 8.0.32 로 업그레이드 되었기에 유의해야한다

Deprecations from Spring Boot 2.5

  • SpringBoot 2.5에서 Deprecated 된 항목들이 모두 제거 된다

New and Noteworthy

New Spring GraphQL starter

Support for RabbitStreamTemplate

  • stream 이름이 spring.rabbitmq.stream.name 속성으로 정의 되어 있다면 RabbitStreamTemplate 이 자동으로 구성 된다
  • 자동 구성을 유지하면서 추가 인스턴스를 커스터마이징 할 수 있도록 RabbitStreamTemplateConfigurer 가 제공 된다 (RabbitTemplateConfigurer 과 유사)

Hazelcast @SpringAware Support

  • 임베디드 Hazelcast 서버는 SpringManagerContext 를 기본으로 사용한다
  • 이로 인해, Hazelcast에 의해 인스턴스화 된 객체에 Spring Bean을 주입할 수 있다
  • HazelcastConfigCustomizer 콜백 인터페이스가 도입 되었다. 이 인터페이스를 사용하여 Hazelcast 서버 구성을 추가로 조정할 수 있다

Operating System Information in Info endpoint

  • OsInfoContributor 가 서비삭 동작 중인 OS에 대한 정보도 노출한다
  • 새로운 정보들은 기본적으로 비활성화 상태이다
  • management.info.os.enabled 속성으로 활성화 시킬 수 있다

Java Vendor Information in Info endpoint

  • JavaInfoContributor 가 벤더 버전 정보를 포함 한 벤더 정보를 제공한다
  • 모든 벤더가 java.vendor.version 을 노출하는 것은 아니기에 version 필드는 null일 수 있음을 염두해 두어야 한다

Accessing the Authenticated Principal in RSocket Handler Methods

  • @Authenticated 어노테이션으로 Principal 객체를 주입 받을 수 있다

Opaque Token Introspection Without the OIDC SDK

  • opaque toke을 사용하여 OAuth2 인증을 하는 경우에, 더이상 com.nimbusds:oauth2-oidc-sdk 종속성을 필요로 하지 않는다
  • SDK의 다른 용도에 따라 애플리케이션에서 종속성을 제거할 수 있다

@DataElasticsearchTest

  • Spring Data Couchbase 를 사용 한 어플리케이션 테스트를 위한 @DataCouchbaseTest 어노테이션이 추가 되었다

@DataElasticsearchTest

  • Spring Data Elasticsearch 를 사용 한 어플리케이션 테스트를 위한 @DataElasticsearchTest 어노테이션이 추가 되었다

Auto-configuration for SAML2 logout

  • Spring Security’s SAML2 를 사용 한다면, RP-initiated 혹은 AP-initiated logout 을 프로퍼티로 구성할 수 있다

Changes to Auto-configuration

Auto-configuration Registration

  • 자동 구성을 생성하였다면, pring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration 키 아래에 있는 등록을 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports라는 새 파일로 이동해야 한
  • ,로 구분된 단일 목록이 아닌 각 줄에는 자동 구성 클래스의 정규화된 이름이 포함 된다

New @AutoConfiguration Annotation

  • META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일에 나열 된 최상위 자동 구성 클래스에 @AutoConfiguration 어노테이션을 달고, @Configuration 을 대체 하는 데 사용해야 한다
  • @AutoConfiguration 클래스 내에 중첩 되거나, 임포트 된 Configuration 클래스는 이전과 같이 @Configuration 어노테이션을 계속 사용해야 한다
  • 자동 구성 ordering을 제공 한다
    • after , afterNames , before , beforeNames
    • 이는 @AutoConfigureAfter@AutoConfigureBefore 를 대체할 수 있다

Test Slice Configuration

  • 자체 test-slice를 생성한 경우, registration을 spring.factories 에서 META-INF/spring/<name of your test slice annotation>.imports 로 변경해야 한다

FailureAnalyzer Injection

  • FailureAnalyzer 구현은 하나 혹은 둘 모두를 매개변수로 받는 생성자를 제공하며, 현재 application context의 BeanFactory 및 Environment에 접근이 가능하다
  • BeanFactoryAware 를 구현함으로써 BeanFactory 를 주입 받는 방법과, EnvironmentAware 를 구현함으로써 Environment 를 주입 받는 방법은 추후에 deprecated 될 예정이다

Redis Sentinel Username Support

  • spring.redis.sentinel.username 프로퍼티를 사용하여 Sentinel 에서 username으로 인증하는 것을 지원한다

Overriding Built-in Sanitization

  • SanitizingFunction Bean은 순서대로 호출 되며, 함수가 SanitizableData 의 값을 변경하면 중지 된다
  • SanitizingFunction Bean이 없으면, 내장된 key-based sanitization이 수행 된다
  • @Order 어노테이션 혹은 Ordered 구현으로 동작한다

Docker Image Building

  • Maven과 Gradle에서 Cloud Native Buildpacks 를 사용하여 image를 building할 때, Docker Engine 대신 Podman container engine이 사용 되도록 지원한다

Cache2k Support

  • Cache2k 를 위한 종속성 관리 및 자동 구성이 추가 되었다
  • 기본 캐시 설정은 Cache2kBuilderCustomizer Bean을 통해 커스터마이징이 가능하다

Simplified Registration of Jackson Mixins

  • Jackson의 자동 구성이 @JsonMixin 어노테이션이 명시 된 클래스를 찾는다
  • 발견되는 모든 클래스는 자동 구성된 ObjectMapper를 사용하여 자동으로 mixin으로 등록 된다

Web Server SSL Configuration Using PEM-encoded Certificates

  • 임베디드 Web 서버는 PEM-encoded 된 인증서 및 private key 파일과 함께 SSL 을 구성할 수 있다
    • server.ssl.certificate , server.ssl.certificate-private-key , server.ssl.trust-certificate , server.ssl.trust-certificate-private-key 프로퍼티 사용
  • Management endpoints 는 management.server.ssl.* 프로퍼티를 사용할 수 있다

Dependency Upgrades

그 외 잡다한 사항들

  • Kafka의 idlePartitionEventIntervalspring.kafka.listener.idle-partition-event-interval 프로퍼티를 사용해 설정이 가능하다
  • KafkaTemplate transactionIdPrefixspring.kafka.template.transaction-id-prefix 프로퍼티를 사용해 설정이 가능하다
  • Netty의 maxKeepAliveRequestsserver.netty.max-keep-alive-requests 프로퍼티로 설정이 가능하다
  • @DataJdbcTest 어노테이션은 AbstractJdbcConfiguration Bean들을 자동으로 스캔한다
  • SAML 2.0 Login을 사용할 때, UserDetailsService Bean이 더이상 자동 구성 되지 않는다
  • Spring Batch 의 트랜잭션 격리 레벨을 spring.batch.jdbc.isolation-level-for-create 프로퍼티로 설정 가능하다
  • Spring MVC metrics을 기록하는 filter들은 FilterRegistrationBean<WebMvcMetricsFilter> Bean을 정의함으로써 대체가 가능하다
  • DatabaseDriver.MARIADB 의 ID가 mysqlmariadb 로 변경 되었다
  • spring-boot-loaderRandomAccessDataFile 에서 리턴 받는 InputStreamavailable() 를 구현한다
  • Spring Kafka 의 immediateStopspring.kafka.listener.immediate-stop 프로퍼티를 사용해 설정이 가능하다
  • 신규 프로퍼티 spring.mustache.reactive.media-types 를 사용해 reactive Mustache view에서 지원 되는 media type을 구성할 수 있다
  • elasticsearch-rest-client 가 classpath에 있으면, RestClientBuilderRestClient Bean들이 자동 구성 된다
    • elasticsearch-rest-high-level-client 가 classpath에 있으면 이전과 동일하게 RestHighLevelClient Bean이 자동 구성 되지만, 이는 이제 deprecated 되었다

Deprecations in Spring Boot 2.7

  • spring.factories 로부터 로딩 되는 자동 구성이 deprecated 되었다
  • DatabaseDriver.GAE 가 Deprecated 되었다
  • pring.security.saml2.relyingparty.registration.{id}.identityprovide 내부 프로퍼티들이 spring.security.saml2.relyingparty.registration.{id}.assertingparty 로 옮겨졌다
    • 이전 프로퍼티 이름을 사용할 경우, startup 시에 WARN 로그 메세지를 기록한다
반응형

댓글