수천 건의 업데이트 제공하는 신규 자바 장기 지원 버전 통해 언어와 플랫폼 개선 및 개발자 생산성 향상 지원
2029년 9월까지 오라클 JDK 17의 보안, 성능 및 버그 수정 업데이트 제공
대한민국 —2021년 9월 17일
오라클이 세계 최고 수준의 프로그래밍 언어이자 개발 플랫폼인 자바 17(Java 17)의 최신 버전을 공개했다. 자바 17은 14개의 JEP(JDK 개선 제안, JDK Enhancement Proposals)와 다양한 성능, 안정성 및 보안 업데이트로 자바 언어 및 플랫폼을 개선하여 개발자들의 생산성 향상에 기여한다.
오라클 JDK 17을 비롯, 향후 출시 예정인 JDK는 다음 LTS 공개 시점까지 자유롭게 무료 사용(free-to-use) 라이선스를 제공한다. 오라클은 2017년 이후 지속적으로 오라클 오픈JDK 버전을 오픈소스 일반 공중라이선스(GPL)에 따라 공개해왔다.
고객을 위한 장기 지원 향상
오라클은 자바 LTS 신규 버전으로 이전하는 기업들에게 더 높은 탄력성을 제공하고자 자바 개발자 커뮤니티 및 JCP와의 협력을 바탕으로 LTS 일정을 개선했다. 오라클은 차기 LTS 버전인 자바 21 발표를 2023년 9월로 예정하고 있으며, 이는 기존의 배포 주기인 3년을 2년으로 단축한 것이다.
현재 오라클 LTS와 자바 SE를 구독 중인 기업 고객은 원하는 일정에 따라 자바 17로 이전할 수 있다. 오라클은 자바 17 고객을 대상으로 최소 2029년 9월까지 보안, 성능, 버그 수정 업데이트를 제공해나갈 방침이다.
조지 사브(George Saab) 오라클 자바 플랫폼 그룹 개발 담당 부사장은 “오라클은 지난 3년간 다수의 개발자들이 애용해온 최신 기능에 대한 의견에 귀 기울였으며, 이를 통해 6개월 단위의 배포 주기가 개발자 생태계에 성공적으로 안착했음을 확인했다”며 “오늘날 자바 개발자들이 당면한 가장 큰 과제 중 하나는 최신 LTS 버전의 사용만을 요구하는 기업이다. LTS 버전의 출시 주기가 2년으로 변경된 만큼, 보안을 우선하는 기업의 개발자들은 기능별 선호도와 필요에 따른 더 많은 선택권을 확보하게 되었다”고 말했다.
IDC의 소프트웨어 개발 담당 부사장인 아르날 다야라트나(Arnal Dayaratna) 박사는 “오라클은 장기 지원 버전의 출시 주기를 2년으로 변경하고 더욱 유연한 신규 라이선스와 함께 오라클 JDK의 이용 기간 확대를 보장함으로써 자바 커뮤니티에 더 많은 혜택을 제공하기 위한 변화를 모색하고 있다”며 “이러한 변화를 통해 클라우드, 온프레미스, 하이브리드 환경에서 현대화된 애플리케이션을 배포하기 위해 복잡성을 관리하고자 하는 기업에게 한층 높은 유연성을 제공할 것이다”고 덧붙였다.
클라우드 환경의 자바 도입 가속화
자바는 오늘날 가장 성공한 개발 플랫폼 가운데 하나로서, 끊임없는 혁신을 기반으로 개발자들의 진화하는 요구사항을 해결하는 과정을 통해 완성되었다. 최근 오라클은 클라우드 환경에서 자바의 도입 속도를 향상하기 위해 오라클 자바 관리 서비스(Oracle Java Management Service)를 도입했다. 새롭게 공개된 OCI(Oracle Cloud Infrastructure) 전용 서비스는 온프레미스와 모든 클라우드 환경에서 기업의 자바 런타임 및 애플리케이션 관리를 지원한다.
자바 관리 서비스는 개발 및 운영 단계에서 실행되는 자바 버전을 포함한 고객의 환경에 설치된 모든 버전의 자바 배포에 대한 전사적 수준의 가시성을 제공한다. 이를 통해 운영 중인 자바 애플리케이션 가운데 비정상적인 사례와 설치된 모든 자바 버전의 최신 보안 패치 여부를 확인할 수 있다.
JDK 17은 신규 언어 개선 사항, 라이브러리 업데이트, 신규 애플 컴퓨터 지원, 레거시 기능의 삭제 및 지원 중단과 현재 작성된 코드에 대한 JDK 차기 버전에서의 작동을 보장하는 작업을 포함하며, 자바 커뮤니티의 의견을 수렴하기 위한 기능 미리 보기와 API 인큐베이팅 또한 제공한다. JDK 17의 주요 업데이트는 다음과 같다:
자바 언어 개선 사항
JEP 409: 봉인 클래스 – 봉인 클래스 및 인터페이스는 다른 클래스나 인터페이스에 의한 확장 및 구현을 제한한다. 이는 자바 언어를 발전시켜 개발자 생산성을 높이고자 하는 프로젝트 앰버(Project Amber)로부터 도입한 여러 개선 사항 중 하나이다.
라이브러리 업데이트 및 개선 사항
JEP 306: 항상 엄격한 부동 소수점 문법 복원 – 자바 프로그래밍 언어 및 자바 가상 머신에는 기본적으로 엄격한 부동 소수점 문법(semantics)만이 존재했다. 하드웨어 아키텍처의 제한 사항을 수용하기 위해 자바 1.2부터 이처럼 엄격했던 문법에 대한 예외 사항을 기본적으로 채택하였으나, 해당 예외가 더 이상 유용하거나 필요하지 않기에 JEP 306를 통해 이를 제거했다.
JEP 356: 향상된 의사 난수 생성기 – 의사 난수 생성기(Pseudo-Random Number Generator)를 위한 새로운 인터페이스 타입과 구현을 제공한다. 해당 변경사항은 개별 의사 난수 생성기 사이의 상호운용성을 개선하며 요구 사항에 부합하는 알고리즘 구현을 위해 직접 코드를 작성하지 않고도 손쉽게 구현할 수 있도록 지원한다.
JEP 382: 신규 맥OS 렌더링 파이프라인 – 애플 메탈 API를 사용하는 맥OS용 자바 2D 파이프라인을 구현한다. 새 파이프라인은 지원이 중단된 애플 OpenGL API에 대한 JDK의 의존성을 줄인다.
새로운 플랫폼 지원
JEP 391: 맥OS AArch64 포팅 – JDK를 맥OS/AArch64 플랫폼으로 포팅함으로써 새로운 Arm 64 기반의 애플 실리콘 컴퓨터에서 자바 애플리케이션을 자체적으로 실행하는 것이 가능해졌다.
삭제 및 지원 중단
JEP 398: 삭제 예정된 애플릿 API 지원 중단 – 모든 웹 브라우저 공급업체가 자바 브라우저 플러그인에 대한 지원을 중단했거나 이에 대한 계획을 발표하였다. 애플릿 API는 2017년 9월 자바 9에서 지원이 중단된 바 있으나, 당시에는 삭제를 위한 조치는 아니었다.
JEP 407:원격 RMI 활성화 삭제 – 원격 함수 호출(remote method invocation)을 활성화하는 메커니즘이 삭제되었다. 기타 RMI 관련 사항은 유지된다.
JEP 410: AOT 및 JIT 컴파일러 삭제 – 자바 기반의 AOT(ahead-of-time) 및 JIT(just-in-time)는 실험적인 컴파일러로서 채택이 원활하지 않았으며 JDK 16에서 이미 선택적인 제거가 가능했다. 해당 JEP는 JDK 소스 코드에서 관련 구성요소를 삭제한다.
JEP 411: 삭제 예정된 보안 매니저 지원 중단 – 보안 매니저(Security Manager)는 자바 1.0부터 탑재되었으나, 장기간 고객사에서 사용하는 자바 코드를 보호하는 주요 수단이 아니었으며 서버에서 동작하는 자바 코드 보안을 위해서도 거의 사용되지 않았다. 향후 버전에서 이를 제거함으로써 유지 관리 부담이 현저히 감소하고 자바 플랫폼이 개선될 것이다.
미래를 대비한 자바 프로그램
JEP 403: JDK 내부의 강력한 캡슐화 – - JDK 9부터 JDK 16까지 단일 커맨드 라인 입력을 통해 가능했던 내부 구성 요소의 강력한 캡슐화 해제가 차단된다. 여전히 기존에 존재하는 내부 API를 통해 이에 접근할 수 있지만, 커맨드 라인 매개변수나 JAR manifest 파일의 속성을 이용하여 강력한 캡슐화를 해제하고자 하는 패키지 목록을 지정해야 한다. 해당 변경 사항은 애플리케이션 보안을 강화하고 JDK를 이용해 내부적으로 구현된 비표준 세부사항에 대한 종속성을 감소시킨다.
다음 JDK 버전 기능의 미리보기 및 인큐베이팅
JEP 406: switch를 위한 패턴 매칭(미리보기) – 개별 작업이 할당된 다양한 패턴을 테스트하는 switch 구문을 허용한다. 이는 복잡한 데이터에 사용되는 질의를 간결하고 안전하게 작성하도록 돕는다.
JEP 412: 외부 함수와 메모리API(인큐베이팅) – 자바 런타임 외부의 코드와 데이터를 자바 프로그램과 상호운용하기 위해 JDK 14와 JDK 15에서 도입된 인큐베이팅 API가 개선되었다. 해당 API는 외부 함수(즉 JVM 외부의 코드)를 효율적으로 호출하고 외부 메모리에 안전하게 접근하도록 한다. 이를 통해 자바 프로그램이 네이티브 라이브러리를 호출하거나 네이티브 데이터를 처리하는 과정에서 발생 가능한 JNI(Java Native Interface)의 불안정성과 복잡성을 방지한다. 이 API는 다른 언어로 작성된 코드와 자바 사이의 상호작용을 개선하는 프로젝트 파나마(Project Panama)에서 개발되고 있다.
JEP 414: Vector API(2차 인큐베이팅) – 해당 기능을 지원하는 CPU 아키텍처의 벡터 연산 명령을 최적화하기 위해 런타임에서 안정적으로 컴파일 가능한 벡터 연산 문법을 지원한다. 이를 통해 동일한 스칼라 연산 대비 우월한 성능을 달성할 수 있다.