파란하늘의 지식창고
article thumbnail
반응형

JDK version

Java SE 5 이전 자바는 JDK 1.0, JDK 1.1, J2SE 1.2, J2SE 1.3, J2SE 1.4처럼 1.x로 버전을 관리하였다.

이후 6, 7, 8과 같은 숫자로 변경이 되었는데 이때 이후 각 버전 별 업데이트가 계속 올라가게 된다. (관련 히스토리는 너무 길어 링크로 대체함)

https://namu.wiki/w/Java/%EB%B2%84%EC%A0%84%20%EC%A0%95%EB%B3%B4

각 버전 별 업데이트 관리를 해야 하는 부담이 커지자 오라클은 상용과 오픈소스를 나누기로 하고 openjdk와 oraclejdk를 분리하고 6개월 주기로 major 버전을 변경하고 3년 주기로 LTS (Long Term Support) 버전을 관리하기로 하였다.

이에 대해서는 SpringOne 2018에서 설명한 자료가 있다.

발표 동영상 : https://www.youtube.com/watch?v=mFyzyVnYcoY 

slideshare : https://www.slideshare.net/SimonRitter/jdk-9-10-11-and-beyond

그 시범으로 JDK 9, 10이 6개월 단위로 나왔고 LTS version인 JDK 11이 출시되었고 이후 6개월 단위로 차근차근 JDK가 출시되어 드디어 LTS version인 JDK 17이 나왔다.

LTS와 non LTS의 차이는 LTS의 경우 이후 version의 JDK가 나와도 지속적으로 지원해주지만 non LTS의 경우 6개월 단위로 다음 JDK가 release 되면 이전 version의 non LTS JDK는 더 이상 지원을 하지 않는다.

이런 식의 관리를 통해 이전 version의 유지 보수에 들이는 부담을 없애고 주기적으로 non LTS 버전을 release 하고 feedback을 반영하면서 다음 version의 release를 준비할 수 있게 되었다.

JDK 17 이후 LTS release 가 2년 주기로 전환됨

JDK 17 release 이후부터는 2년 주기로 LTS release version을 관리하기로 2021년 9월 정책이 변경되었다.

https://blogs.oracle.com/java/post/moving-the-jdk-to-a-two-year-lts-cadence

따라서 이후 LTS release version은 2023년 9월에 배포되는 JDK 21이 된다.

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

Oracle Java SE Support Roadmap

Release GA Date Premier Support Until Extended Support Until Sustaining Support
7 (LTS) July 2011 July 2019 July 2022***** Indefinite
8 (LTS)** March 2014 March 2022 December 2030***** Indefinite
9 (non‑LTS) September 2017 March 2018 Not Available Indefinite
10 (non‑LTS) March 2018 September 2018 Not Available Indefinite
11 (LTS) September 2018 September 2023 September 2026 Indefinite
12 (non‑LTS) March 2019 September 2019 Not Available Indefinite
13 (non‑LTS) September 2019 March 2020 Not Available Indefinite
14 (non‑LTS) March 2020 September 2020 Not Available Indefinite
15 (non‑LTS) September 2020 March 2021 Not Available Indefinite
16 (non-LTS) March 2021 September 2021 Not Available Indefinite
17 (LTS) September 2021 September 2026**** September 2029**** Indefinite
18 (non-LTS)*** March 2022 September 2022 Not Available Indefinite
19 (non-LTS)*** September 2022 March 2023 Not Available Indefinite
20 (non-LTS)*** March 2023 September 2023 Not Available Indefinite
21 (LTS)*** September 2023 September 2028 September 2031 Indefinite

 

Spring Framework support

Spring의 지원 정책

Spring은 VMWare Tanzu OSS support policy를 따르는데 major version의 경우 release date로부터 3년, minor version의 경우 12개월을 지원한다.
다만 major version의 3년이라는 건 minor version을 포함한 지원 기간을 말하는 것이기 때문에 minor version을 변경하지 않고 사용하면 결국 12개월 지원이나 마찬가지다.

이렇게 지원하는 기간에 대해서는 spring project 별 지원 기간이 소개되어있다.

Spring Framework : https://spring.io/projects/spring-framework#support
Spring Boot : https://spring.io/projects/spring-boot#support

Spring Framework의 지원 버전

https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions#supported-versions

Spring Framework이 지원하는 JDK 버전은 다음과 같다.

  • Spring Framework 5.3.x: JDK 8-19 (expected)
  • Spring Framework 5.2.x: JDK 8-15
  • Spring Framework 5.1.x: JDK 8-12
  • Spring Framework 5.0.x: JDK 8-10
  • Spring Framework 4.3.x: JDK 6-8

다만 2022년 3월에 JDK 8 LTS 공식 지원이 종료되고 JDK 11도 2023년 9월에 공식 지원이 종료된다.
위 버전의 Spring Framework을 사용하더라도 지원하는 상위 버전의 LTS JDK가 있으면 굳이 이전 버전의 JDK를 사용할 이유는 없어 보인다.

Spring Framework의 경우 이 글을 작성하는 현재 5.3.x가 최신 버전인데 5.3.x의 경우 2020년 말부터 2027년 초까지 지원 예정이다.
Spring Framework의 경우 JDK 8 지원으로 오래 머물러있다 보니 원래 minor 버전 지원 정책인 12개월보다 길게 지원한다.

 

Spring Boot의 지원 버전

Spring Framework와 Spring Boot 간 버전 의존성은 spring boot 문서의 dependency version 항목에서 확인할 수 있다.

Spring Boot Dependency Versions

Spring Boot major, minor 버전이 변경된 기준 release 날짜와 해당 시기의 JDK는 다음과 같다.

Spring Framework Spring Boot Release Date Spring Boot 지원 JDK 해당 시기 JDK release
4.0.3.RELEASE 1.0.0.RELEASE 2014년 4월 1일 JDK 6 지원 -
4.0.5.RELEASE 1.1.0.RELEASE 2014년 6월 11일 JDK 6 지원 JDK 8
4.1.3.RELEASE 1.2.0.RELEASE 2014년 12월 11일 JDK 6 지원 -
4.2.3.RELEASE 1.3.0.RELEASE 2015년 11월 16일 JDK 7 지원 -
4.3.2.RELEASE 1.4.0.RELEASE 2016년 7월 29일 JDK 7 지원 -
4.3.6.RELEASE 1.5.0.RELEASE 2017년 1월 30일 JDK 7 지원 -
5.0.4.RELEASE 2.0.0.RELEASE 2018년 5월 1일 JDK 8, 9 지원 JDK 9
5.1.2.RELEASE 2.1.0.RELEASE 2018년 10월 30일 JDK 8, 9 지원 JDK 11
5.2.0.RELEASE 2.2.0.RELEASE 2019년 10월 17일 JDK 8 ~ 13 지원 JDK 13
5.2.6.RELEASE 2.3.0.RELEASE 2020년 5월 15일 JDK 8 ~ 14 지원 JDK 14
5.3.1 2.4.0 2020년 11월 13일 JDK 8 ~ 15 지원 JDK 15
5.3.7 2.5.0 2021년 5월 21일 JDK 8 ~ 16 지원 JDK 16
5.3.13 2.6.0 20221년 11월 19일 JDK 8 ~ 17 지원 JDK 17

살펴보면 JDK의 6개월 release 정책이 적용되기 전까지는 JDK 6와 JDK 7 지원으로 Boot 1.x version이 release 되다가 2.2.0.RELEASE 이후부터 JDK의 release 정책과 맞물려서 minor version이 변경되어 배포되었다.

Spring Framework 6.0과 Spring Boot 3.0

Spring Framework 6에서는 JDK 17이 최소 지원이고 이로 인해 올해 11월에 다음 버전이 나오더라도 5.3.x와 Spring Boot의 2.x도 당분간 지속적으로 개발할 예정이라고 한다.
다만 이후 어느 기간만큼 이 분기를 유지할지는 아직 결정되지 않았다.

https://spring.io/blog/2021/09/02/a-java-17-and-jakarta-ee-9-baseline-for-spring-framework-6

올해 11월에 Spring Framework 6.0과 Spring Boot 3.0의 release는 기존의 major, minor version의 release보다 더 많은 변화가 있을 예정이다.

Java 17 사용

Spring Framework 6이 JDK 11을 건너뛰고 JDK 17을 선택한 이유는 JDK 11이 commercial support 기간이 JDK 8보다 짧고 이미 2023년 말에 단계적으로 중단되며 반면 JDK 17은 최소한 2026년까지 support 기간이 있기 때문에 JDK 11을 과도기 relese로 보기 때문이라고 한다.

Jakarta EE 9 사용

Java EE는 Servlet, JSP, JSF, JMS, JPA, JTA, EJB, Java Mail, JDBC, JNDI 등의 수많은 기능을 포함하고 있는데 오라클이 이를 포기하면서 이클립스 재단으로 넘어갔고 Jakarta EE로 명칭이 변경되었다.

https://jakarta.ee/

Jakarta EE 7, 8의 경우 packaging 이름은 일단 변경되었지만 (ex: javax.persistance-api -> jakarta.persistance-api) 내부 namespace는 기존 그대로 유지하고 있었다.

Jakarta EE는 9에서 내부 namespace를 jakarta.*로 완전히 변경할 예정이고 이 변경되는 버전이 Spring Boot 3.0에 반영된다.

Spring Boot는 이미 Spring Boot 2.2.x 부터 Java EE와 jakarta EE로 병행하여 사용하고 있었고 Spring Boot 3.0에서 Jakarata EE 9로 전환되게 되면 Java EE는 더 이상 사용하지 않고 기존 Java EE 의  namespace와 관련된 모든 주소가 변경되어야 한다.

반응형
profile

파란하늘의 지식창고

@Bluesky_

도움이 되었다면 광고를 클릭해주세요