Spring Boot 3 버전 개요
Spring Boot 3.0은 Java 애플리케이션 개발을 위한 경량 프레임워크인 Spring Boot의 최신 버전 중 하나입니다.
2022년 12월에 출시된 Spring Boot 3.0은 Spring Boot 2.x 버전에 대한 개선 사항을 제공하며, Spring Framework 6을 기반으로 하고 있습니다.
Spring Boot 3.0 버전은 12개월 간 151명의 개발자들이 5,700개 이상의 커밋을 완료한 결과물로, Spring Boot 2.0이 출시된 이후 5년이라는 기간이 지나 등장했습니다.
Spring Boot 3.0은 Spring Framework 6.0 및 GraalVM에 대한 지원을 제공하는 Spring Boot의 첫 번째 GA(General Availability) 버전입니다.
참고
Spring Boot 2.7.x 버전은 2023년 11월 이후 지원이 종료되었습니다. 그리고 2024년 1월 기준으로 현재 Spring Boot 3.2.2 버전이 최신 버전입니다.
Spring Boot 3 릴리즈 노트
Spring Boot 3의 주요 변경사항은 다음과 같습니다.
자바(Java) 호환성
Spring Boot 3에는 최소 버전으로 Java 17이 필요합니다. 현재 Java 8 또는 Java 11을 사용하고 있는 경우 Spring Boot 3 애플리케이션을 개발하려면 먼저 JDK를 업그레이드해야 합니다.
Jakarta EE 지원
Spring Boot 3은 모든 종속성을 위해 Java EE에서 Jakarta EE API로 마이그레이션되었습니다. Jakarta EE는 Java EE의 새로운 이름으로, Spring Boot 3은 이제 Jakarta EE를 지원합니다. 참고로 Jakarta EE는 엔터프라이즈 급 Java 기반 서버 사이드 애플리케이션을 개발하기 위한 표준을 의미합니다.
GraalVM Native 이미지 지원
이제 Spring Boot 3 애플리케이션을 GraalVM 기본 이미지로 변환하여 상당한 메모리 및 시작 성능 향상을 제공할 수 있습니다. GraalVM 네이티브 이미지 지원은 전체 Spring 포트폴리오에 걸쳐 수행된 주요 엔지니어링 노력이었습니다.
AOT(Ahead Of Time) 지원
AOT를 지원하여 애플리케이션 실행 속도를 향상시킵니다. AOT는 런타임 시 코드를 컴파일하는 것이 아니라, 빌드 시 코드를 컴파일하는 방식입니다. 이를 통해 애플리케이션 실행 속도를 향상시키고, 메모리 사용량을 줄일 수 있습니다.
Log4j2 개선 사항
Log4j2 지원은 프로필별 구성, 환경 속성 조회, Log4j2 시스템 속성 같은 기능이 확장 되었습니다.
향상된 @ConstructorBinding 감지
@ConfigurationProperties를 사용할 때 클래스에 매개변수화된 단일 생성자가 있으면 @ConstructorBinding 주석이 더 이상 필요하지 않습니다. 단, 생성자가 두 개 이상인 경우에는 @ConstructorBinding을 사용하여 Spring Boot에 사용할 생성자를 알려야 합니다.
Micrometer Observation API 자동 구성
Spring Boot 3은 Micrometer 1.10에 도입된 새로운 Observation API를 지원합니다. 새로운 ObservationRegistry 인터페이스를 사용하여 측정항목과 모든 추적에 대한 단일 API를 제공하는 Observation을 생성할 수 있습니다. 이제 Spring Boot는 ObservationRegistry 인스턴스를 자동으로 구성합니다.
Apache Kafka로 비동기 승인 활성화
Kafka에서 비동기 승인을 활성화하기 위한 새로운 구성 속성 spring.kafka.listener.async-acks가 추가되었습니다. 비동기 승인을 활성화하려면 속성을 true로 설정합니다. 이 속성은 spring.kafka.listener.async-mode가 manual 또는 manual-immediate로 설정된 경우에만 적용됩니다.
Elasticsearch 자바 클라이언트
새로운 Elasticsearch Java 클라이언트에 대한 자동 구성이 도입되었습니다. 기존 spring.elasticsearch.* 구성 속성을 사용하여 구성할 수 있습니다.
리액티브 프로그래밍 지원
Spring WebFlux 및 Project Reactor를 사용한 반응형 프로그래밍에 대한 지원이 향상되었습니다.
Spring MVC 및 WebFlux URL 일치 변경 사항
보안상 이슈로 /api/hello 와 /api/hello/ 는 더 이상 일치하지 않습니다.
REST Client 추가
Spring Boot 3.2에서는 webflux 의존성 없이도 사용할 수 있는 새로운 동기식 HTTP 클라이언트인 RestClient가 도입되었습니다.
Deprecated 코드 제거
사용되지 않는(Deprecated) 모든 코드가 제거됩니다.
Spring Boot 3.0에서 지원 중단
- @ConstructorBinding이 org.springframework.boot.context.properties 패키지에서 org.springframework.boot.context.properties.bind로 재배치되었습니다.
- JsonMixinModule 스캐닝 기반 생성자는 더 이상 사용되지 않습니다.
- ClientHttpRequestFactorySupplier는 ClientHttpRequestFactories로 대체되어야 합니다.
- Cookie comment 속성은 더 이상 지원되지 않습니다.
- RestTemplateExchangeTagsProvider, WebClientExchangeTagsProvider, WebFluxTagsProvider, WebMvcTagsProvider 및 관련 클래스는 ObservationConvention에 해당하는 항목으로 대체되었습니다.
- HealthContributor @Configuration 기본 클래스의 no-args 생성자는 더 이상 사용되지 않습니다.
- DefaultTestExecutionListenersPostProcessor 및 SpringBootDependencyInjectionTestExecutionListener는 Spring Framework의 ApplicationContextFailureProcessor를 위해 더 이상 사용되지 않습니다.
- Management.metrics.export.<product> 속성은 더 이상 사용되지 않으며 Management.<product>.metrics.export로 대체됩니다.
- post에 유리한 Management.prometheus.metrics.export.pushgateway.shutdown-Operation의 푸시 설정입니다.
- @AutoConfigureMetrics는 @AutoConfigureObservability를 위해 더 이상 사용되지 않습니다.
Spring Boot 2.x에서 3.x로 점프
Spring Boot 3 버전으로 업그레이드 작업을 진행하려면 아래와 같은 방식으로 하는 것을 추천드립니다.
- Java 버전을 최소 17로 업그레이드
- 외부 라이브러리에서 Jakarta EE 9를 호환하는지 확인
- 외부 라이브러리에서 Spring Framework 6을 호환하는지 확인
- Spring Boot 버전 업그레이드(순차적 버전 업그레이드 2.5.x → 2.6.x → 2.7.x → 3.0.x)
- Java EE를 Jakarta EE로 변경(오류가 발생하는 부분을 찾아 작업)
- Deprecated 코드를 찾아 제거(오류가 발생하는 부분을 찾아 작업)
- application.properties 또는 application.yml 파일 내용 수정(변경된 tree 구조 확인 후 수정)
정리
Spring Boot 3 버전은 Spring Boot 애플리케이션의 성능, 보안, 안정성을 향상시키고, 개발자의 생산성을 높이기 위한 다양한 기능과 개선 사항을 제공합니다.
레퍼런스(Reference)
'프로그램 개발(분석, 설계, 코딩, 배포) > 2.2.1 java' 카테고리의 다른 글
Spring Framework / Spring Boot의 차이 (1) | 2024.12.02 |
---|---|
spring 과 springBoot의 차이점 (0) | 2024.12.02 |
[Java] Spring Boot 2.x.x 버전 프로젝트 생성: 지원 종료 및 다운그레이드 (0) | 2024.11.30 |
JDK 버전과 Spring Boot 버전 정하기 (0) | 2024.11.30 |
Spring Boot 3 (Spring Framework 6) 무엇이 달라질까? (0) | 2024.11.30 |