Spring의 메이저 버전이 변경되면서 많은 것들이 달라졌는데, 어떤 것들이 변경되었는지 알아보려고 합니다.
Spring Boot 3.x, Spring Framework 6.x
- Spring Boot 2.7.x 버전대의 유지보수 및 보안 업데이트는 2023년 11월에 종료됩니다.
어떤 것들이 변할까요?
추가 종속성
- 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)
- Servlet, JPA 등 일부 namespace javax. → jarkarta로 변경
- 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
@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 마이그레이션 방법
- Upgrade to Java 17
- JDK 17로 업그레이드
- Upgrade to the Latest Spring Boot 2.7.x
- 마이그레이션은 순차적으로 진행
- Spring Boot 2.5 → 2.6 → 2.7
- Check for Calls to Deprecated Code(-Werror)
- 사용하지 않는 Deprecated 코드는 제거
- Migrate from Legacy application.properties and application.yaml Processing
- yml, properties 파일에서 spring.config.use-legacy-processing를 제거
- spring.config.use-legacy-processing은 더이상 지원하지 않아요
- Use Spring MVC’s PathPatternParser
- spring.mvc.pathmatch.matching-strategy를 계속 지원하지만 PathPatternParser가 더 나은 성능을 지원
- 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.*를 사용하고 있는지 확인
- Check if Third-party Projects have Updated Spring Compatible Releases
- Spring Framework 6.0 은 이전 세대 바이너리와 호환되지 않음.
- 타사 Jar를 사용하고 있는 경우, Spring Framework 6 호환을 반드시 확인해야해요
- Try the Spring Boot Milestones
- https://repo.spring.io/milestone 마일스톤을 사용하여 미리 확인해보세요
- github.com/spring-projects/spring-boot/issues 에서 문제를 제기하세요
- 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
'Develop > Spring' 카테고리의 다른 글
Spring Security Deprecated Configuration(Spring Boot 3.1.x, Spring Framework 6.1.x) (0) | 2023.07.17 |
---|