티스토리 뷰

자사 서버 이관하면서 springboot ver 2.x → ver 3.x 로 업그레이드 할 수 있는 기회가 생겼다.
(사용하고 있던 elasticsearch 도 ver 7.x → ver 8.x 로 업그레이드 해야했는데 이건 라이브러리 / 코드 상으로도 많은 변화가 있었다. 이것까지 다 쓰면 내용이 너무 길어질 것 같아서 따로 글을 쓸 예정이다.)
지금부터 springboot를 마이그레이션 하면서 겪었던 시행착오와 알게 된 정보들을 써보려 한다.

AS-IS / TO-BE

내가 진행했던 마이그레이션 환경은 다음과 같다.

  AS-IS TO-BE
JDK 11 21
Springboot / Spring 2.x / 5.x 3.x / 6.x
Elasticsearch 7.x 8.x

JDK 11 → 21

📍javax → jakarta 로 변경

springboot 3 버전대로 가면서 Java EE 에서 Jakarta EE로 변경됐다.

그 이유는 아래와 같다는데 회사끼리 문제가 생겨서 바뀐 것으로 보인다.

좋게좋게 협의했으면 참 좋았으련만...

tip : jakarta 로의 마이그레이션은 intellij migration tool 을 사용하여 진행할 수 있다.

 


Springboot 2.x → 3.x

📍호환 라이브러리 업데이트

사용하는 springboot 버전에서 호환되는 라이브러리는 springboot 공식문서에서 찾아볼 수 있다.

springboot 에서 관리하는 dependency가 아니라면 직접 버전 명시해주는 수밖에 없겠지만,

springboot 에서 관리하는 dependency라면 사용자가 직접 명시하지 않아도 버전을 읽어와 자동으로 적용하는 방법도 있다.

springboot dependency manager 플러그인을 적용하면 되는데, 이 플러그인을 적용하면 자동으로 호환 버전을 implement 할 수 있다.

그래서 나는 '보안 취약점으로 버전을 자주 업데이트 해줘야 하는 라이브러리' 나 'springboot에서 관리하지 않는 라이브러리'를 제외하고는 해당 플러그인을 사용해 자동으로 버전 관리가 되도록 변경해줬다.


📍Tomcat deprecated 설정

tomcat customize 설정을 하기 위해 사용하고 있던 AbstractHttp11Protocol의 8버전대에는 있던 sessionCacheSize와 sessionTimeout 설정이 9버전대에서는 deprecated 됐다.

해당 설정을 다른 방법으로 설정해볼까 고민했는데 기존 코드와 최대한 동일하게 가도록 하는 것이 마이그레이션 목표였기 때문에 기존 8버전대에서 설정하던 방식을 확인했다.

 

확인하여보니 default ssl host config 내의 sessionCacheSize와 sessionTimeout 설정을 변경/확인하는 방식이었다.

그래서 나는 기존의 sessionCacheSize와 sessionTimeout 으로 설정한 sslHostConfig를 만들고, 해당 sslHostConfig 를 default ssl host config로 설정하는 방식으로 진행하였다.


📍HandlerInterceptorAdater → HandlerInterceptor

HandlerInterceptorAdater 클래스는 spring 5.3.x 버전 이상부터 deprecated 됐다.

deprecated 된 이유에 대해서는 여기 블로그에서 설명을 깔쌈하게 해주고 있는데, 결론적으로는 아래의 이유로 deprecated 됐다.

  • HandlerInterceptorAdater 클래스는 '(default 메서드가 없는) java 8 미만의 버전을 호환해주던 spring'에서 필요했던 구현 클래스 였음
  • java 8 이상을 사용하는 spring 버전부터는 HandlerIntercetor의 메서드들을 default 메서드로 변경하게 되면서 구현 클래스인 HandlerInterceptorAdapter를 사용할 필요가 없어졌음

 

변경 방법은 extends HandlerInterceptorAdater가 아닌 implements HandlerInterceptor 로 변경하여 HandlerInterceptor 인터페이스를 직접 구현하는 방식으로 변경하면 된다.


📍Autowire.BY_NAME deprecated

@Bean의 autowire 설정은 spring 5.1 이상부터 deprecated 됐다.

deprecated 된 이유는 'autowire 보다는 빈 객체에 직접 주입하는 것을 권장'하기 때문이다.

 

나는 해당 autowire 설정이 있던 빈(A)에서 autowire 설정을 없애고, 해당 빈을 주입해야 하는 빈(B) 객체 생성자에 직접 주입하는 방식으로 변경했다.

또한 A 객체에 @Qualifier를 설정하고 B 객체에 주입할 때 해당 @Qualifier 를 지정해주어 A을 주입할 수 있도록 명시해줬다.


📍Actuator 설정 변경

springboot 3.4 이상부터 actuator 설정이 변경되었다.

그 변경점에 대해서는 해당 릴리즈 노트 내 actuator 관련 설정을 찾아보면 확인할 수 있다.

 

감사하게도 intellij 내 편의 기능으로 이전과 같은 설정으로 자동 변경할 수 있었다.


📍@MockBean → @MockitoBean

springboot 3.4 이상부터 @MockBean이 deprecate 됐다.

별다른 내용은 아니고 아래가 변경된 것이다.

  • 관리하는 주체 변경 : springboot 가 아닌 spring 에서 관리하는 것으로 변경
  • 이름 변경 : @MockBean 에서 @MockitoBean 로 변경

 

따라서 springboot @MockBean 대신 spring @MockitoBean 을 사용하는 것으로 변경하여 사용하면 된다.


참고

Java EE에서 Jakarta EE로의 전환

Using IntelliJ IDEA's migration tool

스프링 부트 3.4부터 @MockBean이 deprecated되고 @MockitoBean으로 변경된 이유

 

 

 

'정리노트 > 기타' 카테고리의 다른 글

Elasticsearch 마이그레이션 수행기  (0) 2025.04.19
[Kafka] Kafka 기본 개념  (0) 2023.06.21
네트워크 기초  (0) 2023.05.31
ETL 프로세스 / 하둡 / 스파크  (0) 2022.09.13
Elastic Search (+ ELK 스택)  (1) 2022.09.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함