⚡ 개요
내부적으로 spring boot 2.6.6 버전을 사용 중이며, 이제 곧 2.6.x 버전의 지원이 종료가 된다. java 21 도 나왔고, 가상 스레드를 실무에서 사용해 보고 싶은 생각도 있다. 겸사겸사 spring boot에 대한 버전을 업데이트하면서 변경된 내용과 오류를 잡은 과정에 대해서 내용을 정리하려고 한다.
일단 먼저 내부적으로 사용중인 일부 라이브러리 버전에 대해서 공유하도록 하겠다.
(이외 다른 라이브러리도 사용 하고 있지만 버전을 올리면서 문제가 발생하는 경우에만 따로 버전 및 이슈를 공유하도록 한다.)
- spring boot 2.6.6
- java 17
- queryDsl 5.0
spring boot 를 버전을 올리면서 이외 다른 라이브러리 버전도 올려야 하는 부분이 발생할 수도 있다.
우리는 많은 라이브러리를 사용 하고 있으면 버전을 업데이트하면서 발생하는 문제에 대해서 해결을 하면서 한 단계 더 성장을 할 수 있다고 기대하고 있으며, 버전을 업데이트하면서 발생하는 이슈에 대해서 내용을 공유하도록 하겠다.
⚡ 변경 사항
업그레이드 과정을 설명하기 전에 간단하게라도 변경사항에 대해서 정리를 하고 가면 좋을거 같아서 적어 보려고 한다.
자세한 변경 사항에 관해서는 링크를 남겨두도록 하겠다.
- Java 17 기준 및 Java 19 지원
- Java EE에서 Jakarta EE API로 마이그레이션
- Spring 관련 라이브러리 업그레이드
- Log4j2 개선
이외에도 다양한 내용들이 업그레이드되었고, 지원이 중단된 내용들도 존재하니 아래의 릴리즈 노트를 한번 확인해보는 게 좋다고 생각을 한다. 업데이트를 하면서 발생하는 버전별 차이 및 이슈에 대해서는 내용을 정리를 할 예정이다.
⚡ 진행 과정
진행 과정에 대해서 설명을 하자면 기본적으로 spring boot 에서 마이그레이션을 할 때 어떻게 진행을 해야 하는지 githug에 공유가 되어 있고 이를 바탕으로 진행되었다. (참조)
👉 Spring boot 2.7.x 최신 버전으로 업그레이드
spring boot 3.x.x 버전 부터는 종속된 라이브러리 내용에 많은 변화가 있다. 지원이 중단된 라이브러리도 있고 버전이 바뀌면서 사용 방법 또는 종속된 라이브러리가 교체되는 부분도 존재한다. 그러다 보니 일단 3.x.x 버전으로 올라가기 전에 2.7.x 버전으로 올려서 가장 최근에 종속된 라이브러리를 찾고 이를 바탕으로 3.x.x 버전으로 마이그레이션을 하라고 되어있다.
(참고로 확인을 해보니 2.7.x 버전에서 사용하는 라이브러리 기준으로 3.x.x 버전으로 갔을때 크게 변경이 된 라이브러리에 대한 마이그레이션 가이드 및 변경 내용을 제공을 해주니까 확인해보면 좋을 거 같다.)
내부적으로 2.6.6 버전에서 2.7.18 으로 1차 버전 업데이트를 했을때 현재 사용하고 있는 라이브러리를 그대로 사용을 해도 크게 문제가 발생하지 않고 웹이 올라가는 부분을 확인했다. 한잔해~ :)
아마도 더 낮은 버전을 사용하고 있다면 종속된 라이브러리에 문제가 발생 할수도 있지만 이때는 한 번에 2.7.x로 올리지 말고 한 단계씩 버전을 올리면서 확인을 해보면 좋을 거 같다.
👉 Spring boot 3.x.x 버전으로 업그레이드
3.x.x 버전으로 업데이트 하기전에 준비는 끝이 났다. 다행히도 버전 업데이트가 잘되고 문제가 발생하지 않아서 그냥 넘어간 부분도 있다. :)
3.x.x 버전에는 바뀐부분이 상당하다. 일단 javax가 jakarta로 변경이 되었다. 왜 변경이 되었는지 궁금하면 한번 찾아보면 좋을 거 같다. (나는 아직도 jakarta가 어색하다. ㅋㅋ)
javax -> jakarta 변경 관련해서 Intellij에서 마이그레이션을 제공 해준다. 이 부분을 사용하면 변경된 사항에 대해서 금방 적용이 가능하다. 만약에 jakarta가 아닌 다른 라이브러리에서도 제공된다면 직접 import 하는 부분을 수정해야 한다.
queryDsl 관련해서도 gradle의 dependencies가 아래의 이미지와 같이 변경이 필요하다.
logback 관련해서도 혹시라도 명시적으로 버전을 지정해준 부분이 있다면 아래의 이미지처럼 제거를 해야 한다. Spring boot 3.x 버전 내부의 logback과 충돌이 나면서 build 에러가 발생하니 참고하면 좋을 거 같다
이외에 현재 버전을 사용해도 되지만 아래의 이미지와 같이 추가적으로 버전을 업데이트한 부분이 있다.
더 상위 버전이 있는 경우 올리고 싶다는 생각도 있었지만 변경사항에 대해서 알지 못하고 버전을 올리는것은 의미가 없다고 판단을 해서 보안 이슈 및 일부 버그가 수정된 버전까지만 올려보았다. 이후에 추가적으로 내용을 체크해서 버전을 올려볼 생각이다.
mybatis-spring-boot-starter (2.2.0 -> 3.0.0)
lombok (1.18.24 -> 1.18.30)
👉 이슈 정리
- queryDsl 버전이 업데으트 되면서 mariadb 관련 사용자 정의 함수를 사용하는 부분에서 기존 registerFunction 함수가 제거가 되면서 사용 방법이 변경이 되어서 현재 라이브러리 내부를 분석하고 사용 방식을 바꾸는 작업을 진행하고 있다.
- multipart -> CommonsMultipartFile 함수가 제거 되었다. 혹시라도 내부에서 사용을 하고 있다면 이 부분 또한 사용 방식을 바꿔야 한다.
- queryFactory에서 만약 동일한 domain을 join 해서 사용해야 하는 경우가 있다면 명칭을 지정해서 사용하지 않으면 에러가 발생하니 참고해야 할거 같다.
우리 프로그램에서 전반적인 프로세스에 크게 영향이 가는 부분은 두가지 이슈로 정리가 될 수 있을 거 같다. 추가적으로 다른 이슈들도 발생을 했지만 충분히 에러의 내용을 체크한다면 동일 이슈가 발생해도 처리가 가능하다고 판단을 해서 정리하지 않았다.
⚡ 참조 자료
⚡생각
추가적으로 업데이트를 하면서 발생한 이슈 및 내용에 대해서는 정리가 필요한 부분은 추가적으로 정리를 해볼 예정이다.
아직 100퍼센트 3.x.x 버전으로 올렸다고 생각하지는 않는다.
내부적으로도 브랜치를 따고 버전을 맞춰가면서 내부 프로세스를 테스트를 진행 해보고 있다. 구동은 되었지만 정상적으로 기능이 동작하지 않는다거나 할 수도 있기 때문에 버전을 올렸다면 라이브러리의 변경 사항에 대해서 많이 변경된 부분은 한 번씩 참고를 해보는 게 좋을 거 같다.
요즘 일이 많이 바빠지고 있다. 공부도 하고 정리도 하고 해야하는데 더 노력해봐야겠다. 한잔해~ :(
'Spring' 카테고리의 다른 글
Spring boot + vue 프로젝트 (1) (0) | 2024.04.04 |
---|---|
[JPA] Spring boot 3.x.x 에서 QueryDsl Date Type 사용 방법 (0) | 2024.01.09 |
[JPA] save() 와 saveAndFlush() 차이점 정리 (0) | 2023.10.29 |
[JPA] repository를 통해서 일부 컬럼만 조회하는 방법 정리 (0) | 2023.10.09 |
[QueryDsl] new CaseBuilder() 내용 정리 (0) | 2023.10.07 |