Home Spring boot 3.0.0과 Spring Framework 6.x
Post
Cancel

Spring boot 3.0.0과 Spring Framework 6.x

GPT…아직은…

시작하기에 앞서 요즘 ChatGPT의 기능에 감동하는 중이다.아직은 완벽하진 않지만 어느정도 포인트를 잡아서 얘기한다.좀 쉬운 말은 확실히 잘 답변한다. 데이터가 더 쌓이고 경험이 쌓인다면 훨씬 좋아질꺼같다.그리고 클라우드 서비스를 쓴다면 WebFlux와 3.0.0은 선택이 아닌 필수다.

본론으로 돌아가서…

2022 11월 24일 Spring boot 3.0이 General Availability되었다고 한다. 주요 변경점으로는…

✔ ` 자바 17을 써라!` 17의 주요 특징으로는 Sealed class, Switch 성능개선, record 클래스가 있다.

✔ Spring Boot 3.0은 모든 dependencies에 대해 Java EE에서 Jakarta EE API로 마이그레이션 삼성 SDS 인사이트
(javax.* 에서 jakarta.* 로 변경) 상표권 이슈로 이름이 변경 되었다.
자주 사용하는 QueryDSL 설정도 javax.persistence.에서 jakarta.persistence.로 바꿔야한다. 레퍼런스 gitissue

1
2
3
4
5
6
dependencies {
    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"
}

또한 SecurityConfig에서 사용되던 메서드를 아래와 같이 변경해야 에러가 나지않는다고 한다. 공식 레퍼런스

1
2
3
authorizeRequests()  authorizeHttpRequests()
antMatchers()  requestMatchers()
regexMatchers()  RegexRequestMatchers()

✔ GraalVM 기반의 Spring Native가 3년간의 실험을 마치고 공식 지원을 시작
JVM대신 GraalVM을 사용하여 native app을 실행 가능하게 하며, 스타트업을 줄여주고 메모리 관리를 더 효율적으로 하게된다.
여기서 GraalVm은 Graal (가할)은 큰쟁반이라는 뜻은 지닌 불어이고 VM은 JVM 내부에서 실행된다는 뜻에서 생긴말이다. GraalVM은 JIT(Just-In-Time) 컴파일러를 사용하여 Java 및 JVM 기반 애플리케이션의 성능을 가속화할 수 있는 고성능 JDK이다.
GraalVM 정의 GraalVM, Spring Native (NHN)

메모리를 적게 사용하고 컴파일시 네이티브 이미지들이 빠르게 시작된다고 하니 클라우드 서비스를 진행한다면 고려해볼만한 기술인것 같다.

✔ 보안상 이슈로 @GetMapping(“/some/greeting”, “/some/greeting/”) 는 더 이상 일치하지 않는다.

그외에도…

✔ Spring Webflux 에서 Multipart form upload 스트리밍을 위한 PartEvent API 지원.

✔ HTTP/RSocket Interface Client를 제공

✔ HTTP API 에러 처리를 위한 RFC 7807 스펙을 지원.

✔ Spring Boot 2.7.x 는 2023년 11월까지 지원 예정

더 많은 내용은 여기를 클릭

Spring Boot 3.0.0 Migration 해보기

STEP 1. Java 17을 사용해야하기 떄문에 기존에 쓰고있던 환경변수 11대신 17을 설치해서 설정해야한다.

STEP 2. Build.gradle에 있는 plugins의 내용을 아래와 같이 바꿔준다.

1
2
3
4
5
6
plugins {
	id 'java'
	id 'org.springframework.boot' version '3.0.2'
	id 'io.spring.dependency-management' version '1.1.0'
	id 'org.graalvm.buildtools.native' version '0.9.18'
}

STEP 3. Project Settings -> Project structure의 프로젝트 SDK를 17이상으로 설정한다.
STEP 4. 그후 앞서 언급한 javax로 된 부분을 jakarta.*로 수정하면…

짜자잔….

후기

아직 많은 부분이 익숙하지 않고 어렵다. 하지만 분명 java 17의 변화의 바람이 불고 있다는 점과 클라우드 서비스를 기반으로 한다면 webflux에대한 공부도 해야겠다는 생각이 들었다.
모르는 용어도 많고 정말 공식문서를 단순 해석이 아닌 완전히 이해하는 날이 오길…

출처 및 인용

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes
https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-6.x/
https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0

This post is licensed under CC BY 4.0 by the author.