Spring 5.x, Boot 2.x -> Spring 6, Boot 3

minjjai·2023년 1월 13일
1

Spring 6, Boot 3에서 달라진 점

Spring 5.x -> 6.0

  • Java 17 기반으로 변경
  • 일부 Java EE API 지원 종료
  • XML이 Spring 에서는 점차적으로 사라지게 될 것
  • RPC 지원 종료
  • 새로운 AOT 엔진 도입
  • @Inject 같은 어노테이션들이 jakarta.annotaion 패키지로 변경
  • jakarta EE 로의 변경
    hibernate ORM 5.6.x 버전부터 hibernate-core-jakarta 사용
    영속성 어노테이션 패키지 이름 javax.persistence -> jakarta.persistence로 변경
    Tomcat 10, Jetty 11, Undertow 2.2.14 로 업그레이드 필요
    javax.servlet -> jakarta.servlet 으로 변경
  • url에서 마지막의 "/" 매칭 기능 지원 X("/home/" 과 "/home" 을 구분한다.)
@RestController
public class MyController {

  // 기존에는 아래 형식도 /some/greeting과 똑같이 매칭, 이제는 정확히 url을 써주어야 함
  @GetMapping("/some/greeting/")
  public String greeting {
    return "Hello";
  } 
}

Spring Boot 2.x -> 3.0

  • 최소 요구사항 변경
    Gradle 7.5
    Groovy 4.0
    Jakarta EE 9
    Java 17
    Kotlin 1.6
    Hibernate 6.1
    Spring 6
  • Spring Webflux
    MultipartForm upload 스트리밍을 위한 PartEvent API 를 지원
  • GraalVM 기반의 Spring Native 공식 지원
  • Servlet, JPA 네임스페이스 -> Jakarta 로 대체
    이전에 사용하던 JPA의 패키명은 javax.* 이었으나 jakarta.* 로 대체

Spring Boot 2버전에서 3으로 업데이트(변경)

1. JDK 17 이상으로 업그레이드

Spring Boot 3 에서는 JDK 17 미만의 버전은 지원하지 않는다.

2. Spring Boot 2.7.X 로 업그레이드 후 3으로

Spring Boot 3 버전으로 넘어가기 전, Spring Boot 2 버전대 중 가장 높은 버전으로 먼저 업그레이드 한 후, 3버전으로 업그레이드 하는 것이 좋다고 한다.
이유는 Spring Boot가 3버전으로 가면서 너무 많은 부분이 변경되어 2버전 중 가장 높은 버전으로 업그레이드 한 후, 테스트 진행을 하고 3버전으로 넘어가는 게 좋다고 한다.

2.7.x 버전으로 업그레이드 후, 테스트를 하며 Deprecation 된 코드는 제거해야 한다.
(이전 버전에서 Deprecation 된 코드 중 3버전으로 넘어가며 제거된 코드가 있기 때문)

3. 발생할 수 있는 컴파일 에러

javax -> jakarta

Java EE에서 Jakarta EE 로 전환되면서 생기는 에러.
javax 로 시작하는 패키명은 jakarta로 변경해준다.

  • Ex)
    javax.persistence.* -> jakarta.persistence.*
    javax.validation.* -> jakarta.validation.*
    javax.servlet.* -> jakarta.servlet.*
    javax.annotation.* -> jakarta.annotation.*
    javax.transaction.* -> jakarta.transaction.*

javax.sql., javax.crypto. 패키지는 jakarta로 변화가 없다.
Java EE에서 제공하는 패키지가 아닌 JDK 에서 제공하는 패키지이기 때문

참고 : javax에서 jakarta로의 전환

QueryDsl 설정

javax.persistence.*에서 jakarta.persistence.*로 변경되면서 QueryDsl관련 Gradle 혹은 maven 설정 변경이 필요하다.

  • build.gradle
dependencies {
    // Querydsl 설정
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"s
    //= Querydsl 설정
}

참고 : Github

Spring Security 변경

SecurityConfig에서 제거된 다음의 메서드를 변경해주어야 한다.

authorizeRequests() ➔ authorizeHttpRequests()
antMatchers() ➔ requestMatchers()
regexMatchers() ➔ RegexRequestMatchers()

참고 : spring.io

참고한 자료/블로그

profile
BackEnd Developer

0개의 댓글