Server

Spring Boot 3 버전으로 업그레이드

니용 2022. 11. 13. 13:19
반응형

안녕하세요! 국내 웹개발자들은 대부분 알고 있다는 Spring Boot 가 이전에는 2.7 버전까지 릴리즈가 되어 있다가 최근에 공식적으로 3 버전이 릴리즈 되었다고 합니다. 이번 릴리즈는 11월 24일에 진행될 예정이라고 하는데 이전 버전과 달라진 것은 무엇인지, 또 그에 따라 사용 요구사항은 무엇이 있는지 살펴보겠습니다. 

 


 

Spring Boot 3 요구사항

1. Java 17 버전 이상만 지원 

자바 버전이 안정화된 버전으로는 8, 11이 있는데 그 다음으로 안정화되었다고 하는 버전인 17 버전입니다. 저도 현업에서 사용하면서 느낀 것이 이상하게 Spring Boot 2.x.x 버전들은 전부 자바 16 버전까지만 지원을 하고 있었는데, 이번에 그런 기능이 풀리게 된 것, 아니 정확히 말하자면 16 버전까지 만으로 사용가능하도록 제한해 두다가 풀어준 느낌이 듭니다. 

 


 

2. Spring Boot 버전 순차적 업데이트 필요

2.5 버전을 사용하고 계시다면 2.5 -> 3.0 버전으로 바로 넘어가는 것이 불가능하다고 합니다. 2.5 -> 2.6 버전으로 먼저 업데이트 한 후 정상적으로 기능들이 작동하는지 테스트, 그다음에 2.6 -> 2.7 버전으로 업데이트 후 똑같이 테스트 후 릴리즈, 마지막으로 2.7 -> 3.0 버전으로 업데이트 하는 것을 권장한다고 합니다. 왜 이런지는 어느 정도 유지보수 경험이 있으신 (특히나 소프트웨어 버전 관리를 진행하신 분들이라면 이해가 가능) 분들이 빠르실 것이라 생각됩니다. 

 


 

3. Deprecated 코드에서 -Werror 옵션 제거

gcc 옵션으로 사용하고 있는 Werror 옵션을 제거하는 것이 좋습니다. 기본적으로 C언어를 기반으로 만들어진 자바 코드의 특성상 프레임워크에서 요구하는 사항들이 C언어와 연결된 것 같습니다. 자세한 사항은 아래 링크에서 보시는 것을 추천드립니다. 

https://jangpd007.tistory.com/220

 

gcc 컴파일 옵션 정리

=================================================================================================== [gcc 컴파일] 1) gcc 파일명(*.c) : Default로 out 파일이 생성된다. (ex a.out)2) gcc -c 파일명(*.c) : 오브젝트 파일을 생성한다.3) g

jangpd007.tistory.com

 


 

4. application.properties, yaml 파일안에 use-legacy-processing 옵션을 추가

레거시 구동방식을 유지하기 위한 설정 방법입니다. 

application.properties

spring.config.use-legacy-processing=true

 

application.yaml

spring:
  config:
    use-legacy-processing: true

 


 

5. AntPathMatcher 변경하기 

AntPathMatcher 를 사용 중이라면 성능이 더 좋은 PathPatternParser로 변경해 줍니다. 이건 필수 사항은 아니고 선택사항이라고 합니다. 

 


 

6. Jakarta EE 9, Spring Framework 6 가 타사 서비스에서 호환되는지 확인

자사 서비스라고 하여 순 Spring Framework 기능만을 사용한다는 보장성은 없습니다. 외부와 연결된 서비스를 사용 중이라면 타사 서비스에서 지원가능한 범위도 체크해 보는 것이 좋습니다. 

스프링 프레임워크 6에 대한 정보 깃헙

https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-6.x/

 

GitHub - spring-projects/spring-framework: Spring Framework

Spring Framework. Contribute to spring-projects/spring-framework development by creating an account on GitHub.

github.com

 

여기까지 Boot 3 을 사용하기 위한 요구사항이었다면 아래에서는 지원되는 기능들을 나열해보고자 합니다. 

 


 

Spring Boot 3에서 지원되는 기능

1. Java 17 이상 지원 (Kotlin 1.7 이상)

위에서 작성하였지만 이는 요구사항이기도 하고 지원사항이기도 합니다. 

 

 

2. Servlet, JPA 네임스페이스 -> Jakarta로 대체

우리가 이전에 사용하고 있던 JPA 의 패키지명은 javax.*이었습니다. 하지만 이런 부분이 jakarta.* 로 대체됩니다. 

 

 

3. Tomcat 10.1, Jetty 11, Undertow 2.3 등과 같은 최신 웹 서버와 호환 가능

부트 내에 내장된 WAS 는 톰캣이 대부분 주로 활용되고 있었습니다. 이번 부트에서는 강력한 기능을 제공하는 톰캣을 지원가능한 것으로 확장되었다고 합니다. 

 


 

4. JDK 19 가상 스레드 지원

저는 아직 사용해보지 않았지만 Project Loom이라고 하는 가상 스레드를 지원한다고 합니다. 소스 코드는 아래 링크에 있으며 스레드의 원활한 작동을 지원하는 것으로 알고 있습니다. 

https://www.marcobehler.com/guides/java-project-loom

 

Understanding Java’s Project Loom

You can use this guide to understand what Java's Project loom is all about and how its virtual threads (also called 'fibers') work under the hood.

www.marcobehler.com

 

5. GraalVM 기반의 Spring Native 공식 지원

3년간의 실험을 마치고 릴리즈한다고 하여 화제가 된 기능입니다. 

 


 

6. Spring Webflux 

MultipartForm upload 스트리밍을 위한 PartEvent API를 지원한다고 합니다. 

 


 

7.  그 외

  • Netty 5를 기반으로 하는 Reactor Netty 2 조기 지원
  • HTTP/RSocket Interface Client 제공
  • Micrometer Observation API 자동 구성
  • HTTP API 에러 처리를 위한 RFC 7807 스펙 지원
  • Logback, Log4j2 날짜 및 시간 기본값 표준 ISO-8601을 따름
  • Deprecated 된 모든 코드 제거

 

여기까지 기본적으로 지원되는 내용들에 대해 나열해 보았습니다. 저도 모르는 부분이 많고 아무래도 공식적으로 지원되는 새로운 기능들이 분야별로 다양하다 보니 써보면서 이해를 하는 게 유용할 것 같습니다. 

반응형