영주의 개발노트

👶 배치 프로젝트 최신화 | 자바 어떤 버전을 선택해야할까? (Java 17 vs Java 21) 본문

STUDY 📖/JAVA

👶 배치 프로젝트 최신화 | 자바 어떤 버전을 선택해야할까? (Java 17 vs Java 21)

0JUUU 2024. 1. 18. 19:23
반응형

신입 온보딩 프로젝트로 팀 배치 서버 구축을 하였다. Java 7로 이루어진 전사 배치에서 벗어나 Spring Batch를 활용한 팀 배치 서버를 구축하는 것이 목표였다. 구축 당시, Java 11, Spring Boot 2.x, Spring Batch 4.x 버전을 사용하였다. 또한, 사내망에서 동작하는 젠킨스 이슈로 빌드는 Java 8로 하였다. 

 

최근 사내 코드들을 클라우드로 이관하면서 배치 환경도 모두 변경되었다. 코드 작성과 빌드 버전이 상이했던 부분을 수정할 수 있게 되었다. 이제 자바 버전을 선택해야 한다.

이제는 더이상! 물러날 곳이 없다! 💃

자바 버전 업그레이드를 선택한 이유

현재 (24년 1월 17일 기준) 자바 LTS 지원 기간은 아래와 같다. 자바 11 > 자바 21 > 자바 8 > 자바 17 순으로 지원 기간이 짧다. 혹자는 제일 지원이 짧은 17과 21 중 고민하는거지? 라고 생각할 수 있다. 23년 9월 이전까지만 해도 자바 11의 LTS 지원기간은 26년이었다. 상황은 매번 바뀌기에 (필자는 자바 17도 지원 기간이 늘어날 것이라고 예상한다.) 자바 LTS 지원 기간만을 가지고 자바 버전을 결정할 수 없었다. 

출처: https://www.oracle.com/java/technologies/java-se-support-roadmap.html

 

Oracle Java SE Support Roadmap

Oracle provides this Oracle Java SE Support Roadmap, to help you understand maintenance and support options and related timelines. If you are looking for the latest free JDK release from Oracle under an open source license, please see jdk.java.net, or a fr

www.oracle.com

 

최근 스프링 부트 프로젝트를 새로 만들면, Spring Boot 3.x 버전을 기본으로 제공하는 것을 확인할 수 있다. Spring Boot 3.x 에서는 JDK 17 이상을 사용해야 한다. 

해당 프로젝트가 이관을 완료한지 오래되었고, 안정화된 상황이라면 Spring Boot 버전 업그레이드에 대해 고민해보지 않았을 것이다. 하지만, 아직 이관 진행 중이므로 Spring Boot 버전에 대해서도 고민을 하게 되어 Java 17 이상 버전 중 선택하는 것으로 의사결정하였다. 추후 신규 버전이 출시되면 적용한 Java 17 혹은 21 버전에서 신규 버전으로 업그레이드하는 것은 Java 11에서 업그레이드하는 것보다 비교적 수월할 것이다. 이는 단순히 최신 기술을 활용하는 것에 그치는 것이 아닌 발전될 Java 및 Spring에 따라 변화에 적응할 수 있는 배치 프로젝트 개발을 위한 것이다. 

 

Java 17 VS Java 21

해당 글에서는 Java 11과 비교하여 Java 17 및 Java 21의 업데이트된 기능들에 대해 다루지 않는다. 추후 작성하도록 하겠다. 

Java 17

  • 비교적 안정된 버전: Java 21 출시 시기를 고려했을 때, Java 17은 21보다 이미 사용해 본 사람들이 많기에 문제 해결 및 커뮤니티 지원이 유리하다. 
  • 적은 변경: Java 11에서 Java 17로 업그레이드하는 것은 Java 21로 업그레이드하는 것보다 변경 사항이 적을 수 있어, 전환 시 발생하는 사이드 이펙트가 줄어들 수 있다. 

Java 21

  • 최신 기능: Java 21은 현 상황에서 최신 기능과 최적의 개선 사항을 제공하므로 배치 프로젝트에 도움이 될 수도 있다. 
  • 미래 지향: Java 21을 선택하면 가장 최신 버전을 선택하는 것으로, 이는 추후 또 다른 대대적인 업그레이드가 있을 경우 Java는 포함하지 않을 수 있다. 만약 포함된다 하더라도 Java 17에서 업그레이드하는 것보다 수월할 것이다.

정리하다 보니 조삼모사의 느낌이 난다. 지금 Java 11에서 21로 훌쩍 뛸래? 아니면 나중에 Java 17에서 Java N으로 훌쩍 뛸래? 같은 느낌이다. 현재 배치 Job 이관이 완료되지 않은 상태이므로 개발에 속도를 내야 한다. 또한, Java 업그레이드뿐만 아니라 다른 기술들도 업그레이드를 해야 하므로 Java 17을 선택할 것이다. 

 

자바 버전 업그레이드에 따른 고려해야할 사항

자바만 업그레이드한다고 해서 딱 하고 끝나는 것이 아니다. 확인해야 할 것들이 있다. 테스팅, 성능 확인 등 여러 가지가 있지만, 크게 2개만 짚고 넘어가겠다.

바쁘다 바빠 현대사회 ⏰

 

✅ 프레임워크 및 라이브러리 의존성

Java 버전을 업그레이드함에 있어 해당 Java 버전을 온전히 사용하기 위해서는 Spring Boot 와 Spring Batch를 업데이트하는 것이 좋다고 생각한다. 물론, Spring Boot 2.x 및 Spring Batch 4.x 와 다른 변경사항 및 이점을 이해하는 것이 중요하겠다. Spring Boot와 Spring Batch 모두 버전 업그레이드하는 방향으로 진행할 것이다.

  • Spring Boot 3.x 버전 가이드
 

Spring Boot 3.0 Release Notes

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

github.com

 

  • Spring Batch 5.x 버전 가이드
 

Spring Batch 5.0 Migration Guide

Spring Batch is a framework for writing batch applications using Java and Spring - spring-projects/spring-batch

github.com

 

 

✅ 호환성 검사

자바 및 스프링부트, 스프링배치 버전을 업그레이드한 후 기존에 사용하던 라이브러리들이 잘 호환되는지 확인해봐야 한다. 관련해서 문제가 생길 경우 StackOverflow 등 커뮤니티에 관련 내용을 서치한다.

 

그래서 어떤 거 한다고?

위 사항들을 고려하였을 때, Java 17을 사용하며 Spring Boot 3.x, Spring Batch 5.x 를 사용할 것이다. 나와 비슷한 고민을 하고 있는 사람들에게 자그마한 도움이 되었으면 한다.