ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JDK 내부의 강력한 캡슐화
    공부/자바 2023. 7. 27. 23:33
    728x90
    JDK 9~16까지 단일 커맨드 라인 입력을 통해 가능했던 내부 구성 요소의 강력한 캡슐화 해제가 차단된다. 커맨드 라인 매개변수나 JAR manifest 파일의 속성을 이용하여 강력한 캡슐화를 해제하고자 하는 패키지 목록을 지정해야 한다.

    목표

    JDK의 보안 및 유지보수성을 지속적으로 개선한다.
    개발자가 내부 요소 사용에서 표준 API 사용으로 마이그레이션하도록 권장하여 개발자와 사용자 모두 번거로움 없이 향후 Java 릴리즈로 업그레이드 할 수 있다.

    동기

    수년 동안 개발자는 JDK 내부 요소를 보안과 유지 관리성을 모두 손상시키는 방식으로 사용했다.
    Java 9에서는 내부 요소에 대한 접근을 제한하는 강력한 캡슐화를 제공하는 모듈을 활용하여 JDK의 보안 및 유지관리 가능성을 개선하였다.
    JDK 16에서는 중요한 내부 API를 제외하고 강력한 캡슐화를 기본 동작으로 만들었고, 최종 사용자가 JDK 8에 존재하는 내부 요소에 접근하기 위해 완화된 강력한 캡슐화를 선택 가능하다.

    설명

    JDK의 대부분 com.sun.*의 패키지는 내부용이지만 일부는 외부용으로 지원된다. 이러한 지원 패키지는 JDK 9 에서 내보낼 예정이므로 공용 API에 대해 계속 프로그래밍 할 수 있지만 더 이상 열리지 않는다.
    The Compiler Tree API in the jdk.compiler module,
    The HTTP Server API in the jdk.httpserver module,
    The SCTP API in the jdk.sctp module, and
    JDK-specific extensions to the NIO API in the com.sun.nio.file package of the jdk.unsupported module.


    위험 및 가정

    java.lang.ClassLoader의 protected defineClass -> java.lang.invoke.MethodHandles.Lookup::defineClass 변경
    sun.util.calendar.ZoneInfo -> java.time API 사용
    com.sun.rowset SQL 처리 코드 -> javax.sql.rowset 사용
    com.sun.tools.javac.* 소스 코드 처리 도구 -> javax.tools, javax.lang.model, com.sun.source.* API 사용
    sun.security.tools.keytool.CertAndKeyGen -> 제 3자 라이브러리 사용
    JDK의 내부 Xerces XML 프로세서를 사용하는 코드 -> Maven Central에서 사용 가능한 독립적인 Xerces 라이브러리의 복사본
    JDK의 내부 ASM 바이트코드 라이브러리를 사용하는 코드 -> Maven Central에서 사용 가능한 독립적인 ASM 라이브러리의 복사본을 대신 사용

    1. jdeps 도구를 사용하여 JDK의 내부 요소에 의존하는 코드를 식별
    2. 표준 대체 수단이 제공될 경우 해당 수단을 사용하도록 전환
    3. 그렇지 않은 경우, Project Jigsaw 메일링 리스트에서 새로운 표준 API에 대한 강력한 사례를 환영한다. 그러나 사용이 널리 확산되지 않은 내부 요소에 대해서는 새로운 표준 API를 정의하기 어려울 수 있다.
    4. 기존 코드를 테스트하는 데 사용 가능한 JDK 11과 같은 기존 릴리스를 사용. 먼저 --illegal-access=warn 옵션을 사용하여 리플렉션을 통해 접근하는 내부 요소를 식별하고, 그런 다음 --illegal-access=debug 옵션을 사용하여 잘못된 코드를 정확히 찾아내고, 마지막으로 --illegal-access=deny 옵션을 사용하여 테스트

    위와 같은 사항을 모든 개발자들에게 권장한다.

     

    728x90
    반응형

    '공부 > 자바' 카테고리의 다른 글

    switch를 위한 패턴 매칭  (0) 2023.07.29
    17 preview version 안되는 오류  (0) 2023.07.29
    스프링부트 웹레이어에서 테스트  (0) 2023.07.27
    스프링 부트 3.0 이후 gradle 에러  (0) 2023.07.27
    JDK17  (0) 2023.07.27

    댓글

Designed by Tistory.