개발/Spring

[Spring] Spring Boot v2.3

nova_dev 2022. 10. 14. 00:00
반응형

Spring Boot 2.3 Release Notes · spring-projects/spring-boot Wiki

Spring Boot 2.2에서 업그레이드된 내용

  • Gradle 6.3 이상 지원 (5.6.x는 지원은 하지만 deprecated 됨.)

1. Validation Starter가 WebStarter에 더 이상 포함되지 않는다.

webstart에서 빠졌기 때문에 별도로 gradle에 써주어야 함.

dependencies {
  ...
  implementation 'org.springframework.boot:spring-boot-starter-validation'
}

2. 기본적으로 고유한 DataSource 이름을 사용해야 한다.

기본적으로 DataSource 이름이 자동 구성될 때를 위해 고유한 이름이 생성된다.

spring.datasource.generate-unique-namefalse 로 설정해서 고유한 이름 설정을 끌 수 있음.

3. Spring Boot 2.3은 Spring Data 주요 릴리즈와 함께 제공되므로 MongoDB 또는 JDBC 등을 사용할 때 약간의 주의점이 있음.

MongoDB

  1. 이 릴리즈는 MongoDB4를 사용해야 함.
  2. 명령형 드라이버(Imperative driver)를 사용할 때 MongoClientSettingsBuilderCustomizer 빈이 적용됨. (이전에는 reactive case에만 적용되었음.)
  3. 이를 통해 spring-boot-starter-data-mongodb-reactive 를 사용할 때 더 이상 비 반응형 인프라(non-reactive infrastructure)가 제공되지 않음. MongoOperations를 사용해야 한다면 spring-boot-starter-data-mongodb 를 추가할 것.

Spring Data JDBC 2.0

  • 기본적으로 이제 식별자를 기본적으로 사용한다. 이 기능은 RelationalMappingContext에서 setForceQuote(false)로 비활성화할 수 있다.
  • JDBC 2.0 관련 자세한 내용은 아래 문서를 참고한다.

Migrating to Spring Data JDBC 2.0

Jackson

4. ApplicationContextRunner 는 기본으로 빈 재정의를 비활성화함.

SpringApplication과의 일관성을 위해 ApplicationContextRunner는 기본적으로 빈 재정의를 비활성화함.

만약 테스트를 위해 빈 재정의를 사용해야 한다면 withAllowBeanDefinitionOverriding 를 활성화해야 함.

5. ActiveProfiles 로 여러 프로필을 활성화할 수 있음.

@ActiveProfile에서 쉼표로 여러 프로필을 지원하는 기능을 쓸 수 있음.

여러 프로필을 활성화하려면 @ActiveProfiles({"p1","p2"}) 과 같이 각 프로필 이름을 별도의 값으로 쓴다.

6. WebServerInitializedEvent and ContextRefreshedEvent

graceful shutdown을 지원하기 위해 웹 서버 초기화는 이제 refresh processing이 완료된 직후가 아니라 application context의 refresh process가 완료된 이후 수행된다.

즉, 결과적으로 WebServerInitializedEvent는 이제 ContextRefreshedEvent보다 먼저 시작된다.

7. Deprecated 메서드 삭제

Spring Boot 2.2에서 deprecated 되었던 클래스, 메서드 및 속성이 이번 릴리즈에서 제거되었기 때문에 더 이상 사용되지 않는 메서드의 호출이 있는지 확인한다.

많은 것들이 삭제되었기 때문에 spring-boot-properties-migrator 를 종속성으로 추가하면 애플리케이션 환경을 분석하고 시작 시 런타임 속성을 일시적으로 마이그레이션 한다.

runtime("org.springframework.boot:spring-boot-properties-migrator")

마이그레이션이 완료된 이후 위 종속성은 제거한다.

8. Spring Boot 2.3에서는 Java 14를 지원한다.

9. Docker Image에 포함될 layered jars를 빌드할 수 있다.

레이어링으로 jar 안의 컨텐츠들을 분리해서 Docker 이미지를 분리할 수 있다.

jar를 레이어드로 실행하려면 아래와 같이 사용한다.

$ java -Djarmode=layertools -jar my-app.jar

10. 구성 속성 경로에 whildcard(*)를 사용할 수 있다.

/config/mysql/application.properties/config/redis/application.properties

속성을 분리해서 각각 사용한다면, 해당 속성들을 config/*/ 와 같이 whildcard location을 사용할 수 있다.

11. Graceful Shutdown

Tomcat 등의 4개의 웹 서버에서 반응형 및 서블렛 기반 웹 응용 프로그램 모두에서 Graceful Shutdown이 지원된다. 사용하려면 server.shutdown=graceful 를 활성화한다. 이제 종료 시 웹 서버는 더 이상 새 요청을 허용하지 않고 활성 요청이 완료될 때까지 유예 시간을 기다린다. 유예 시간은 spring.lifecycle.timeout-per-shutdown-phase 를 통해 구성할 수 있다.

12. Liveness와 Readiness Probes

Spring은 어플리케이션의 alive 여부와 트래픽을 처리할 준비가 되어있는지 여부를 추적한다.

활성 상태(/actuator/health/liveness) 및 준비 상태(/actuator/health/readiness)를 노출하도록 엔드포인트를 구성할 수 있다. management.health.probes.enabled=true 속성을 사용하면 된다.

해당 속성을 쿠버네티스 실행 시 자동으로 수행한다.

자세한 내용은 this blog post 블로그를 참고한다.

13. WebFlux 어플리케이션을 위한 base path 경로

이제 spring.webflux.base-path 속성을 사용하여 webflux 어플리케이션 용 웹 핸들러의 기본 경로를 설정할 수 있다.

14. 웹 어플리케이션의 Date-Time 변환

웹 애플리케이션의 시간 및 날짜-시간 값 변환은 이제 애플리케이션 속성을 통해 구성할 수 있다 이는 날짜 값 형식 지정에 대한 기존 지원을 보완한다.

15. Native Kafka 메트릭

Kafka 메트릭은 자동 구성된 ConsumerFactory 및 ProducerFactory에 의해 생성된 소비자 및 생산자를 위해 기본적으로 게시된다. 커스텀 팩토리에서 생성된 컴포넌트에 대한 메트릭을 생성하려면 다음 예제와 같이 리스너를 추가해야 한다.

factory.addListener(new MicrometerConsumerListener<>(meterRegistry));

16. Dependency Upgrades

Spring에서의 신규 버전 디펜던시

Spring Data Neumann
Spring HATEOAS 1.1
Spring Integration 5.3
Spring Kafka 2.5
Spring Security 5.3
Spring Session Dragonfruit

주목할만한 Dependency

Artemis 2.12
AssertJ 3.16
Cassandra Driver 4.6
Couchbase Client 3.0
Elasticsearch 7.6
Flyway 6.4
Hibernate Validator 6.1
Infinispan 10.1
Jackson 2.11
JUnit Jupiter 5.6
Kafka 2.5
Kotlin 1.3.72
Lettuce 5.3
Micrometer 1.5
Mockito 3.3
MongoDB 4.0
QueryDSL 4.3

이와 관련된 주요 변경사항은 링크를 참고한다.

반응형

'개발 > Spring' 카테고리의 다른 글

[Spring] Spring Boot v2.6  (0) 2022.10.17
[Spring] Spring Boot v2.4  (0) 2022.10.15
[Spring] Spring Boot v2.2  (0) 2022.10.13
[Spring] Spring Framework 6.0과 Spring Boot 3.0 Preview  (0) 2022.10.12
Spring 트랜잭션 처리  (0) 2021.04.18