본문 바로가기

개발&코딩👨‍💻/Spring & java

Spring 6.0, Spring Boot 3.0 이전 버전과 달라지는 것들

반응형

스프링 5.x 버전과 Spring Boot 2.x 버전을 대부분의 현업 개발자 분들은 사용하고 있으실 텐데

최근 스프링 공식 홈페이지에서 Spring 6.0, Spring Boot 3.0 버전에 대한 설명이 올라왔다.

스프링은 늘 앞에 버전이 바뀌면 꽤 많은 것들이 변경되어왔다. 새로운 기능이 추가되거나

이전에 취약한 기능들이 스펙 아웃이 되었거나 이번엔 어떻게한 부분이 변경되는지 한번

같이 알아가 보자

 

Spring 5.x -> 6.0 달라지는 점

  • Java 17기반으로 변경
  • 일부 Java EE API 지원 종료
  • XML이 점차적으로 Spring에서는 사라지게 될 것
  • RPC 지원 종료
  • 새로운 AOT 엔진 도입 (밑에 설명 추가)
  • @Inject 같은 JSR에서 지원하던 어노테이션들이 jakarta.annotation 패키지의 어노테이션으로 변경
  • HttpMethod가 enum에서 class로 변경
  • Jakarta EE 9+로의 마이그레이션으로 인한 변경
    • Hibernate ORM 5.6.x 버전부터 hibernate-core-jakarta 사용
    • javax.persistence에서 jakarta.persistence로 변경
    • Tomcat 10, Jetty 11, Undertow 2.2.14 (undertow-servlet-jakarta도 포함)으로 업그레이드 필요
    • javax.servlet에서 jakarta.servlet으로 변경 필요 (import)
  • Commons FileUpload, Tiles, FreeMarker JSP support 같은 서블릿 기반 기능이 지원 종료됩니다.
    • multipart file 업로드 혹은 FreeMarker template view는 StandardServletMultipartResolver 사용을 권장
    • 이외에는 Rest 기반 웹 아키텍처 사용
  • Spring MVC와 Spring WebFlux에서 더 이상 type 레벨에서의 @RequestMapping을 자동 탐색하지 않음
    • interface의 경우에는 @RequestMapping을 붙여도 더 이상 탐색되지 않음
    • 따라서 Class에 붙이거나 interface에도 사용하고 싶으면 @Controller도 붙여야 함
    • spring-cloud-openfeign에서도 이것 때문에 interface레벨 @RequestMapping 지원 종료(Git Issue)
  • URL에서 마지막으로 나오는 / 매칭해주는 trailing slash matching configuration 기본적으로 지원하지 않음 (옵션 추가 시 사용 가능)

 

Spring Boot 2.x -> 3.0 달라지는 점

 

  • 최소 요구사항 변경 (M4 기준)
    • Gradle 7.5
    • Groovy 4.0
    • Jakarta EE 9
    • Java 17
    • Kotlin 1.6
    • Hibernate 6.1
    • Spring Framework 6
  • AOT maven, gradle 플러그인 제공
  • native 지원 기능 확대

Spring의 AOT란? (Ahead Of Time)

 

Spring AOT 엔진은 빌드 시 스프링 애플리케이션을 분석하고 최적화하는 도구입니다. 또한 AOT 엔진은 GraalVM Native Configuration이 필요로 하는 reflection configuration을 생성해줍니다. 이것은 Spring native 실행 파일로 컴파일 하는데 사용되고 이후에 애플리케이션의 시작 시간과 메모리 사용량을 줄일 수 있게 됩니다.

위 그림에서 보면 AOT가 Spring Boot 환경에서 하는 일들과 순서를 알 수 있습니다. 간단하게 얘기하자면 Bytecode를 분석하고 최적화해서 좀 더 실행하기에 빠르고 메모리적으로 효율적인 코드를 만듭니다.

 

(+ spring의 native-image는 JVM에서 실행되는 파일에 비해 빌드 시간은 길고 시작시간이 짧고 메모리는 적게 사용하게 된다.)

 

AOT 적용 효과

 

  • 런타임시 Spring 인프라를 적게 사용
  • 런타임 시 검증할 조건 수 감소
  • 리플렉션을 줄이고 프로그래밍적 Bean 등록 방식 사용

Spring의 AOT란? (Ahead Of Time)

 

Spring AOT 엔진은 빌드 시 스프링 애플리케이션을 분석하고 최적화하는 도구입니다. 또한 AOT 엔진은 GraalVM Native Configuration이 필요로 하는 reflection configuration을 생성해줍니다. 이것은 Spring native 실행 파일로 컴파일 하는데 사용되고 이후에 애플리케이션의 시작 시간과 메모리 사용량을 줄일 수 있게 됩니다.

 

위 그림에서 보면 AOT가 Spring Boot 환경에서 하는 일들과 순서를 알 수 있습니다. 간단하게 얘기하자면 Bytecode를 분석하고 최적화해서 좀 더 실행하기에 빠르고 메모리적으로 효율적인 코드를 만듭니다.

 

(+ spring의 native-image는 JVM에서 실행되는 파일에 비해 빌드 시간은 길고 시작시간이 짧고 메모리는 적게 사용하게 된다.)

 

AOT 적용 효과

 

  • 런타임시 Spring 인프라를 적게 사용
  • 런타임 시 검증할 조건 수 감소
  • 리플렉션을 줄이고 프로그래밍적 Bean 등록 방식 사용
반응형