Spring Boot 3.0 에서는 어떤 것이 달라졌을까?

박지찬·2023년 8월 21일

회사에서 개발 중인 프로젝트가 기존의 Spring Boot 2.7 을 사용하다가 Spring Boot 3.x 버전으로 업그레이드 하였다. 하지만 둘 간의 어떤 차이점이 있는지 몰라 내가 Spring Boot 를 잘 사용하고 있는지 모르겠어 공부해보기로 했다.

주요 변경사항

  • Java 17 버전 이상만 지원

    • Java 17 에 어떤 변경사항이 있는지 보려면 이 글 참조
  • Java EE 를 jakarta EE 로 대체

    • javax.* 에서 jakarta.* 로 변경

    • Java EE 네임스페이스에서 jakarta로 변경

      • 기존에 java 는 오라클이 상표권을 갖고 있기 때문에 jakarta 로 이름 변경
  • GraalVM 기반의 Spring Native 공식 지원

    • GraalVM 탄생배경 - C++로 만들어진 OpenJDK JIT Compiler는 러닝 커브가 높아 인력을 구하기도 힘들고, 수정하기도 어려워 Java 로 만든 JIT Compiler

    • AOT (Ahead of Time) 컴파일 지원 - 기존의 JIT (Just in Time) 컴파일러는 런타임에 바이트 코드를 기계어로 변환하지만, AOT는 빌드타임에 바이트 코드를 기계어로 정적 컴파일링 함

    • 어플리케이션 시작 시간과 메모리 사용량 감소

    • OS에 맞는 기계어를 빌드타임에 컴파일하기 때문에 독립 실행 파일로 배포/실행가능 (JVM이 필요하지 않음)

    • 근데 AOT 기능을 적용하기 위해선 아직 고려해야 하는 요소가 많고 러닝커브가 높은 것 같아 운영환경에 적용하기 보단 앞으로 개선되는 것을 지켜봐야 할 기술

  • HTTP/RSocket Interface Client 제공

    • 서비스 인터페이스 선언만으로 Http 와 RSocket (Netflix 에서 개발한 Reactive Stream 프로토콜) 액세스 가능

    • RestClient 또는 WebClient 같은 클래스를 직접 구현하지 않아도, 인터페이스만 선언하면 API 호출 가능

  • 모니터링을 위한 메트릭 지원 강화

    • Micrometer Observation API 자동 구성, Observability 공식 지원

    • Micrometer 로 애플리케이션 메트릭을 효율적으로 기록하고, OpenZipkin 및 OpenTelemetry 와 같은 공급자를 통해 추적을 구현

  • HTTP API 에러 처리를 위한 RFC 7807 지원

    • RFC 7807 - API 에러 응답값에 대한 표준 스펙

      • e.g. 403 권한 에러 일 때 응답은 content-type: application/problem+json 이고, 발생 path, 에러 정보, 에러 상세 정보, 관련 문서 링크, 그 외 참고 데이터 전달하도록 규정

      • ProblemDetail 클래스 추가하여 이러한 데이터를 전달할 수 있도록 지원

  • Deprecated 코드 모두 제거

  • /api/hello 와 /api/hello/ 가 이제 불일치

Spring Boot 3 마이그레이션 방법

  • Java 17 로 업그레이드

  • Spring Boot 2.5.* 를 사용한다면 순차적으로 (2.5 → 2.6 → 2.7) 업그레이드 권장

  • 사용 중인 Deprecated 코드 제거

    • -Werror 컴파일러 옵션을 사용하여 Deprecated Warning 시 에러 발생하도록 설정 후 수정 권장
  • spring.config.use-legacy-processing=true 여부 확인 및 제거

    • Spring Boot 2.4 에서 application.propertiesapplication.yaml 이 로드되는 방식이 변경되었는데, 이 변경된 점을 기존 방식으로 하기 위한 설정

    • 이런 설정 방식이 Spring Boot 3.0 에서는 더 이상 지원되지 않으므로 제거 필요

  • 외부 라이브러리 혹은 사용 중인 타사 프로젝트에서 Jakarta EE 9 및 Spring Framework 6 호환 릴리즈 확인

  • (필수 X) AntPathMatcher 를 성능이 더 좋은 PathPatternParser 로 변경

참조

https://revf.tistory.com/260
https://meetup.nhncloud.com/posts/273
Spring - Preparing for Spring Boot 3.0

0개의 댓글