본문 바로가기

OS & network/cloud

오라클 자바 21 릴리즈와 관련 JEP

안녕하세요. 테크넷 마스터 김재벌입니다.

2023년 추석 연휴에 사무실에 나와서 이렇게 하나씩 밀린 일들을 정리하고 있습니다.

올해 오라클 클라우드 월드 2023은 개인적인 사정으로 참여를 못했습니다.

라스베이거스에서 오픈된 행사였고, 꽤나 많은 기술적 진보를 통해 다양한 서비스가 소개 되었습니다.

차근히 하나씩 소개해 보려고 합니다.

 

Java 21 ...릴리즈.... (참고로 저는 자바 1.0을 런칭을 학교에서 보았고, 1.1과 1.2를 주로 학습하고 SCJP를 취득했었습니다..ㅠㅠ 늙었네요..)

 

Java 21은 2023년 9월 19일에 정식 출시되면서 공식적으로 출시되었습니다. 

 

이 릴리스는 현재 표준인 반기별 주기를 사용하는 플랫폼의 12번째 기능 릴리스를 나타냅니다. 
(2024년 3월에 Java 22가 출시될 것으로 예상됩니다.)


Java 21의 JEP는 프로덕션에 바로 사용할 수 있는 몇 가지 중요한 고급 기능을 플랫폼에 제공합니다.

공식 릴리스 블로그 게시물(https://blogs.oracle.com/java/post/the-arrival-of-java-21)  에 설명된 대로 Java 21은 수십 가지의 새로운 기능과 향상된 기능을 제공합니다. 

그 중 15개는 바로 사용할 수 있는 생산 기능 8개를 포함하는 JEP로 나타났습니다. 

 

다른 것들은 미리 보기 및 인큐베이터 기능으로, 귀하와 귀하의 조직이 탐색할 수 있도록 되어 있지만 해당 기능은 향후 Java 릴리스에서 변경될 수 있기 때문에 아직 프로덕션 용도로 사용할 준비가 되어 있지 않습니다.

 

아래 내용은 제가 오라클 블로그의 기사를 번역을 통해 가져온 내용입니다.

20년전에 자바 공부하고 안햇거..ㅠㅠ 아는게 없어요.

암튼 대단하네요....예전에 C하나 배워두면 평생 먹고 산다 했는데 , 자바가 그렇고 , 이제는 파이썬으로 연결되는 듯한 모양새네요.

물론, 자바가 여전히 엔터프라이즈에서 가장 큰 기술 중 하나라는 점은 팩트죠.

 

생산 준비가 완료된 JEP

다음은 Java 21 릴리스에 포함된 즉시 생산 가능한 JEP입니다.

JEP 431: 순차 컬렉션 . 이 JEP는 정의된 만남 순서로 컬렉션을 나타내는 새로운 인터페이스를 도입합니다. 이러한 각 컬렉션에는 잘 정의된 첫 번째 요소, 두 번째 요소 등을 거쳐 마지막 요소까지 포함됩니다. 또한 컬렉션의 첫 번째 요소와 마지막 요소에 액세스하고 해당 요소를 역순으로 처리하기 위한 통일된 API를 제공합니다.

JEP 439: 세대별 ZGC . 이 JEP는 ZGC(Z Garbage Collector)를 확장하여 젊은 개체와 오래된 개체에 대해 별도의 세대를 유지함으로써 애플리케이션 성능을 향상시킵니다 . Generational ZGC로 실행되는 애플리케이션은 할당 지연 위험이 낮고, 필요한 힙 메모리 오버헤드가 낮으며, 가비지 수집 CPU 오버헤드가 낮아야 합니다.

JEP 440: 패턴을 기록합니다 . 이 JEP는 패턴 일치를 레코드 클래스의 인스턴스로 확장하여 보다 정교한 데이터 쿼리를 가능하게 함으로써 Java 프로그래밍 언어를 향상시킵니다. 또한 중첩 패턴을 추가하여 보다 구성 가능한 데이터 쿼리를 만드는 데 도움이 됩니다.

JEP 441: 스위치에 대한 패턴 일치 . 이 JEP는 Java 프로그래밍 언어를 보다 의미론적으로 만들어 생산성을 향상시켜 복잡한 데이터 지향 쿼리를 간결하고 안전하게 표현할 수 있습니다. 케이스 라벨에 패턴이 표시되도록 허용하는 동시에 패턴 전환 문이 가능한 모든 입력 값을 포괄하도록 요구함으로써 이를 수행합니다.

JEP 444: 가상 스레드 . 가상 스레드는 처리량이 높은 동시 애플리케이션을 작성, 유지 관리 및 관찰하는 노력을 크게 줄일 수 있습니다. 이 JEP를 사용하면 요청당 간단한 스레드 스타일로 작성된 서버 애플리케이션을 최적에 가까운 하드웨어 활용으로 확장할 수 있으며 API를 사용하는 기존 코드가 최소한의 변경으로 java.lang.Thread가상 스레드를 채택할 수도 있습니다.

JEP 449: 제거를 위해 Windows 32비트 x86 포트를 더 이상 사용하지 않습니다 . x86 프로세서의 32비트 버전 Windows는 더 이상 사용되지 않습니다. Java 21에서 지원되지만 향후 지원이 중단될 예정입니다. 이 JEP는 Windows 32비트 x86(x86-32)용 빌드를 구성하려고 할 때 오류 메시지를 발행하도록 빌드 시스템을 업데이트합니다. 새로운 구성 옵션을 통해 오류 메시지를 억제할 수 있지만 목표는 해당 플랫폼을 뛰어넘도록 촉구하는 것입니다.

JEP 451: 에이전트의 동적 로딩을 허용하지 않도록 준비합니다 . 이 JEP는 기본적으로 실행 중인 JVM에 에이전트를 로드하는 것을 허용하지 않는 향후 JDK 릴리스에 대비합니다. 에이전트가 실행 중인 JVM에 동적으로 로드될 때 경고를 발행하여 이를 수행합니다. 시작 시 에이전트를 로드하는 서비스 가능성 도구로 인해 어떤 릴리스에서도 경고가 발행되지는 않습니다. 이 JEP는 에이전트를 동적으로 로드하는 기능을 심층 반사 와 같은 소위 "초강력" 기능과 연계합니다 .

JEP 452: 키 캡슐화 메커니즘 API . KEM(키 캡슐화 메커니즘)은 비대칭 또는 공개 키 암호화를 사용하여 대칭 키를 보호하는 최신 암호화 기술을 제공합니다. 이 API를 사용하면 여러 KEM 알고리즘을 사용할 수 있으며 보안 공급자가 Java 코드 또는 기본 코드로 KEM 알고리즘을 구현할 수도 있습니다.

미리보기 및 인큐베이터 JEP

다음은 Java 21의 미리보기 및 인큐베이터입니다. 이러한 JEP를 사용하려면 적절한 플래그를 사용해야 합니다. 자세한 내용은 각 JEP의 설명서를 참조하세요.

JEP 430: 문자열 템플릿(미리보기) . 이 JEP는 런타임에 계산된 값을 포함하는 문자열을 쉽게 표현할 수 있도록 하고, 텍스트가 단일 소스 라인에 들어가든 여러 소스 라인에 걸쳐 있든 상관없이 텍스트와 표현식을 혼합하는 표현식의 가독성을 향상시켜 Java 프로그램 작성을 단순화합니다. 또한 사용자가 제공한 값으로 문자열을 구성하고 이를 다른 시스템에 전달하는 Java 프로그램의 보안도 향상됩니다.

JEP 442: 외부 함수 및 메모리 API(세 번째 미리보기) . 이 JEP는 Java 프로그램이 Java 런타임 외부의 코드 및 데이터와 상호 운용되는 데 도움이 되는 새로운 API를 제공합니다. 외부 함수(JVM 외부 코드)를 효율적으로 호출하고 외부 메모리(JVM에서 관리하지 않는 메모리)에 안전하게 액세스함으로써 API를 사용하면 Java 프로그램이 JNI의 취약성과 위험 없이 기본 라이브러리를 호출하고 기본 데이터를 처리할 수 있습니다. ).

JEP 443: 이름이 지정되지 않은 패턴 및 변수(미리보기) . 이 JEP는 구성 요소의 이름이나 유형을 명시하지 않고 레코드 구성 요소와 일치하는 이름 없는 패턴과 초기화할 수 있지만 사용할 수 없는 이름 없는 변수를 사용하여 Java 언어를 향상시킵니다. 둘 다 밑줄 문자 _로 표시됩니다.

JEP 445: 이름이 지정되지 않은 클래스 및 인스턴스 기본 메서드(미리 보기) . 이 JEP는 교육자가 프로그래밍 개념을 점진적으로 소개할 수 있도록 Java로의 원활한 진입을 제공합니다. 학생들이 대규모 프로그램용으로 설계된 언어 기능을 이해할 필요 없이 첫 번째 프로그램을 작성할 수 있도록 상용구와 의식을 줄임으로써 이를 수행합니다. 동시에 별도의 Java용 초보자 방언이나 별도의 툴체인을 도입하지 않습니다.

JEP 446: 범위가 지정된 값(미리보기) . 이 JEP는 데이터 흐름에 대한 추론을 단순화하기 위해 스레드 내 및 하위 스레드 모두에서 데이터를 공유하는 프로그래밍 모델을 제공합니다. 이 모델은 호출자가 공유한 데이터가 합법적인 피호출자에 의해서만 검색될 수 있도록 보장하고 공유 데이터를 불변으로 처리하여 많은 스레드에서 공유할 수 있도록 하고 런타임 최적화를 가능하게 합니다.

JEP 448: 벡터 API(6번째 인큐베이터) . 이 새로운 API는 런타임 시 지원되는 CPU 아키텍처에서 최적의 벡터 명령으로 안정적으로 컴파일하는 벡터 계산을 표현하므로 동등한 스칼라 계산보다 뛰어난 성능을 달성합니다. 또한 벡터 마스크에 배타적 논리합(XOR) 연산을 추가하고 특히 벡터 요소를 재배열하거나 벡터 간 변환에 사용할 때 벡터 셔플 성능을 향상시킵니다.

JEP 453: 구조화된 동시성(미리보기) . 이 JEP는 구조화된 동시성을 위한 API를 도입하여 동시 프로그래밍을 단순화하고 스레드 누수 및 취소 지연과 같이 취소 및 종료로 인해 발생하는 일반적인 위험을 제거할 수 있는 동시 프로그래밍 스타일을 촉진합니다.