본문 바로가기
카테고리 없음

JAVA - JDK 17 새로운 기능

by Nomangs 2022. 7. 9.
반응형

표준 Java의 새로운 LTS(장기 지원) 릴리스인 Java 17을 이제 프로덕션 용도로 사용할 수 있습니다. 오라클은 또한 최소 8년의 제품 지원을 받는 LTS 릴리스가 과거의 릴리스 간 3년에서 2년마다 출시될 것이라고 발표했습니다. 비 LTS 릴리스는 Oracle에서 6개월 동안 지원을 받습니다.


새 버전의 표준 Java에 있는 새로운 기능 중에는 보안 향상 기능인 컨텍스트별 역직렬화 필터 지원과 switch 문에 대한 패턴 일치 미리보기가 있습니다. JDK 17은 3년 전에 도착한 마지막 LTS 릴리스인 JDK 11 이후에 추가된 모든 기능을 갖추고 있습니다 .

 

오라클의 자바 플랫폼 그룹 부사장인 조지 사브(Georges Saab)는 더 빈번한 LTS 릴리스를 통해 LTS 릴리스를 사용하려는 기업이 새로운 기능에 더 빨리 액세스할 수 있게 될 것이라고 말했습니다. 다음 LTS 릴리스는 2023년에 Java 21이 될 것입니다. JDK 17을 통해 Oracle은 다음 LTS 이후 1년인 3년 동안 프로덕션에서 Oracle JDK 바이너리를 무료로 사용할 수 있습니다. 그러나 여기에는 엔터프라이즈 프로덕션 지원 구독이 포함되지 않습니다.

수천만 개의 프로덕션 JVM을 대표하는 애플리케이션 모니터링 제공업체 New Relic의 고객 기반 데이터는 LTS 릴리스가 거의 만장일치로 배포되었음을 보여줍니다. New Relic은 거의 100%의 사용자가 가장 최근 LTS 릴리스인 JDK 11 또는 JDK 8을 실행하고 있음을 발견했습니다. New Relic은 90%가 JDK 11을, 10%가 JDK 8을 실행하고 있다고 말했습니다.

그러나 Oracle은 6개월 릴리스의 다운로드가 꾸준히 증가하고 있다고 말했습니다. 개발자는 6개월 릴리스를 사용해 보고 싶어하고 기업은 LTS 릴리스를 배포하려고 합니다.

JDK 17의 프로덕션 빌드는 oracle.com 에서 찾을 수 있습니다 . OpenJDK 오픈 소스 빌드 도 사용할 수 있습니다. JDK 17의 새로운 기능은 다음과 같습니다. 

  • 컨텍스트별 역직렬화 필터애플리케이션이 각 직렬화 작업에 대한 필터를 선택하기 위해 호출되는 JVM 전체 필터 팩토리를 통해 컨텍스트별 및 동적으로 선택된 역직렬화 필터를 구성할 수 있도록 합니다. 이 제안의 동기를 설명하면서 Oracle은 들어오는 데이터 스트림의 내용이 생성되는 개체, 해당 필드의 값 및 개체 간의 참조를 결정하기 때문에 신뢰할 수 없는 데이터를 역직렬화하는 것은 본질적으로 위험한 활동이라고 말했습니다. 많은 용도에서 스트림의 바이트는 알 수 없거나 신뢰할 수 없거나 인증되지 않은 클라이언트에서 수신됩니다. 스트림을 신중하게 구성하면 공격자가 임의 클래스의 코드를 악의적인 의도로 실행할 수 있습니다. 개체 구성에 상태를 변경하거나 다른 작업을 호출하는 부작용이 있는 경우 이러한 작업은 응용 프로그램 개체의 무결성을 손상시킬 수 있습니다. 라이브러리 개체 및 Java 런타임. 직렬화 공격을 비활성화하는 핵심은 임의 클래스의 인스턴스가 역직렬화되는 것을 방지하여 해당 메서드의 직접 또는 간접 실행을 방지하는 것입니다. 역직렬화 필터가 도입되었습니다.Java 9 를 사용하여 애플리케이션 및 라이브러리 코드가 들어오는 데이터 스트림을 역직렬화하기 전에 유효성을 검사할 수 있습니다. java.io.ObjectInputFilter이 코드 는 역직렬화 스트림을 생성할 때 유효성 검사 논리를 제공 합니다. 그러나 명시적으로 유효성 검사를 요청하기 위해 스트림 작성자에 의존하는 것은 제한이 있습니다. JDK Enhancement Proposal 290 은 API, 시스템 속성 또는 보안 속성을 통해 설정할 수 있는 JVM 차원의 역직렬화 필터를 도입하여 이러한 제한 사항을 해결했지만 이 접근 방식에는 특히 복잡한 응용 프로그램에서 제한이 있습니다. 더 나은 접근 방식은 모든 스트림 작성자가 참여할 필요가 없도록 스트림별 필터를 구성하는 것입니다. 계획된 개선 사항은 개발자가 각 역직렬화 컨텍스트 및 사용 사례에 대해 적절한 필터를 구성하고 적용하는 데 도움이 될 것입니다.
  • 항상 엄격한 부동 소수점 의미 체계 의 복원으로 부동strictfp 소수점 연산은 엄격한 부동 소수점 의미 체계( )와 미묘하게 다른 기본 부동 소수점 의미 체계를 모두 사용하는 대신 일관되게 엄격하게 만들어집니다 . 이렇게 하면 Java Standard Edition 1.2에서 엄격 및 기본 부동 소수점 모드가 도입되기 전의 의미 체계와 일치하여 원래 부동 소수점 의미 체계를 언어 및 VM으로 복원합니다. java.lang.Math이 노력의 목표에는 다음을 포함 하여 수치적으로 민감한 라이브러리의 개발을 용이하게 하는 것이 포함됩니다.java.lang.StrictMath. 1990년대 후반에 기본 부동 소수점 의미 체계를 변경하게 된 동기는 원래 Java 언어와 JVM 의미 체계 간의 잘못된 상호 작용과 인기 있는 x86 아키텍처의 x87 부동 소수점 보조 프로세서 명령어 세트의 일부 특성에서 비롯되었습니다. 비정규 피연산자 및 결과를 포함하여 모든 경우에 정확한 부동 소수점 의미 체계를 일치시키려면 추가 명령어의 큰 오버헤드가 필요했습니다. 오버플로 또는 언더플로가 없을 때 결과를 일치시키는 것은 더 적은 오버헤드로 수행될 수 있으며 이는 대략 Java SE 1.2에 도입된 수정된 기본 부동 소수점 의미 체계에서 허용하는 것입니다. 그러나 2001년경부터 펜티엄 4 이상 프로세서에 탑재된 SSE2(Streaming SIMD Extensions 2) 확장은 과도한 오버헤드 없이 간단한 방식으로 엄격한 JVM 부동 소수점 연산을 지원할 수 있습니다.

  • Security Manager 의 사용 중단 , 향후 릴리스에서 제거를 준비합니다. Java 1.0으로 거슬러 올라가면 Security Manager는 클라이언트 측 Java 코드를 보호하는 주요 수단이었으며 서버 측 코드를 보호하는 데 거의 사용되지 않았습니다. 제안의 목표는 차단과 같이 Security Manager가 사용된 특정 좁은 사용 사례를 해결하기 위해 새로운 API 또는 메커니즘이 필요한지 여부를 평가하는 것 System::exit입니다. JDK 17에서도 더 이상 사용되지 않을 예정인 레거시 애플릿 API와 함께 제거하기 위해 Security Manager를 사용하지 않는 계획이 있습니다.
  • switch 에 대한 패턴 일치 미리보기는 Java의 패턴 언어를 확장하여 switch표현식과 명령문이 각각 특정 작업으로 여러 패턴에 대해 테스트할 수 있도록 합니다. 이를 통해 복잡한 데이터 지향 쿼리를 간결하고 안전하게 표현할 수 있습니다. 이 기능의 목표 중에는 switch케이스 레이블에 패턴을 표시할 수 있도록 하여 표현력과 표현 및 문장의 적용을 확장하고, 원할 때의 역사적 null-적대감을 완화하고 , 패턴 일치 논리를 허용하는 switch두 종류의 패턴을 도입 하는 것이 포함됩니다. guarded patterns임의의 부울 표현식으로 정제되고 parenthesized patterns일부 구문 분석 모호성을 해결합니다. JDK 16 에서는instanceof연산자는 유형 패턴을 취하고 패턴 일치를 수행하도록 확장되었습니다. 제안된 적당한 확장은 친숙한 instanceof-and-cast 관용구를 단순화할 수 있도록 합니다.

  • RMI 의 나머지 부분을 유지하면서 RMI(Remote Method Invocation) 활성화 메커니즘을 제거합니다 . RMI 활성화 메커니즘은 더 이상 사용되지 않으며 JDK 15 에서 제거하기 위해 더 이상 사용되지 않습니다 .
  • 봉인된 클래스와 인터페이스 는 다른 클래스나 인터페이스가 확장하거나 구현할 수 있는 것을 제한합니다. 제안의 목표는 클래스 또는 인터페이스의 작성자가 구현을 담당하는 코드를 제어할 수 있도록 하고, 수퍼클래스의 사용을 제한하기 위해 액세스 수정자보다 더 선언적인 방법을 제공하고, 기반을 제공하여 패턴 일치의 미래 방향을 지원하는 것을 포함합니다. 패턴의 철저한 분석을 위해 이 기능은 API 디자이너가 보다 탄력적인 코드를 빌드하는 데 도움이 됩니다.
반응형

댓글