개발놀이터

스프링 부트 3.0 마이그레이션 가이드 본문

Spring/Spring

스프링 부트 3.0 마이그레이션 가이드

마늘냄새폴폴 2023. 6. 2. 15:59

이번 포스팅은 스프링 부트가 얼마전 3.0이 됨에 따라 바뀌게 된 점 중 저에게 해당하는 점만 정리해보겠습니다. 

 

자세한 내용은 이곳!

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide

 

Spring Boot 3.0 Migration Guide

Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.

github.com

 

스프링 부트 3.0

1. JavaEE에서 JakartaEE로 변경

javax 패키지에 있던 것들이 전부 jakarta로 변경되었습니다. 

 

때문에 만약 JPA를 사용하신다면 필수로 마이그레이션해야 하는 사항입니다. 

 

javax.persistence.EntityManager 이런 것들이 전부 jakarta.persistence.EntityManager 이렇게 변경되었습니다. 

 

2. Java 17로 업그레이드 해야한다. 

자바 17버전으로 업그레이드 하면서 많은 개발자들이 우려를 했습니다. 물론 찬성한 개발자들도 적지 않았는데요. 

 

  • 역호환 문제 (우려) : Java 17은 오랜 기간 LTS를 릴리즈 했고, 그것이 많은 새로운 특징들과 개선들을 가져왔습니다. 뿐만 아니라 획기적인 변화도 포함되어 있었죠. 하지만 이것은 오래된 자바 버전과 호환되지 않는다는 것을 의미할 수 있습니다. 때문에 스프링 부트가 3.0이 되면서 많은 문제가 발생할 것을 우려했습니다. 
  • 새로운 기능을 채택 (찬성) : Java 17은 새로운 특징과 개선사항을 발표했고 개발자들이 자신들의 스프링 부트 프로젝트에 새로운 기능을 써보고 싶어하는 사람도 있었습니다. 
  • 성능 (찬성) : Java 버전들은 전형적으로 성능 개선을 가져왔습니다. 예를 들어서 Java 17같은 경우 Z Garbage Collector와 자바 메모리 모델의 개선사항이 포함되어 있었습니다. 이 두가지 개선은 스프링 부트 프로젝트의 성능에 상당한 부스팅이 될 것입니다. 
  • 오래된 버전에 대한 지원 (우려) : 스프링 부트 3.0이 Java 17버전을 디폴트로 사용하면서 더이상 자바의 오래된 버전을 지원하지 않을 수 있고 오래된 버전을 사용하는 개발자들은 업그레이드할 필요가 있습니다. 이러한 변화는 급작스러운 변화를 준비하지 못한 프로젝트들의 문제로 발전할 수 있습니다. 
  • 보안 (우려) : Java 17은 많은 보안 개선사항이 포함되어 있습니다. 이것은 스프링 부트 프로젝트에 큰 이점이 될 수 있습니다. 하지만 몇몇 개발자들은 새로운 버전을 도입함으로써 생기는 보안 문제를 걱정하고 있다. 
  • 특정 기능을 더이상 사용하지 않음 (우려) : Java 17은 미래의 릴리즈를 위해 몇몇 특정한 특징들을 deprecate 시켰습니다. 이것은 이러한 특징에 의존하는 스프링 부트 프로젝트에 영향을 미칠 수 있습니다. 

 

3. 보안상의 이유로 URL 매칭이 변함

기존에는 @GetMapping("/some/greeting") 과 @GetMapping("/some/greeting/") 이 같았다

이제 이 둘은 같지 않습니다. 만약 해당 URL로 요청을 보낸다면 404 에러가 발생할겁니다. 

 

이를 해결하기 위해서는 

 

  1. 두개의 API를 만든다
  2. 디폴트 Configuration을 오버라이딩해서 기존과 같이 사용한다
  3. 커스텀 필터를 이용해 리다이렉트 시킨다
  4. WebFilter를 이용한다
  5. 프록시 (NGINX, Apache) 를 이용해 리다이렉트 시킨다

 

4. Data Access 가 변경됨

기존 application 파일에서 데이터베이스에 대한 설정은 spring.data.~ or spring.~ 이었습니다. 

 

이번에 바뀐 데이터베이스 접근 방식은 저에게 해당하는건 두가지인데요. 

 

Cassandra

spring.data.cassandra => spring.cassandra

 

Redis

spring.redis => spring.data.redis

 

 

5. 하이버네이트 6.1이 디폴트로

스프링 부트 3.0에서는 하이버네이트 6.1을 디폴트로 사용합니다. 

 

6.1 마이그레이션 가이드를 참고하라고 나와있는데 읽어보니 딱히 별다른 내용은 없더라구요. 그냥 버전 업만 시켜주면 알아서 마이그레이션 될 듯 합니다. 

 

6. 스프링 시큐리티 변경

스프링 시큐리티가 6.0으로 격상되었습니다. 그에따라 변하는게 있다고 마이그레이션 가이드를 참고하라고 했지만

 

읽어본 결과 딱히 변하는건 없었습니다. 그냥 쓰던대로 쓰면 될 것 같습니다. 

 

7. 스프링 배치 변경

스프링 배치가 5.0 버전이 릴리즈 됐습니다. 이건 꽤 의미있는 변화가 있었는데요. 

 

이전 main 메소드가 있는 클래스에 @EnableBatchProcessing은 스프링 부트의 auto-configuration을 위해 사용되었습니다만, 이제는 더이상 사용되지 않습니다. 만약 @EnableBatchProcessing을 붙이게 되면 자동적으로 설정파일을 주입해주던 기능을 사용할 수 없습니다. 

 

때문에 배치 클래스에 DefaultBatchConfiguration을 상속함으로써 auto-configuration을 사용할 수 있습니다. 

 

 

마치며

스프링 배치에 대해 알아보던 내요이었는데 꽤 의미있는 변화들이 있었던 것 같습니다. 

 

이것 외에도 변하는 것이 상당히 많았는데 저와 상관없는 것들이라 깔끔하게 무시했습니다. 

 

스프링 부트 3.0이 됨으로써 버전 업을 하려고 하시는 분들에게 참고가 되었스면 좋겠습니다. 그럼 여기까지 스프링 부트 3.0 마이그레이션 가이드였습니다. 긴 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~

 

출처

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide

 

Spring Boot 3.0 Migration Guide

Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.

github.com