스프링 부트 3 살펴보기
Spring Boot = P.L + Build Tool + Spring Framework
I’m honeymon.
public class Honeymon {
private static final String NAME = "Honeymon(김지헌)";
private static final String EMAIL = "ihoneymon@gmail.com";
private static final String COMPANY = "Kurly";
private static final String DESCRIPTION = """
Spring Boot 3.0 출시에 맞춰
- Java
- 스프링 프레임워크 6
- 스프링 부트 3
- 정리
의 순서로 설명을 진행하겠습니다.
""";
}
Spring Boot 3.0 요구사항
Java
Java 10 - Local Variable Type Inference
변수명은 유용하게(의미있게)
Java 17
Version | 기능 |
10 | |
14 | |
15 | |
16 | |
17 |
Java 10 - Local Variable Type Inference
지역변수 범위는 최소화(Effective Java 3th: Item 57)
Java 10 - Local Variable Type Inference
지역변수 범위는 최소화(Effective Java 3th: Item 57)
Java 10 - Local Variable Type Inference
초기화에서 충분한 정보를 제공하는 경우!
Java 10 - Local Variable Type Inference
연속되거나 내재화된 표현을 분리할 때
문자열 목록에서 문자별로 묶고 갯수 확인
갯수를 확인한 문자열 중에 가장 갯수가 많은 키값 확인
Java 10 - Local Variable Type Inference
Java 10 - Local Variable Type Inference
인터페이스 프로그래밍에 대한 걱정은 하지마세요.
Java 10 - Local Variable Type Inference
다이아몬드 연산 혹은 제네릭 메서드 사용은 조심!
Java 10 - Local Variable Type Inference
다이아몬드 연산 혹은 제네릭 메서드 사용은 조심!
Java 14 - Switch Expression
Java 14 - Switch Expression
“Case L:” 레이블
Java 14 - Switch Expression
“Case L -> ” Label
Java 14 - Switch Expression
“Case L” & `yield`
Java 14 - Switch Expression
“Case L” & `yield`
Java 14 - Switch Expression
Java 14 - Switch Expression
Java 15 - Text Block
Java 15 - Text Block
Java 15 - Text Block
Java 15 - Text Block
Java 15 - Text Block
마지막 텍스트 블록 닫는 위치에 따라서 줄바꿈(\n) 추가가 결정됨
Java 16 - Records
레코드(record) 선언시
순수한 데이터 이송(Data carrier) 역할 의도
final 필드
Java 16 - Records
레코드 클래스 정식 생성자(Canonical Constructor)
: 필드 초기화 필요함
Java 16 - Records
레코드 클래스 압축 생성자(compact Constructor)
: 필드 초기화 필요없음
압축 생성자가 종결되는 시점에서 필드할당
Java 16 - Records
레코드 클래스 압축 생성자(compact Constructor)
: 필드 초기화 필요없음
압축 생성자가 종결되는 시점에서 필드할당
Java 16 - Records
정적(static) 필드, 정적 초기화, 정적 메서드 사용가능
Java 16 - Records
인스턴스 초기화는 허용되지 않음
Java 16 - Records
Jackson 직렬화(Serialization)는 2.12.3 자동지원, 이전에는…
Java 16 - Pattern Matching for instanceof
class casting 을 줄일 수 있게 되었음
Java 16 - Pattern Matching for instanceof
패턴 변수 범위는 instanceof 가 true 인 경우 적용
Java 16 - Pattern Matching for instanceof
패턴 변수 범위는 instanceof 가 true 인 경우 적용
Java 17 - Sealed Class
이름 그대로 ‘봉인된(Sealed) 클래스': 사용할 수 있는(같은 모듈 혹은 패키지에 있는) 클래스를 지정한다.
Java 17 - Sealed Class
Spring Framework 6
Spring Framework 6.0
Spring Framework 6.0
Spring Framework 6.0
Spring Framework 6.0 - Baseline
Jakarta EE 9 Release plan!
Spring Framework 6.0 - Baseline
Jakarta EE 10(Tomcat 10.0.X 지원종료로 Jakarta EE 9 에서 변경, Java 11 최소)
Spring Framework 6.0 - Baseline
조금 더 자세하고 이해하기 쉬운 글을 찾으신다면!!
Spring Framework 6.0 - Baseline
Jakarta EE: namespace 변경대응 IntelliJ 지원
Refactor > Migrate Packages and Classes > Java EE to Jakarta EE
Spring Framework 6.0 - General Core
스프링 애플리케이션을 심층분석하여
GraalVM에 맞춰 애플리케이션을 변환하고 최적화(Spring Native)
Spring Framework 6.0 - General Core
애플리케이션 바이트 코드, 클래스패스, spring.factories, 애플리케이션 속성 을 분석하여 최적화된 Native 구성을 추론한다(그레이들, 메이븐 플러그인 제공).
Spring Framework 6.0 - General Core
AOT 를 통해 새롭게 Spring Native 도입하면…
… 하지만 뭔가 해야할 게 많은 것 같다…
Spring Framework 6.0 - Data Access and Transactions
Jakarta Persistence 3.0.0
Spring Framework 6.0 - Data Access and Transactions
Jakarta Persistence 3.1.0
Spring Framework 6.0 - Data Access and Transactions
Spring Framework 6.0 - Data Access and Transactions
Spring Framework 6.0 - General Web
HTTP interface(feign과 유사) - 프록시 생성해서 사용가능…!! ㅡ0-)!
Spring Framework 6.0 - General Web
@HttpExchange 를 타입레벨(type level) 이용해서 모든 메서드 제공
Spring Framework 6.0 - General Web
RFC 7807 - “Problem Details for HTTP APIs”
Spring Framework 6.0 - General Web
Jackson 2.14.1
Jakarta Servlet 6.0
Spring Framework 6.0 - Spring MVC
PathPatternParser - 후행 슬래시(trailing slash, URL 마지막 /) 허용하지 않음
GET /some/greeting/ != GET /some/greeting
임시로 이렇게 사용
Spring Framework 6.0 - Spring WebFlux
Spring Framework 6.0 - Observability
Spring Framework 여러 부분에서 Micrometer Observation 사용한 직접계측
Spring Framework 6.0 - Testing
Spring Framework 6.0 - Upgrade
Jakarta EE 9 적용되면서 변경되는 네임스페이스 변경 신경쓰기
https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-6.x
Spring Boot 3
Spring Boot 3.0
Spring Boot 3.0 - First-class Native Support
Spring Boot 3.0.0-M1(2022-01-21)
Spring Boot 3.0.0-M2(2022-03-25)
Spring Boot 3.0.0-M3(2022-05-20)
Spring Boot 3.0.0-M3(2022-05-20)
Spring Boot 3.0.0-M4(2022-07-21)
Spring Boot 3.0.0-M5(2022-09-23)
Spring Boot 3.0.0-RC1(2022-10-21)
Spring Boot 3.0.0-RC2(2022-11-11)
Spring Boot 3.0.0 GA(2022-11-24)
정리
Java
정리
Spring Framework 6.0
정리
Spring Boot 3.0
2.2.X
2.3.X
2.4.X
2.5.X
2.6.X
2.7.X
3.0.X
2.2.0.RELEASE
2.3.0.RELEASE
2.4.0
2.5.0
2.6.0
2.7.0
3.0.0
2.2.13.RELEASE
2.3.12.RELEASE
2.4.13
2.5.14
2.6.14
2.7.6
Latest
Java 17
Java 11
Java 17(&& Jakarta EE namespace 변경)
. Jakarta EE namespace 변경(javax -> jakarta)
Gradle 7.5 이상
. 7.5.1 - 암시적 의존성(implict dependency) 발생
Maven 3.5 이상
JEP 374 - Deprecate and Disable Biased Locking(JDK 15) 관련 확인
Spring Boot 3.0 Migration Guide
Jackson 2.14.0 메모리 누수(2.14.1 업글)
MariaDB JDBC Connector 3.X - AWS aurora 옵션 제거
기본 업데이트 전략
0단계: Spring Boot Dependencies 활용
1단계: minor 버전 기준 최신 패치버전으로 변경
2단계: minor 버전을 1 올리고 해당 minor 버전 기준 최신 패치버전으로 변경
. Common application properties 변경 확인
. 라이브러리 변경사항 확인
. 정상 작동 확인
예: 2.2.3.RELEASE -> 2.2.13.RELEASE -> 2.3.12.RELEASE -> 2.4.0(application.yml spring.profiles) -> 2.4.1(정상작동 확인) -> 2.4.13 -> 2.5.14 -> 2.6.14 -> 2.7.6 -> Java 17 변경 후 확인 -> 3.0.X(namespace 변경: javax -> jakarta)
spring-boot-starter-validation 분리
Spring Boot 2.7.X 까지는 Java 11 기준으로 개발
Spring Boot 3.X 진입을 준비하는 시점에 Java 17로 변경하여 정상작동 확인
Spring Boot 3.X 진입하며 JakartaEE namespace 변경 대응 및 ‘Biased Locking’ 등 확인
2022년 11월 - 2.6.X EOL(End Of Life, 지원중단)
2023년부터는 2.7 이상으로 갑시다!
2.4.1
참고
Java
Jakarta
Jakarta Persistence & Hibernate
https://newsroom.eclipse.org/eclipse-newsletter/2022/march/what%E2%80%99s-new-jakarta-persistence-31
참고
Spring
Spring Native
끗! See you again!
궁금하신 것은 ihoneymon@gmail.com 으로 문의주세요.