1. OpenJDK란?
OpenJDK는 Java SE(Standard Edition)의 오픈소스 구현체로, Java가 지금의 오라클에 속하기 전인 2006년 썬 마이크로시스템즈 시절에 시작한 프로젝트입니다. 최초 배포 버전은 JDK 6입니다. 2018년 6월 21일 오라클에서 Java SE에 대한 유료 구독 모델을 발표했고, 대안으로 OpenJDK가 급부상하게 되었습니다. 이에 따라 최근 활발하게 연구가 진행되고 있으며, 다양한 버전의 OpenJDK 구현체들이 나오고 있습니다.
2. OpenJDK와 OracleJDK의 차이
OpenJDK가 처음 나왔을 당시에는 OpenJDK가 OracleJDK보다 성능이나 안정성이 크게 떨어졌지만, 최근에 와서는 일부 OracleJDK에만 들어가는 JRockit 관련 코드, JavaFX, 글꼴관련 렌더링 코드, Applet, Java WebStart구현, Java Plugin 등 몇몇 유틸 기능을 제외하면 큰 차이는 없으며, Java 11부터 공개되는 OpenJDK는 Timezone Updater나 Usage Logger 같은 일부 기능을 제외하면 OracleJDK와 동일한 코드로 빌드됩니다.
3. OpenJDK 구현체들
아래는 OpenJDK프로젝트의 몇 가지 구현체들입니다. 대부분 LTS에 초점이 맞춰져 있으며 구현체 별로 주로 자주 사용하는 기능이나 GC(Garbage Collection)에 대한 성능을 개선하고 있습니다.
※ LTS : Long Term Support, 장기 지원 버전
▶ Zulu
Azul Systems에서 빌드하고 있는 OpenJDK LTS를 지원합니다. 추가로 글꼴 렌더링을 위한 Monotype ™ 글꼴이 포함된 Zulu Commercial Compatibility Kit (CCK)와 확장 암호 길이 정책 파일을 포함하는 Zulu Cryptography Extension Kit를 포함한 추가 패키지를 제공합니다. Windows, MacOS, Linux용 빌드를 제공하고 있습니다.
Java의 아버지 제임스 고슬링이 현재 재직하고 있는 Amazon에서 빌드한 OpenJDK 구현체로 LTS를 지원하며, 무료입니다. Java8 버전은 2023년 6월, Java11 버전은 2024년 6월까지 보안업데이트를 제공할 예정이라고 합니다. Amazon Linux 2, Windows, macOS에서 사용 가능합니다.
RedHat Enterprise Linux 사용 고객에게 제공하는 OpenJDK로 LTS를 지원합니다. RedHat OpenJDK 11에는 OpenJDK12에 들어갈 예정인 Shenandoah Garbage Collector가 포함되어 있습니다. 이 Garbage Collector는 Full GC가 일어날 경우 발생하는 Stop the world 시간이 매우 적게 발생하도록 개선한 특징이 있습니다. RHEL과 Windows에서 사용이 가능합니다.
※ Full GC(Garbage Collection) : JVM의 메모리가 더 이상 Stop the world를 발생시키지 않는 Young GC로 해결이 안될 때 전체 메모리를 정리하기 위해 발생하는 GC.
※ Stop the world : 전체 메모리를 정리하기 위해 JVM이 모든 동작을 멈추는 상태
대부분의 구현체들이 기업에 의해 빌드되는 반면 AdoptOpenJDK는 커뮤니티에 의해 빌드되고 있는 구현체 입니다. 모든 플랫폼에서 신뢰하며 사용할 수 있는 OpenJDK를 목표로 하고 있으며, Azul Systems, IBM, Microsoft 등에서 후원하고 있습니다. 아직 오라클과 TCK 인증을 받기 위한 계약을 맺지 못했지만, 품질에는 문제가 없으며, 오라클과 이 문제에 대해 지속적인 협력을 할 것이라고 합니다. 최소한 Java8 버전은 2023년 9월, Java11 버전은 2022년 9월까지 LTS를 제공할 예정이고, 모든 플랫폼에서의 동작을 지향하는 만큼 OpenJDK 구현체 중 가장 많은 OS를 지원하고 있습니다. Linux, Windows, macOS, Solaris, AIX에서 사용 가능합니다.
※ TCK인증 : Java 기술을 구현한 VM이 규격에 맞게 구현되었는지 검증하는 테스트 프로그램과 도구인 TCK(Technology Compatibility Kit)를 이용해 검증되었다는 표시
▶ GraalVM
대부분의 구현체들이 LTS에 초점이 맞춰져 있는데 반해 GraalVM은 새로운 시도를 하고 있습니다. 고성능 Polyglot VM으로 Java, Scala, Kotlin, Clojure, C, C++, JavaScript, Python, Ruby, R 등의 언어를 지원하며, Native 컴파일을 통한 성능향상 및 메모리효율을 높일 수 있어, 클라우드 및 컨테이너 환경에서의 유용성으로 주목 받고 있습니다. Linux와 macOS에서 사용 가능합니다.
※ Polyglot : 여러 언어를 사용하는 것
4. GraalVM의 특징
2018년 11월 12일부터 16일까지 벨기에에서 열린 Devoxx 2018 행사에서 GraalVM에 Kotlin coroutine을 이용한 SpringBoot 어플리케이션을 Native로 컴파일해서 6ms만에 부팅한 시연이 있었습니다. 이처럼 놀라운 성능을 보여준 GraalVM에는 어떤 특징이 있는지 몇 가지 살펴보겠습니다.
※ coroutine : non-blocking 작업을 위한 동시성 기법
▶ Polyglot
GraalVM은 많은 프로그래밍 언어를 해석할 수 있는 PolyglotVM 입니다. 그렇기 때문에 자체 제공 API를 통해 Java에서 Python 함수를 호출하거나, C에서 Java코드를 호출 하는 등 다양한 언어를 조합해 오버헤드 없이 사용할 수 있어, 기존에 다른 언어를 사용하기 위해 인터페이스나 API 등을 만들어야하는 제약에서 벗어 날 수 있습니다. 지원하는 언어는 Java, Scala, Kotlin, Clojure, C, C++, JavaScript, Python, Ruby, R 등입니다.
▶ JVM 기반 언어의 Native 컴파일
Java, Scala, Clojure, Kotlin과 같은 JVM 기반 언어를 VM 위에서 동작하지 않고 실제 장비에서 동작할 수 있도록 기계어로 작성된 Native 실행 파일로 미리 컴파일 할 수 있습니다. 생성된 프로그램은 Java VM에서 동작하는 기존 프로그램에 비해 시작 시간이 빨라지고 실행 중에 사용하는 메모리가 줄어듭니다.
▶ 더 빠른 Java 실행
OracleJDK에 포함된 표준 JIT 컴파일러에서는 할 수 없는 부분 탈출 분석과 같은 강력한 최적화 기능을 제공하는 JIT 컴파일러가 포함되어 있습니다. 이 기술로 Java 어플리케이션을 더 빠르게 실행 할 수 있습니다.
※ JIT 컴파일러 : Just In Time 컴파일러의 약자로, 바이트코드로 컴파일된 Java 클래스 파일을 실행 시점에 기계어로 번역해 주는 컴파일러
▶ Java Code의 Native 라이브러리화
Java 실행 파일을 Native 실행파일로 컴파일 할 수 있기 때문에 C로 개발된 프로그램에서 호출할 수 있는 Native 라이브러리 형태로도 빌드가 가능합니다. 이를 통해 C에서 Java에서 제공하는 수많은 라이브러리들을 사용하게 할 수 있습니다.
5. 마치며
오라클의 Java 구독 모델의 변화로 촉발된 OpenJDK 붐으로 기업과 커뮤니티들이 다양하고 많은 시도를 하고 있습니다. 이 현상이 언제까지 지속될지 모르겠지만, 조금은 정체되어 있던 Java 언어 발전에 긍정적인 영향을 미쳐 급변해가는 기술흐름에 빠르게 따라가는 언어가 될 수 있지 않을까 생각합니다.
OpenJDK에 대하여 더 알고싶으신가요? 여기를 눌러 문의해보세요!
'엑셈 경쟁력 > 엑.기.스' 카테고리의 다른 글
엑기스 | AIOps가 뭐지? (0) | 2019.03.07 |
---|---|
엑기스 | 클라우드 환경에서의 통합 관제 (0) | 2019.02.12 |
엑기스| 개발자가 바라본 대시보드 (0) | 2018.11.05 |
엑기스 | 새로운 시도, Auto ML (0) | 2018.10.01 |
엑기스 | 쉽게 이해하는 시계열데이터 비정상탐지 (0) | 2018.09.05 |
댓글