1. Java 17로 전환을 고려해야 하는 이유

김리원·2021년 9월 1일
3

Java 17로의 전환

목록 보기
1/6

Java 17 출시

Java 17이 2021년 9월 출시됩니다. 이전 버전과 크게 다른 부분은 LTS(Long Term Support)라는 지원기간이 긴 버전이기 때문에 앞으로 이 버전을 사용하는 프로젝트와 서비스가 많아질 가능성이 높습니다. Java 17이외의 LTS는 Java 8과 Java 11이 대표적이지만, Java 8의 종료일정(EOL, End of Life)이 Java 11보다 뒤인 JDK(Java Development Kit)제품이 다양한 관계로 현재 Java 8이 가장 널리 사용되고 있는 상황입니다.

따라서, 이 글에서는 Java 8이후 Java 17까지 어떻게 변해 왔는지를 정리하여 소개합니다. 물론 이 글을 쓰는 시점에서는 Java 17 정식버전이 출시되지 않았기 떄문에 Javadoc에서 Early Access 버전을 참조하고 있습니다.

참고 URL: https://download.java.net/java/early_access/jdk17/docs/api

Java 출시 주기와 LTS

원래 Java는 2년마다 크게 새로운 기능의 도입과 같이 새로운 버전을 출시할 계획이었습니다. 그러나, Java 10부터는 6개월 단위로 출시가 되도록 변경되면서 지원기간도 LTS(긴버전) 과 짧은 버전으로 나뉘어졌습니다.

6개월단위 출시 주기

Java가 발표된 후, 25년 이상 개발이 지속되고 있으며, 현재는 Oracle사가 Java SE(Java Platform Standard Edition)의 OSS(Open Source Software)기반 참조 구현이 OpenJDK 개발을 후원하고 리드하고 있습니다.

출시 주기 고정

Java 9까지는 Oracle사의 주도하에 새로운 기능을 개발 완료시기에 맞춰 출시했습니다. 그러나, 이 방식은 도입 예정인 새로운 기능 개발이 지연되는 경우 그에 따라 출시일정도 변경하게 됩니다. 사실상, Java 6 이후는 Java문법의 개선람다식, 모듈화 등의 새로운 기능을 도입하기 위해 개발이 이루어지고 있지만, 당초 계속보다 자주 변경되어 결국 출시가 크게 지연되면서 Java 8은 8개월가량 소요되었고, Java 9는 1년 6개월이나 지연되었습니다. 이때 Java 9를 출시하는 시점에서 Oracle사는 앞으로 Java 출시 주기를 6개월 단위로 기간을 정하고 발표하였고, 이후 출시 주기가 고정되게 됩니다.

출시 주기가 고정화의 장점

출시 주기가 고정화되면 다음과 같은 사항이 개선됩니다.
첫번쨰, 작은 새로운 기능을 빠르게 제공된다는 점입니다. 특히 HTTP/2등의 기술혁신이 빠른 웹기술에 대한 대응과 새로운 디지털 서명 알고리즘등 보안대책 컨테이너 기술 대응이 지연될 경우, 요구사항에 맞춰 다른 프로그래밍 언어로 이동하는 것도 현실적이라고 봅니다.

두번쨰, 출시 일정이 명확하게 되어 Java 업데이트 지원이 필요한 시기를 정확하게 알게 됩니다. 지금까지 다음 버전이 출시될 때까지의 기간이 모두 달랐기 떄문에 언제 업데이트 지원이 필요한 것인지 알기 어렵고, 비용이나 위험부담을 설명하기 어렵게 되었습니다.

커뮤니티의 반응

Oracle사의 출시 주기 고정화와 동시에 주요 JDK제품인 Oracle JDK의 무상 제공은 6개월인 것을 발표하였기 때문에 Java가 미래에 유료화하여 외부에서는 사용하기 어렵게 되는 것이 아닌지 사용자들 사이에서 우려가 깊어 졌습니다.
이에 대해 Oracle사의 빌드외에도 OpenJDK빌드를 제공하여 무료 바이너리를 제공하는 것이 발표되었습니다. 이런 분위기를 통해 전세계 Java 개발자들에 의해 집필되 문서에는 "Java is Still Free"가 표시되어 있습니다.이에 따라 사회 혼란도 줄어들게 되고 새로운 출시주기를 인정하게 됩니다.

유지보수 및 지원

지금까지의 OpenJDK는 모든 버전에 대한 취약점 대응 및 버그 수정등의 유지관리가 이루어지고 있습니다. Oracle사의 유지보수 리드로 몇년 동안 취약점 대응 및 버그 수정을 하고 있고, 이후에는 오픈소스그룹에서 유지보수 리드 대상이 나타나면 계속 유지관리가 이루어지는 형태였습니다. 이 유지관리가 이러우지고 있는 기간과 각 배포자가 제공하는 각종 서비스 지원기간은 거의 같았습니다.

유지보수 기간의 변화

출시주기가 6개월단위로 되면서 모든 버전에 대한 몇년동안 유지보수를 계속하는 것은 개발자의 자원으로는 현실적이지 못했습니다.
Oracle사에 따르면, OpenJDK의 유지보수 기간은 6개월 단위로 되었다고 합니다. 이는 LTS인 Java 11도 마찬가지입니다. 이에 대해서 Java 6등으로 유지보수 리드를 입증한 Red Hot의 LTS인 Java 11을 계속해서 유지보수할 것을 발표하였고 실제로 유지보수 리드로 올라가면서 유지보수가 진행되고 있습니다.

지원 기간의 변화

메인 JDK 패키지 배포 업체인 Oracle사는 Java 11 이후 3년마다 LTS버전을 출시한다고 발표하였습니다. 다른 버전들은 다음 버전이 나올 때까지만 6개월 단위로 단기지원을 하고 있습니다.
다른 JDK 제품 지원 기간은 다 다르지만, LTS기준 버전은 Oracle사와 Red Hot사에 맞게 제품이 다양합니다.
또한, LTS가 아닌 버전은 안정성이 낮은 테스트 버전이라고 생각하는 사람도 있을지 모르지만, Java의 정책은 모든 버전에 상용화 시 견딜 수 있는 안정성을 담보하고 있어 테스트 기능 도입도 변함없이 사용합니다.

Java 8의 EOL과 이후의 EOL의 차이점

Java 9 출시 이후 출시주기 변경이나 OpenJDK커뮤니티에서 Oracle사의 대응이 변화함에 따라,
"지원이 앞으로도 진행되는가?"
"Java 9이상 버전으로 업데이트해도 괜찮을가?"
"Java를 계속 사용해도 괜찮은가?"
라는 의문과 혼란이 야기되었습니다.

이런 가운데 다른 배포판을 제공하는 곳들이 Java 8의 지원 기간을 재검토하면서 Java 8지원 종료일정이 Java 11보다 더 긴 역전현상이 발생하였습니다. 예를 들어 유지보수 리드를 하고 있는 Oracle사와 Red Hot사를 비교해 봅시다.

Oracle JDK (Extended Support)

  • Java 8 : 2030년 12월까지
  • Java 11 : 2026년 9월까지
  • Java 17 : 2029년 9월까지

Red Hot

  • Java 8 : 2026년 5월까지
  • Java 11 : 2024년 10월까지
  • Java 17 : 미발표 (2021.8기준)

유상 서비스이지만 최대 4년이나 Java 8이 Java 11보다 긴 기간을 유지보수한다는 결과가 나왔습니다. 이로 인해 Java 11로 업그레이드에 대한 부담이 커져 Java 8에서 Java 11대신 Java 17로 업데이트를 검토하는 프로젝트들이 많다고 생각합니다.

Java 8부터 Java 17까지의 변화

앞에서 이야기한 것들을 감안하여 이번에는 Java 8부터 Java 17까지의 변화에 대해서 이야기합니다.

새로운 기능에 대한 개발 진행방식

Java의 기능 변경(추가, 확장, 비추천화, 삭제)는 JEP(Java Enhancement Proposal)로 제안되어 OpenJDK개발 커뮤니티에서 대응이 이루어집니다. 대응이 이루어진 JEP목록은 OpenJDK 사이트에 있는 각 버전의 페이지 및 버그 트래커인 JBS(Java Bug System)에서 확인할 수 있습니다.

표준기능과 Incubator, Preview기능

출시 주기 변경에 따라 다음과 같은 새로운 기능을 테스트형태로 도입하고 피드백을 얻어 기능을 발전시키는 노력이 이루어지게 되었습니다.

  • Incubator : 피드백에 의한 설계 변경을 유연하게 하는 것을 목적으로 한 시험으로 API를 도입하기 위한 모듈 (jdk.incubator)
  • Preview : 테스트로 도입되는 Java언어 및 JVM(Java Virtual Machine) 사양입니다. 컴파일 및 실행할 경우 --enable-preview 옵션을 추가해야 합니다.
  • Standard : 위 테스트 단계에서 수정보완 후, 정식버전으로 올릴때 사용합니다.

Java 8 이후의 변경사항

Java 8 이후에는 다양한 기능확장이나 변경이 포함되어 있습니다. 이 글에서는 아래 크게 4가지 카테고리로 나누어 설명합니다.

  • 모듈시스템 : Java 8에서 Java 17로 이행하는데 있어서 가장 큰 장애물로 모듈화에 대해서 설명합니다.
  • Java 언어사양의 발전에 따른 새로운 API : Java 17까지 도입된 언어사양과 새로운 API 발전에 대해 설명합니다.
  • Java 17로의 전환 : Java 호환성 설명 및 기존 Java 애플리케이션을 Java 17로 마이그레이드션하는 방법에 대해 설명합니다.
profile
개발자, IT강사, sage.riwon.kim@gmail.com

1개의 댓글

comment-user-thumbnail
2022년 11월 29일

흠... Red 'hot'이 아니고 Red 'hat' 아닌가요.. 이건좀...

답글 달기