Develop/Spring

Spring Framework 6.0, Spring Boot 3.0 Preview

eroul-ri 2023. 7. 13. 13:15

Spring의 메이저 버전이 변경되면서 많은 것들이 달라졌는데, 어떤 것들이 변경되었는지 알아보려고 합니다.

 

Spring Boot 3.x, Spring Framework 6.x

  • Spring Boot 2.7.x 버전대의 유지보수 및 보안 업데이트는 2023년 11월에 종료됩니다.
Spring Boot 3.0
Spring Boot 3.0
Spring Framework 6.0

 

어떤 것들이 변할까요?

추가 종속성

  • Kotlin 1.7+
  • Lombok 1.18.22+(JDK 17 Support)
  • Gradle 7.3+

 

JDK17+, JakartaEE9+

  • Java EE API → Jakarta EE 9+ 로 이동
    • Servlet, JPA 등 일부 namespace javax. → jarkarta로 변경
      • Hibernate ORM 5.6.x 버전부터 hibernate-core-jakarta 사용
      • javax.persistence에서 jakarta.persistence로 변경
      • javax.servlet에서 jakarta.servlet으로 변경 필요 (import)
  • Jakarta EE9 및 Jakarta EE 10 API 런타임 호완성
  • 최신 웹 서버와의 호완(Tomcat 10.1 Jetty11, Undertow 2.3)

 

HTTP API RFC 7087 스펙 지원

  • Problem Details for HTTP APIs
    • 발생한 에러를 JSON 형태로 상세하게 응답하기 위한 표준
    • MIME type application/problem+json
  • https://www.rfc-editor.org/rfc/rfc7807 공식 문서 참고

 

HTTP/RSocket Interface Client 지원

 

JDK 19 가상스레드 지원

https://eroul-ri.tistory.com/27

Project Loom’s Virtual Thread(가상 스레드)

운영체제 기반의 전통적인 JAVA Thread 단점 하나의 JAVA Thread는 하나의 운영체제 스레드, 1:1 매핑 Thread Pool에 설정한 만큼의 Thread가 Pool에 담겨 하나의 Thread는 하나의 요청을 처리하는 방식 Thread 생

eroul-ri.tistory.com

 

@RequestMapping 자동 탐색 종료

  • 더이상 자동탐색 하지않음
  • 반드시 @Controller 를 사용해야 함

 

AOT 엔진 도입

Spring의 AOT?

  • 빌드 시 스프링 애플리케이션을 분석하고 최적화하는 도구
  • GraalVM Native Configuration이 필요로하는 Reflection Configuration을 생성
  • 프로젝트 실행전 바이트 코드를 해석해 빠른 시작 속도를 제공
  • 컴파일시 데드코드를 제거하여 메모리 사용량 감소

 

Native 기능 확대, GraalVM Spring Native 공식 지원

 

RPC 지원 종료

 

Logback, Log4j2 날짜, 시간 포맷팅 표준 ISO-8601 방식 사용

 

사용하지 않는 Deprecated 코드 제거

 

Micrometer Observation API 자동 구성, Observability 공식 지원

 

Trailing Slash Matching Configuration 기본지원 종료

  • 마지막에 붙는 / 매칭 지원안함(별도 옵션 사용)
@GetMapping("/v1/apis/")
@GetMapping("/v1/apis")

 
 

 

Spring Boot 3 마이그레이션 방법

  1. Upgrade to Java 17
    • JDK 17로 업그레이드
  2. Upgrade to the Latest Spring Boot 2.7.x
    • 마이그레이션은 순차적으로 진행
    ex) Spring Boot 2.4.x
  3. Spring Boot 2.5 → 2.6 → 2.7
  4. Check for Calls to Deprecated Code(-Werror)
    • 사용하지 않는 Deprecated 코드는 제거
  5. Migrate from Legacy application.properties and application.yaml Processing
    • yml, properties 파일에서 spring.config.use-legacy-processing를 제거
    • spring.config.use-legacy-processing은 더이상 지원하지 않아요
  6. Use Spring MVC’s PathPatternParser
    • spring.mvc.pathmatch.matching-strategy를 계속 지원하지만 PathPatternParser가 더 나은 성능을 지원
  7. Check if Third-party Projects Have Jakarta EE 9 Compatible Releases
    • Java EE와 Jakarta EE API를 혼합하는 것은 불가능
    • Hibernate, Thymeleaf, Tomcat, Jetty, Undertow는 이미 Jakarta EE 9로 전환되었음.
    • 타사 라이브러리가 jakarta.*를 사용하고 있는지 확인
  8. Check if Third-party Projects have Updated Spring Compatible Releases
    • Spring Framework 6.0 은 이전 세대 바이너리와 호환되지 않음.
    • 타사 Jar를 사용하고 있는 경우, Spring Framework 6 호환을 반드시 확인해야해요
  9. Try the Spring Boot Milestones
  10. Consider Commercial Support
    • Spring Boot 2.7 의 대응은 2023년 11월이 마지막 릴리즈 계획
    • Spring Boot 2.7에 대한 상업적 지원 2025년 2월까지 사용

 
 
출처
https://spring.io/projects/spring-framework#support
https://spring.io/projects/spring-boot#support
https://github.com/spring-projects/spring-framework/wiki/What's-New-in-Spring-Framework-6.x/
https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0 https://www.baeldung.com/spring-boot-3-spring-6-new
https://www.cesarsotovalero.net/blog/aot-vs-jit-compilation-in-java.html