1. 자바 업데이트 지원 기간
JDK는 6개월마다 다음 버전을 제공하며 이전 버전에 대한 유지보수와 보안 업데이트가 중지된다. 하지만 JDK 8 버전 이후로 3년마다 하나의 버전이 LTS(Long Term Supported)로 지정된다. 이 LTS 버전은 최소 4년 이상(벤더사마다 다름) 업데이트를 제공한다. 현재 LTS 버전은 8과 11버전이 있다.
그 다음으로는 17버전이 예정되었고 2021년 9월 14일에 오라클사가 LTS 출시 주기를 3년에서 2년으로 전환하는 것을제안하여 만약 이 제안이 받아들여진다면 다음 LTS 버전은 23버전이 아니라 21버전이 될 수 있다.
2. 스프링에서 지원하는 JDK 버전
스프링 5.1부터 JDK 최소사양은 1.8이며 권장사양은 JDK 11이다. JDK 8 패치 릴리즈 중 update 60 이상이면 가능하지만 가능한 최신 업데이트 릴리즈로 사용하는 것이 좋다고 한다.
3. JDK 8에서의 변화
병렬 프로그래밍의 중요성이 대두되면서 함수형 패러다임이 재조명되고 자바에서도 이러한 흐름을 따라가는 변화가 있었다. JDK 8에서는 람다식, stream 함수형 인터페이스, stream api등을 통해 함수형 패러다임을 지원한다.
- 람다 표현식
- 함수형 인터페이스
- 메서드 참조
- 스트림 API
- 날짜와 시간 API
- 인터페이스 개선
- Optional
- CompletableFutrue 기능
4. JDK 9에서의 변화
가장 큰 변화인 자바 플랫폼 모듈 시스템은는 JDK를 실행, 컴파일, 빌드 시점에 결합할 수 있도록 모듈로 분할한다. 라이브러리와 대규모 애플리케이션을 더 용이하게 구축할 수 있다.
- 자바 모듈화
- REPL 기능인 JShell
- 통합 JVM 로깅
- HTML5 자바 DOC
- try-with-resource 구문 개선
- 인터페이스 메서드 형식 추가
- 다이아몬드 연산자 개선
- 프로세스 API
- CompletableFuture 기능 개선
- 반응형(reactive) 스트림 API
5. JDK 10에서의 변화
JDK 9에서 6개월만에 나온 릴리즈 버전으로 크게 추가된 기능은 없다.
- 로컬 변수 형식 추론
- G1 GC 개선
6. JDK 11에서의 변화
- HTTP 클라이언트
- 컬렉션 객체를 배열로 변경하는 기능
- var 키워드 지원 확대
- String 클래스 기능 추가
- ZGC: A Scalable Low-Latency GC 추가
- Flight Recorder 추가
7. 결론
보안 및 유지보수 업데이트가 장기적으로 지원되며 스프링 프레임워크에서 공식적으로 권장하는 JDK 8 버전과 JDK 11버전을 후보로 결정하였습니다.
한 설문조사에서 JDK 8에서 JDK 11로 넘어간 프로젝트는 4분의 1이고 아직 넘어가지 않는 주요 이유는 기존 프로젝트가 잘동작해서, 마이그레이션 비용이 커서, 경영상의 이유가 있다고 합니다. 물론 JDK 11 버전의 새 기능이 필요하지 않다는 답변도 27% 있었지만 사용자가 사용하는 새로운 기능이 아니라 GC의 개선과 추가나 Flight Recorder와 같은 성능 개선을 위한 도구들이 추가된 것과 같이 성능에 도움이 되는 개선사항들도 있습니다. 또한 시대의 흐름에 맞춰 HTML5와 HTTP2.0, web socket의 추가되기 때문에 JDK 11로의 변화는 시대의 흐름이 될 것이라 생각합니다. 학습하는 입장에서 JDK 8에서 추가된 함수형 패러다임을 학습하는 것도 중요하지만 그 이후 버전으로의 변화까지 학습하기 위해서 JDK 11로 프로젝트를 진행하는 것이 좋을 것 같습니다.
출처
https://access.redhat.com/articles/1299013#OpenJDK_Life_Cycle
https://adoptopenjdk.net/support.html
https://www.oracle.com/java/technologies/java-se-support-roadmap.html
https://docs.spring.io/spring-framework/docs/current/reference/html/overview.html#overview
Practical 모던 자바 / 장윤기 / 인사이트
https://medium.com/@lazysoul/함수형-프로그래밍이란-d881230f2a5e
https://www.itworld.co.kr/news/106259?page=0,0
https://www.popit.kr/나만-모르고-있던-java9-빠르게-보기/
https://blogs.oracle.com/javamagazine/post/java-long-term-support-lts
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Effective Java] Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2021.07.24 |
---|---|
[JAVA 기초] Method Overriding이란 무엇인가 (0) | 2021.01.15 |
[JAVA 기초] Wrapper Class란 무엇인가 (0) | 2021.01.11 |
[JAVA 참고] JCP, JSR, TCK란 무엇인가 (0) | 2021.01.09 |
[JAVA 기초] JDK, JRE, JVM이란 무엇인가 (0) | 2021.01.09 |