오라클, '자바21' 출시···최소 8년 동안 장기 지원


[테크수다 기자 도안구 eyeball@techsuda.com] 오라클이 자바 최신 버전인 자바 21 을 출시했다. 자바는 세계 1위의 프로그래밍 언어이자 개발 플랫폼이다. 오라클은 2017년 이후 매 6개월마다 주요 기능을 업그레이드하는 정책을 펼치고 있고 지금까지 이어져 오고 있다.


자바 21(오라클 JDK 21)은 수천 가지 성능과 안정성, 보안성 개선 사항을 제공하며, 여기에는 개발자의 생산성 향상과 기업 조직의 혁신 및 성장을 지원하는 플랫폼 개선 사항들이 포함된다.


조지 사브(Georges Saab) 오라클  자바 플랫폼 부문 수석 부사장 겸 오픈JDK(OpenJDK) 이사회 의장은 “자바는 여전히 전 세계 수많은 기업 조직과 수백만 개인들이 강력하며 확장성과 보안성이 뛰어난 애플리케이션 개발을 위해 선택하는 언어이자 플랫폼으로 굳건히 자리하고 있다”라면서 “자바 21에 담긴 새로운 개선 사항들은 개발자가 더욱 빠른 속도로 더욱 탁월한 애플리케이션을 구축할 수 있게 지원한다. 이에 더해 최소 8년간 상용 지원이 제공되기 때문에 고객은 자신이 원하는 속도에 맞춰 마이그레이션을 진행할 수 있다”라고 전했다.


자바 출시 주기


최신 자바 개발 키트(Java Development Kit, JDK)는 15개의 JDK 개선 제안(JDK Enhancement Proposals, JEPs)을 통해 업데이트와 개선 사항을 제공한다.


JDK 21은 오픈JDK 프로젝트 앰버(Amber)의 언어 개선(문자열 템플릿, 레코드 패턴, 스위치를 위한 패턴 매칭, 언네임드(Unnamed) 패턴 및 변수, 언네임드 클래스 및 인스턴스 메인 메서드), 프로젝트 파나마(Project Panama) 개선 사항(외부 함수 & 메모리 API 및 벡터 API), 프로젝트 룸(Project Loom)과 관련된 기능(가상 스레드, 범위가 지정된 값, 구조화된 동시성), 성능 업데이트(세대별 ZGC), 유지 관리 및 폐기 기능(제거를 위한 32비트x86 포트 폐기 및 에이전트 동적 로딩 차단을 위한 준비)을 제공한다.


레드몽크(RedMonk)의 스티븐 오그레디(Stephen O'Grady) 수석 애널리스트 겸 공동 설립자는 “많은 언어가 사용되고 있지만, 자바가 여전히 모든 곳에서 쓰이고 있다.”라며 “빠르게 변화하는 환경 속에서도 자바는 특유의 적응 능력을 통해 개발자들에게 계속해서 가치를 제공할 것이다.”라고 설명했다.



JDK 릴리스의 시간 경과에 따른 변화율은 수년 동안 거의 일정하게 유지되어 왔지만, 6개월 주기로 프로덕션 지원 기능과 개선 사항이 제공되는 속도는 급격히 증가했다.


공식 출시 당시 Java 11부터 Java 21까지에서 수정된 것으로 표시된 2만 4196개의 지라(JIRA) 이슈 중 1만 7288개는 오라클 직원이 완료했으며, 6,908개는 개인 개발자와 다른 조직에서 근무하는 개발자가 기여했다.


오라클은 자바 21에 대해 최소 8년간의 장기 지원을 제공할 예정이다. 연장된 지원 기간 덕분에 기업은 최소한의 유지 관리만으로 애플리케이션을 더 오랜 기간 프로덕션 상태로 유지하고, 궁극적으로는 자체적인 규칙에 따라 마이그레이션하는 유연성을 누릴 수 있다. 자바 생태계에서의 고객 피드백과 사용 사례를 기반으로 오라클은 최소 2032년 1월까지로 자바 11의 장기 지원 역시 연장하기로 했다고 발표했다. 이를 통해, 사용자들은 향후 8년간 오라클의 지원과 업데이트를 더 누릴 수 있게 되었다.


자바 21에 포함된 주요 업데이트는 다음과 같다.


프로젝트 룸 기능


  • JEP 444: 가상 스레드: 경량 가상 스레드를 자바 플랫폼에 도입하여 높은 처리량과 동시성을 갖춘 애플리케이션의 작성, 유지 관리, 관찰 프로세스를 크게 간소화한다. 가상 스레드는 개발자가 기존 JDK 도구 및 기술을 사용해 동시성을 갖춘 애플리케이션의 문제 해결, 디버깅, 프로파일링과 확장을 손쉽게 처리할 수 있게 해주며, 이를 통해 애플리케이션 개발 속도를 높여준다.
  • JEP 446: 범위가 지정된 값(미리보기): 스레드 내부 및 전반의 변경 불가능한 데이터의 공유를 지원한다. 이 기능은 개발자 프로젝트의 사용 편의성, 이해 가능성, 견고성 및 성능을 개선할 수 있게 해 준다.
  • JEP 453: 구조화된 동시성(미리보기): 구조화된 동시성 API를 도입함으로써 동시성 프로그래밍을 간소화할 수 있게 해 준다. 그 결과 취소 또는 종료로 인해 발생하는 공통 위험(스레드 유출, 취소 지연 등)을 제거해 주는 동시성 프로그래밍의 스타일이 개선되고 동시성 코드의 관찰 가능성이 향상된다. 이 기능은 개발자가 오류 처리 및 취소를 단순화하고, 안정성을 개선하고, 관찰 가능성을 높일 수 있게 해준다.



성능 업데이트


  • JEP 439: 세대별 ZGC: Z 가비지 컬렉터(Z Garbage Collector, ZGC)를 확장하여 애플리케이션 성능을 높이고, 최신 오브젝트와 오래된 오브젝트를 세대별로 유지 관리할 수 있다. 세대별 ZGC는 할당 지연의 리스크를 감소시킬 뿐 아니라, 애플리케이션에 요구되는 힙 메모리(heap memory) 및 가비지 컬렉션 CPU의 오버헤드를 낮춤으로써 개발자 생산성을 높여준다.



언어 업데이트 및 향상


  • JEP 430: 문자열 템플릿(미리보기): 런타임 시 연산 되는 값을 포함한 문자열을 쉽게 표현할 수 있게 하여 자바 프로그램의 개발을 간소화하고, 사용자가 제공한 값으로부터 문자열을 구성하고 이를 다른 시스템으로 보내는 프로그램의 보안성을 높인다. 추가로, 텍스트와 표현식이 혼합된 표현식의 가독성이 향상되었고, 중간 문자열 표현 없이도 리터럴 텍스트(literal text) 및 임베디드 표현식(embedded expressions)을 통해 연산 되는 비문자열 값을 생성할 수 있다. 이 기능은 자바 언어를 보다 쉽게 읽고, 쓰고, 유지 관리할 수 있게 함으로써 개발자 생산성을 높여준다.
  • JEP 440: 레코드 패턴(세 번째 미리보기): 패턴 매칭을 확장하여 레코드 클래스의 인스턴스 구조를 해체하고, 중첩 패턴을 추가함으로써 자바 언어를 향상시킨다. 이 기능은 개발자가 패턴 매칭을 보다 정교하고 구성 가능한 데이터 쿼리로 확장할 수 있게 해 주며, 그 결과 개발자 생산성이 향상된다.
  • JEP 441: 스위치를 위한 패턴 매칭: 패턴이 케이스 레이블에 표시되도록 허용함으로써, 스위치 표현식 및 조건문의 표현성과 적용성을 확장한다. 또한 패턴 스위치 조건문이 모든 가능한 입력 값을 지원하도록 요청함으로써 스위치 조건문의 안전성을 개선했으며, 기존의 모든 스위치 표현식 및 조건문이 변경 없이 계속해서 컴파일 되고, 동일한 의미로 실행될 수 있다. 이 기능은 자바 언어를 더욱 의미론적으로 만들어 복잡한 데이터 지향적 쿼리를 간결하고 안전하게 표현함으로써 개발자가 프로젝트를 간소화하고, 안정성을 높일 수 있게 한다.
  • JEP 443: 언네임드 패턴 및 변수(미리보기): 언네임드 패턴이 구성 요소의 이름 또는 유형 정의 없이 레코드 구성 요소와 매칭되고, 초기화는 가능하지만 사용은 불가능한 언네임드 변수에 매칭되게 함으로써 자바 언어를 개선한다. 이 기능은 레코드 패턴의 가독성을 높이고 모든 코드의 유지 관리 가능성을 개선함으로써 개발 프로세스를 간소화한다.
  • JEP 445: 언네임드 클래스 및 인스턴스 메인 메서드(미리보기): 자바 언어의 간소화 및 접근성 개선을 지원하여 교육자가 프로그래밍 개념을 점진적으로 도입할 수 있게 한다. 초보자용 자바 방언(dialect)과 초보자용 툴체인을 별도로 도입하지 않아도 되기 때문에, 모든 자바 프로그램을 컴파일 및 실행하는 데 쓰이는 것과 동일한 도구를 사용해 학생용 프로그램을 컴파일 및 실행할 수 있다. 결과적으로 학생들은 기본 프로그램을 간결한 방식으로 작성하고, 기술 숙련도의 성장 속도에 맞춰 자신의 코드를 원활하게 늘려갈 수 있다. 이 기능은 학생 개발자가 대규모 프로그램을 위해 설계된 언어 기능에 대한 이해 없이도 첫 번째 프로그램을 작성하게 함으로써 생산성을 높여준다.



프로젝트 파나마 미리보기 기능


  • JEP 442: 외부 함수 및 메모리 API(세 번째 미리보기): API를 도입하여 자바 프로그램이 자바 런타임 외부의 코드 및 데이터와 상호 운용될 수 있게 지원한다. 외부 함수(자바 버추얼 머신 외부의 코드)를 효율적으로 실행하고, 외부 메모리(JVM이 관리하지 않는 메모리)에 안전하게 액세스함으로써, 이 새로운 API는 자바 네이티브 인터페이스(Java Native Interface, JNI) 없이도 자바 프로그램이 네이티브 라이브러리를 호출하거나 네이티브 데이터를 처리할 수 있게 지원한다. 이 기능은 사용 편의성, 유연성, 성능, 보안성을 높여준다.
  • JEP 448: 벡터 API(여섯 번째 인큐베이터): API를 도입하여 런타임 시 지원되는 CPU 아키텍처 상의 벡터 명령어로 안정적인 컴파일을 수행하는 벡터 연산들을 표현한다. 이 기능은 광범위한 벡터 연산을 명확하고 간결하게 표현할 수 있는 API에 대한 액세스를 제공함으로써 개발자가 프로젝트 성능을 높일 수 있도록 지원한다.



자바 21은 오픈JDK 및 자바 커뮤니티 프로세스(Java Community Process, JCP)를 통한 오라클 엔지니어들과 전 세계 자바 개발자 커뮤니티 일원들의 폭넓은 협업을 바탕으로 탄생했다. 새로운 개선 사항들과 더불어 자바 관리 서비스(Java Management Service, JMS) 역시 자바 21을 지원한다. JMS는 온프레미스(사내구축형) 또는 기타 클라우드에서 자바 런타임 및 애플리케이션을 관리할 수 있도록 지원하는 통합 콘솔 및 대시보드를 제공하는 오라클 클라우드 인프라스트럭처(Oracle Cloud Infrastructure, OCI) 네이티브 서비스다. 자바 21에 담긴 기능들에 대한 보다 자세한 정보는 자바 21 기술 블로그 게시물에서 확인할 수 있다.


클라우드에 담긴 혁신 기술로 전 세계 자바 생태계 지원


자바는 OCI 기반 클라우드에 배포될 때 최적의 성능, 효율성, 혁신을 제공한다. OCI는 자바 21을 지원하는 최초의 하이퍼스케일 클라우드 중 하나다. 고객은 OCI에서 자바를 실행함으로써 획기적인 비용 절감 효과를 얻을 수 있다. 오라클 자바 SE, 오라클 그랄VM(Oracle GraalVM), 자바 SE 구독 엔터프라이즈 성능 팩(Java SE Subscription Enterprise Performance Pack)은 OCI에서 무료로 제공된다. 개발자들은 이를 활용해 최적화된 비용 대비 성능으로 보다 빠르고 효과적으로 실행되는 애플리케이션을 구축 및 배포할 수 있다.


사용량을 기준으로 요금을 부과하는 오라클 자바 유니버설 SE 구독(Oracle Java Universal SE Subscription) 서비스는 전체 자바 포트폴리오에 대한 우선순위 분류 기반 지원 등 업계 최고 수준의 지원, 그랄VM에 대한 권한, 자바 SE 구독 엔터프라이즈 성능 팩, JMS의 고급 기능들에 대한 액세스 권한, 비즈니스 성장 속도에 따라 업그레이드할 수 있는 유연성을 제공해, IT 조직이 복잡성을 관리하고, 비용을 통제하며, 보안 관련 위험을 줄이는 데 도움을 준다.


자바 21을 사용하는 글로벌 자바 커뮤니티


애자일 디벨로퍼(Agile Developer, Inc.) 벵카트 수브라마니암(Venkat Subramaniam) 설립자는 “자바 21은 가장 중요한 자바 릴리스 중 하나이다. 가상 스레드가 마이크로서비스에서부터 엔터프라이즈 애플리케이션에 이르기까지 비동기 애플리케이션의 개발 및 배포 방식에 영향을 미칠 것이기 때문이다.”라며 “최소한의 코드 작업만으로 리소스에 대한 과도한 수요를 발생시키지 않고 개발자 애플리케이션을 확장해 대량의 IO 운영 및 서비스 호출을 지원할 수 있다. 전보다 저렴한 비용에 더 커진 확장성을 누릴 수 있다는 점에서 프로덕션 환경에 자바를 활용하는 기업 조직들은 큰 혜택을 누릴 수 있다.”라고 설명했다.


드류 대학교(Drew University) 배리 버드(Barry Burd) 교수는 "자바 21에 담긴 '언네임드 클래스 및 인스턴스 메인 메서드' 미리 보기 기능이 매우 기대된다.”라며 “초보자 과정의 학생들이 혼란 없이 빠르고 손쉽게 시작할 수 있게 될 것으로 기대한다. 이제 교재에 상용구 코드 없이도 완벽한 예제를 소개할 수 있게 됐다. 무엇보다도 이 새로운 기능들은 자바에 대단히 중요한 설계 철학과도 일치한다. 마침내 언네임드 클래스가 언네임드 패키지 및 모듈과 결합되는 것이다. 게다가 하위 호환성도 지원하다."라고 말했다.


진 보야스키(Jeanne Boyarsky) 자바 챔피언은 “자바 21에 포함된 연속된 컬렉션 기능(sequenced collection)은 개발자 커뮤니티가 환영할 만한 신기능이다. 이는 개발자들이 J유닛(JUnit) 테스트 수행 시 스트림의 구성요소별 동작 수행 순서에 있어 실수를 없애고, 빌드 서버, 업그레이드 또는 다른 단계에서 해당 테스트에 실패하지 않을 수 있도록 돕는다.”라며 “연속된 컬렉션 기능 덕분에 순서가 정의되기 때문에 예기치 못한 상황은 발생하지 않게 된다.”라고 말했다.


자바 플레이그라운드 및 커뮤니티의 기여를 통한 Dev.java 확장


Dev.java는 자바 개발자들의 공식 웹사이트다. 오라클은 자바 플레이그라운드와 새로운 커뮤니티 기여 기능을 해당 웹사이트의 콘텐츠 카탈로그에 추가했다.


자바 플레이그라운드는 온라인 샌드박스로서 로컬 런타임 또는 통합 개발 환경(IDE) 없이도 사용자가 소규모 자바 코드 스니펫을 입력 및 실행할 수 있게 해 준다. 이제 개발자들은 OCI가 구동하는 브라우저에서 바로 자바 21의 새로운 기능들을 체험할 수 있다.


Dev.java에는 오라클의 자바 팀이 제작한 수백 가지의 모든 수준의 숙련도별 고품질 자바 튜토리얼이 마련되어 있다. 현재 Dev.java는 자바 깃허브 조직(Java GitHub organization) 내에 마련된 새로운 공용 저장소를 통해 커뮤니티의 기여를 수용하고 있다.


개발자들은 벵카트 수브라마니암(Venkat Subramaniam) 박사, 카이 호스트만(Cay Horstmann), 진 보야스키(Jeanne Boyarsky), 하인즈 카버츠(Heinz Kabutz), 폴 앤더슨(Paul Anderson), 게일 앤더슨(Gail Anderson)를 포함한 업계 전문가들의 커뮤니티 기여 내용을 확인할 수 있다.


자바 및 자바의 글로벌 생태계에 대한 자세한 내용은 다음의 웹페이지에서 확인할 수 있다.


  • Dev.java: 자바 학습을 지원하는 공식 포털
  • Inside.java: 오라클 자바 팀 구성원들의 뉴스 및 관점
  • Java YouTube: 자바 학습을 지원하는 공식 유튜브 채널



###



추가 자료



[테크수다 기자 도안구 eyeball@techsuda.com]

Newsletter
디지털 시대, 새로운 정보를 받아보세요!