Java와 Spring을 선택함에 있어 Java version과 Spring version은 매우 중요합니다.
특히 Java 8부터 소개된 lamda, stream, Java 11의 var 타입추론 등은 같은 Java여도 버전에 따라 꽤 다른 가독성, 문법을 보여주기 때문에 현재 Java 8이 가장 많이 쓰이는 상황에서 Java 진영은 일종의 변곡점에 있습니다.
개발팀의 상황을 볼까요.
- 어떤 팀은 Java 8을 이미 도입한 채로 다음 버전을 준비 중
- Java 8을 사용중
- 아직 Java 8 이전을 사용 중
일단 세 번째라면 어서 빨리 java 8으로 올라와서 다음 release를 준비해야 합니다. 이번 포스팅에서는 각 공식 문서를 바탕으로 현재 Spring 진영에서 선택할 수 있는 버전과 현실적인 방안을 제안하려 합니다.
목차
- Java version support
- Spring version support
- 결론
- 참고
Java version support
현재 Java LTS 버전 중 가장 긴 보장기간을 가진 버전은 Java 8입니다. 그 다음 Java 17입니다.
웹이 아닌 Java Application을 사용 중이시라면 Java 8을 쓰는 것이 가장 안정적입니다.
Java의 release 주기
Java의 release 주기는 6개월, LTS release 주기는 3년입니다. 즉, 3년마다 새로운 LTS가 튀어나옵니다.
Spring version support
그러나 Spring은 얘기가 다릅니다.
Spring은 VMware Tanzu Open Source Software Support을 따르며, 대략 1 ~ 3년의 지원기간을 가집니다. (Major version은 3년의 지원기간, Minor version은 최소 24개월의 지원기간을 가집니다.)
따라서 Spring은 release 주기가 짧은 편이며, 현재도 계속해서 다음 release를 내놓고 있기 때문에 release note에 예민하셔야 합니다.
Spring framework 지원기간
Spring Boot 지원기간
현재 Spring Framework의 경우 6.1.x, Spring boot의 경우 3.2.x의 지원기간이 가장 깁니다.
Spring Boot는 3.2.x부터 Java 17을 요구하네요.
결론
크게 세 가지 case로 나눠보겠습니다.
- Java 8 이전 버전 사용 중
- Java 8 사용 중
- Java 8 이후 버전 사용 중
Java 8 이전 버전 사용 중이라면 이미 지원이 종료된 버전을 쓰고 있는 겁니다. 2026년 안까지 Java 8 + Spriong Framework 5.3.x으로 업그레이드하시거나, 2025년 안까지 Java 8 + Spring Boot 2.7.x로 업그레이드하세요. 이 업그레이드가 완료되면 바로 다음 버전을 준비하셔야 할 겁니다.
Java 8을 사용 중이시라면 아직 여유가 있습니다. Spring Framework를 사용중이시라면 5.3.x로 2026년까지 사용하시고, Spring Boot를 사용하신다면, 2.7.x로 2025년까지 사용 가능하십니다. Spring Boot 환경이시라면, 2025년이 지나면 반드시 Java 17을 사용하셔야 합니다.
Java 8 이후 버전을 사용 중이시라면, 이미 다음 세대로 가고 계신 중인 겁니다. 개인적으로 이미 넘어가신 거 Java 17을 부지런히 맞이하시기 바랍니다.
참고
https://www.oracle.com/java/technologies/java-se-support-roadmap.html
https://spring.io/projects/spring-framework#support
https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html
https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions
https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0
'Programming > Languages (Java, etc)' 카테고리의 다른 글
[Java] Java 8 사용하기 : 가독성과 유연성, 람다와 Streams API (0) | 2023.08.16 |
---|---|
[JPA] Querydsl 사용해서 스칼라 서브쿼리 작성하기 (0) | 2023.08.08 |
[SPRING] 테스트 코드 - 테스트 소개 (0) | 2023.03.21 |
[SPRING] Bean의 정의와 IoC 컨테이너 (부제 : IoC는 DI가 아니에요) (0) | 2023.02.14 |
[JAVA] Thread 1편 - 멀티스레드에서의 공유자원 (0) | 2023.01.19 |
댓글