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 설정 변경
- Profile 정의 방식 변경
- 기존 Springboot 2.3에서 위 두가지 파일만 사용하고 있었다면 신경쓸 필요 없는 변경사항이다
- spring.config.use-legacy-processing 옵션을 true로 준다면, Springboot 2.3과 동일한 방식으로 동작이 가능하다
- Yaml 파일 내에서 속성이 선언 된 순서대로 적용된다
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-name
→logging.logback.rollingpolicy.file-name-pattern
logging.file.clean-history-on-start
→logging.logback.rollingpolicy.clean-history-on-start
logging.file.max-size
→logging.logback.rollingpolicy.max-file-size
logging.file.total-size-cap
→logging.logback.rollingpolicy.total-size-cap
logging.file.max-history
→logging.logback.rollingpolicy.max-history
ROLLING_FILE_NAME_PATTERN
→LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN
LOG_FILE_CLEAN_HISTORY_ON_START
→LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START
LOG_FILE_MAX_SIZE
→LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE
LOG_FILE_TOTAL_SIZE_CAP
→LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP
LOG_FILE_MAX_HISTORY
→LOGBACK_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.properties
와application.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
- maven plugin :
- 사용자 이름/비밀번호 및 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
spring.security.saml2.relyingparty.registration.decryption.*
[spring.security.saml2.relyingparty.registration.acs.*](https://docs.spring.io/spring-boot/docs/2.4.0/api/org/springframework/boot/autoconfigure/security/saml2/Saml2RelyingPartyProperties.Registration.Acs.html)
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 된
RabbitConnectionFactory
는CredentialsProvider
및CredentialsRefreshService
의 존재여부를 확인 한다 - 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 의 캐릭터셋을 지정할 수 있다
-
logging.charset.console
-
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
ConfigFileApplicationListener
는ConfigDataEnvironmentPostProcessor
로 대체되었다contextClass
와 관련된SpringApplicationBuilder
및SpringApplication
메서드는contextFactory
를 사용하는 대안을 위해 더 이상 사용되지 않는다CloudFoundryVcapEnvironmentPostProcessor
의 일부 메서드는EnvironmentPostProcessor
업데이트와 함께 작동하도록 사용되지 않는다LoggingSystemProperties
의 Logback 상수는LogbackLoggingSystemProperties
를 위해 더 이상 사용되지 않는다.isEagerInitFilters
/setEagerInitFilters
→isEagerFilterInit
/setEagerFilterInit
BootstrapContext
지원을 위해ApplicationEnvironmentPreparedEvent
,ApplicationStartingEvent
,SpringApplicationRunListener
의 몇몇 메서드가 deprecaed 되었다- 몇몇 Srping MVC , servlet의 properties가 deprecated 되었다
- Spring Data Cassandra를 사용하는 Health indicator는 raw driver를 사용하는 표시기를 위해 더 이상 사용되지 않는다.
반응형
'개발 > SpringBoot' 카테고리의 다른 글
Spring Boot 2.5 -> 2.6 변경 사항 (0) | 2023.06.15 |
---|---|
Spring Boot 2.4 -> 2.5 변경 사항 (0) | 2023.06.12 |
Spring Boot 3.0 → 3.1 변경 사항 (0) | 2023.06.05 |
Spring Boot Release Notes 정리 시작 (0) | 2023.06.05 |
[SpringBoot/Gradle] ClassNotFound Exception (Feat. implementation & api) (0) | 2022.08.07 |
댓글