본문 바로가기
개발/SpringBoot

Spring Boot 2.3 -> 2.4 변경 사항

by Mingvel 2023. 6. 8.

공식 Release Node


Versioning scheme change

  • 버저닝 스키마가 변경되었다
  • 기존에 알파뱃순으로 정렬 된 테마별 릴리즈 트레인 버전을 사용하고 있었는데, 영어가 모국어가 아닌 사용자가 버전을 알파뱃순으로 정렬하기 어려울 수 있다는 점 + 버전 이름을 기억하기 어려울 수 있다는 점 + 테마 철자가 어려울 수있다는 점을 고려하여 Calendar Versioning (calver)를 사용하기로 변경 되었다

JUnit5의 Vintage Engine이 spring-boot-starter-test 에서 삭제되었다

  • JUnit5 Vintage Engine은 JUnit4로 작성 된 테스트를 JUnit5에서 동작시키기 위해 사용되는 engine이지만 springboot 2.4에선 이를 삭제하였다
  • 이는 JUnit 4 로 작성 된 테스트를 JUnit 5로 마이그레이션하는 것을 권장하는 움직임으로 보인다
  • JUnit4 테스트를 사용하려면 org.junit.vintage:junit-vintage-engine 의존성을 별도로 추가해서 사용해야 한다

Config File Processing 변경

  • application.properties 와 application.yml 의 처리 방식이 변경되었다
    • Yaml 파일 내에서 속성이 선언 된 순서대로 적용된다
      • 기존 Springboot 2.3에선 profile 순서로 추가되었던 것과 차이점을 보인다
      • 재정의 하려는 property가 있는 경우 채택되어야 하는 설정을 더 앞쪽에 위치시켜야 한다
    • application.properties 파일이 application-.properties 파일을 재정의하지 않는다
      • Profile 정의 방식 변경
        • 기존 : spring.profiles : “xxx”
        • 변경 : spring.config.activate.on-profile : “xxx”
      • Profile Grouping 설정 변경
    • 기존 Springboot 2.3에서 위 두가지 파일만 사용하고 있었다면 신경쓸 필요 없는 변경사항이다
    • spring.config.use-legacy-processing 옵션을 true로 준다면, Springboot 2.3과 동일한 방식으로 동작이 가능하다

Config 파일 Optional 설정

  • 설정 정보 경로에 optional 키워드를 명시할 수 있게 되었다
    • spring.config.location=optional:/etc/config/application.properties
  • 전체 경로에 대하여 optional 처리를 하려면 SpringApplication 설정에 spring.config.on-not-found=ignore 옵션을 사용할 수 있다

Embedded database detection

  • DB가 In Memorry에 있는 경우에만 임베디드 DB로 간주하도록 로직 개선
  • 사용자 이름(sa)가 더이상 설정되지 않는다
  • sa를 사용하려면 spring.datasource.username=sa 를 설정해야 한다
  • 사용자 이름이 명시 된 db는 더이상 임베디드 db로 간주되지 않는다
  • 따라서 이를 이전처럼 사용하고자 한다면 spring.datasource.initialization-mode 옵션으로 조절해야 한다

더 이상 사용자 정의된 MongoClientSettings 가 정의되지 않는다

  • 더 이상 auto-configuration 으로 정의되지 않으니, Bean으로 별도 정의해서 사용하도록 한다

Logback Configuration Properties

  • Logging properties 명시가 변경되었다
    • logging.pattern.rolling-file-namelogging.logback.rollingpolicy.file-name-pattern
    • logging.file.clean-history-on-startlogging.logback.rollingpolicy.clean-history-on-start
    • logging.file.max-sizelogging.logback.rollingpolicy.max-file-size
    • logging.file.total-size-caplogging.logback.rollingpolicy.total-size-cap
    • logging.file.max-historylogging.logback.rollingpolicy.max-history
    • ROLLING_FILE_NAME_PATTERNLOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN
    • LOG_FILE_CLEAN_HISTORY_ON_STARTLOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START
    • LOG_FILE_MAX_SIZELOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE
    • LOG_FILE_TOTAL_SIZE_CAPLOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP
    • LOG_FILE_MAX_HISTORYLOGBACK_ROLLINGPOLICY_MAX_HISTORY

Default Servlet 등록

  • 최근 대부분의 어플리케이션에선 DispatcherServlet을 사용하기에 더 이상 DefaultServlet 을 등록하지 않는다.
  • server.servlet.register-default-servlet=true 옵션으로 Default 서블릿을 등록할 수 있다

HTTP traces가 더이상 cookie header를 기본으로 포함하지 않는다


Undertow Path on Forward

  • Servlet Spec을 준수하기 위해, Undertow 기본값을 재정의한다

Neo4j

  • 반응형 레포지토리를 지원하여 Spring Data의 유무에 상관없이 Neo4j를 사용할 수 있다
  • Neo4j support가 대폭 개편되었다
  • spring.data.neo4j.* 의 여러 properties가 제거되었다

Hazelcast 4 지원


Elasticsearch RestClient

  • low-level Elasticsearch RestClient는 더이상 auto-configured 되지 않는다
  • 대신, RestHighLevelClient 가 auto-configured 된다
  • 대부분의 유저가 low-level client를 사용하지 않을 것으로 생각하여, 해당 변경사항은 영향 범위가 아닐 것으로 추측한다

R2DBC

  • R2DBC 가 spring-r2dbc 모듈로 이관되었다
  • R2dbcEntityTemplate 을 통해 리액티브 R2DBC 엔티티 사용을 간소화 할 수 있다

Flyway

  • Flyway 7로의 업그레이드는 callback ordering에 대한 몇가지 변경사항을 포함한다
  • Flyway 5를 사용한다면, Flyway 6로 먼저 업그레이드 해야한다

Removal of Plugin Management for Flatten Maven Plugin

  • Springboot는 더이상 Flatten Maven Plugin (flatten-maven-plugin)을 지원하지 않는다

Version management for exec-maven-plugin

  • exec-maven-plugin에 대한 버전 관리가 제거 되었다
    • exec-maven-plugin은 Maven 빌드 프로세스 중에 외부 명령을 실행하거나, Java 클래스를 실행하는 데 사용
  • 해당 plugin을 사용 중인 경우, 자체 pluginManagement에서 버전을 지정해야 한다

Spring Boot Gradle Plugin - bootJar - mainClassName 변경

  • bootJar { mainClassName ‘xxx’ } → bootJar { mainClass ‘xxx’}

Deprecations from Spring Boot 2.2 and 2.3

  • Springboot 2.2에서 Deprecated 된 Code가 모두 제거된다
  • Springboot 2.3에서 Deprecated 된 Code는 Springboot 2.5에서 제거 될 예정이다

Spring Framework 5.3

  • SpringBoot 2.4는 Spring Framework 5.3을 사용한다

Spring Data 2020.0

  • SpringBoot 2.4는 Spring Data 2020.0 버전을 포함한다\

Java 15 Support

  • SpringBoot 2.4는 Java 15를 지원한다
  • SpringBoot 2.4는 Java 8을 그래도 아직까지는 지원한다. (조금이지만)

Custom property name Support

  • property 설정을 가져올 때, Class의 생성자에서 @Name 어노테이션으로 property를 주입 받을 수 있다

Layered jar enabled by default

  • Layerd jars가 기본적으로 활성화 된다

Importing Additional Application Config

  • application.propertiesapplication.yml 에서 추가 config 파일을 가져올 수 있다
  • spring.config.import 키워드로 사용 가능하다
  • 단, 이는 spring.config.use-legacy-processing 옵션을 true 로 설정하지 않은 경우에 한해서 적용 가능하다

Volume Mounted Config Directory Trees

  • spring.config.import 프로퍼티는 Kubernetes에서 일반적으로 사용 되는 구성 트리를 가져오는 데에도 사용이 가능하다

File Extention 없이 Config File 추가가 가능하다

  • /etc/mycong.yaml 파일을 load하고 싶으면 spring.config.import=/etc/myconfig.yaml 키워드를 사용한다

Origin Chains

  • Origin 인터페이스가 getParent() 메서드로 업데이트 되었다

Docker/Buildpack Support

  • 생성 된 Docker Image를 Docker Registry에 publish 할 수 있게 되었다
    • maven plugin : spring-boot:build-image
    • gradle plugin : bootBuildImage
  • 사용자 이름/비밀번호 및 Token 기반 인증이 모두 지원된다
  • Default Image Builder가 Paketo Image로 업그레이드 되었다
      1. Image Registry가 Google Container Registry → Docker Hub 으로 변경

Maven/Gradle Buildpack Support

  • 모든 프로젝트 Module 종속성을 “application” 레이어에 배치한다
  • 즉, 빌드에 여러 프로젝트 Module이 있는 경우, 모두 동일한 레이어에 배치된다

Redis Cache Metrics

  • Redis Cache Metric을 수집할 수 있다
  • 수집 가능한 Metric
    • gets
    • puts
    • deletes
    • hits
    • misses
    • pending request 수
    • rock wait duration
  • spring.cache.redis.enable-statistics 옵션을 true로 설정

Web Configuration Properties

  • Spring MVC 와 Spring WebFlux에 locale과 resource location을 설정할 수 있다
    • spring.web.locale
    • spring.web.locale-resolver
    • spring.web.resources.*
  • actuator management endpoint를 설정할 수 있다
    • management.server.base-path
  • Deprecated 되는 설정들
    • spring.mvc.locale
    • spring.mvc.locale-resolver
    • spring.resources.*
    • management.server.servlet.context-path

@WebListener 클래스가 자체적으로 Servlet과 Filter를 등록할 수 있는 방식으로 변경

  • SpringBoot 2.4부터는 더 이상 동적인 Servlet 등록을 사용하지 않는다
  • @Autowired와 같은 의존성 주입을 더 이상 사용할 수 없다 → @Component 어노테이션을 대신 사용

Slice Test for Cassandra

  • @DataCassandraTest 어노테이션에 기반한 Cassandra 테스트를 지원한다

Flyway 7

  • 신규 properties가 추가된다
    • spring.flyway.url
    • spring.flyway.user
    • spring.flyway.password

Configuration property for H2 Console’s web admin password

  • 이젠 spring.h2.console.settings.web-admin-password property를 통해 H2 Web Console의 Admin 패스워드를 설정할 수 있다

CqlSession-Based Health Indicators for Apache Cassandra

  • 신규 CqlSession 기반 health indicator가 추가되었다
    • CassandraDriverHealthIndicator
    • CassandraDriverReactiveHealthIndicator
  • 기존에 존재하던 Spring Data Cassandra 베이스의 health indicator는 deprecated 되었다

Spring Security SAML Configuration Properties


Failure Analyzers

  • ApplicationContext 가 생성되기 전 (Environment 프로세싱 중에) FailureAnalizer를 고려할 수 있다
    • BeanFactoryAware , EnvironmentAware 분석기는 AppilcationContext 생성 이후에 사용할 수 있다

Jar Optimizations

  • SpringBoot jars 생성 시, 빈 스타터 종속성이 자동으로 제거 된다

그 외 자잘한 사항들

  • startup 시에, JVM version이 logging 된다
  • logging.config 설정에 따라 후행 공백이 자동으로 제거 된다
  • R2DBC pool support가 추가 구성 속성을 노출한다
  • 특정 예외를 무시하도록 LdapTemplate 예외 처리를 구성할 수 있다
  • MVC, Webflux에서 ISO offset date time 포맷을 지원한다
  • request mapping path pattern 을 파싱하기 위해 새로운 PathPatternParser를 선택할 수 있도록 구성 속성이 추가 된다
  • @DurationUnit, @DataSizeUnit , @PeriodUnit 의 생성자 파라미터로 @ConstructorBinding 어노테이션을 사용할 수 있다
  • auto-configured 된 RabbitConnectionFactoryCredentialsProviderCredentialsRefreshService 의 존재여부를 확인 한다
  • health group은 ‘제외’ 로만 정의할 수 있다
  • management.health.db.ignore-routing-data-sources 옵션으로 AbstractRoutingDataSource 를 무시할 수 있다
  • SAML 의 localEntityIdTemplate 을 구성할 수 있다
  • HTTP trace는 나노초 단위로 측정 된다
  • Liquibase 변경 로그가 누락된 경우, FailureAnalyzer 가 의미 있는 메세지를 제공한다
  • Netty의 request decoder는 server.netty.* 속성으로 커스터마이징 할 수 있다
  • Prometheus PushGateway를 위한 기본적인 인증을 지원한다
  • spring.redis.client-type 속성을 사용할 때, Jedis와 Lettuce를 선택할 수 있다
  • spring.redis.lettuce.cluster.refresh.dynamic-sources 속성으로 Redis Cluster dynamic sources refresh를 허용할 수 있다
  • Logback, Log4j 의 캐릭터셋을 지정할 수 있다
    1. logging.charset.console
    1. logging.charset.file
  • Gradle 6.7 이상 버전을 사용할 경우, Gradle의 configuration cache를 지원 한다

의존성 업그레이드

  • Spring AMQP 2.3
  • Spring Batch 4.3
  • Spring Data 2020.0
  • Spring Framework 5.3
  • Spring Integration 5.4
  • Spring HATEOAS 1.2
  • Spring Kafka 2.6
  • Spring Retry 1.3
  • Spring Security 5.4
  • Spring Session 2020.0

third-party 종속성 업그레이드

  • Artemis 2.13
  • AssertJ 3.18
  • Cassandra Driver 4.7
  • Elasticsearch 7.9
  • Flyway 7
  • Jersey 2.31
  • JUnit 5.7
  • Liquibase 3.10
  • Lettuce 6.0
  • Micrometer 1.6
  • Mockito 3.4
  • MongoDB 4.1
  • Oracle Database 19.7
  • Reactor 2020.0
  • RSocket 1.1
  • Undertow 2.2

Deprecations

  • ConfigFileApplicationListenerConfigDataEnvironmentPostProcessor 로 대체되었다
  • contextClass와 관련된 SpringApplicationBuilderSpringApplication 메서드는 contextFactory를 사용하는 대안을 위해 더 이상 사용되지 않는다
  • CloudFoundryVcapEnvironmentPostProcessor의 일부 메서드는 EnvironmentPostProcessor 업데이트와 함께 작동하도록 사용되지 않는다
  • LoggingSystemProperties의 Logback 상수는 LogbackLoggingSystemProperties를 위해 더 이상 사용되지 않는다.
  • isEagerInitFilters/setEagerInitFiltersisEagerFilterInit/setEagerFilterInit
  • BootstrapContext 지원을 위해 ApplicationEnvironmentPreparedEvent , ApplicationStartingEvent , SpringApplicationRunListener 의 몇몇 메서드가 deprecaed 되었다
  • 몇몇 Srping MVC , servlet의 properties가 deprecated 되었다
  • Spring Data Cassandra를 사용하는 Health indicator는 raw driver를 사용하는 표시기를 위해 더 이상 사용되지 않는다.

반응형

댓글