GraalVM의 포지션과 역할에 대하여..

GraalVM의 포지션과 역할에 대하여..

2019년 5월에 GraalVM이 GA되었고, 여러 프레임워크(Spring, SpringFoo, Micornut, Picocli, Quarkus)가 GraalVM 지원을 발표하거나 다양한 가능성을 제시하면서 최근에 GraalVM에 대한 관심이 점차 높아지고 있습니다. 또한 GraalVM 자체가 어떤 의미를 갖는지 궁금해하시는 분들이 많아지고 있습니다. 최근에 GraalVM을 주제로 세미나를 진행하면 다음과 같은 질문을 자주 받습니다.

  • 오라클에서 GraalVM을 만든 이유?
  • 오라클에서 GraalVM이 갖는 포지션과 역할 무엇인가?
  • GraalVM은 파일럿 JDK인가? 운영 환경에 적용할 수 있는가?
  • 오라클은 GraalVM CE(Community Edition)을 계속 지원할 것인가?

현재 이와 같은 질의에 대한 오라클의 공식적인 발표는 없기에 명확하게 답할 수는 없습니다. 그러나 GraalVM을 초기부터 봐온 엔지니어로써 개인적인 의견임을 전제로 이 질문에 대해서 정리해 보겠습니다.

2019년 5월 현재 필자는 오라클 소속이지만, 이 저작물은 Oracle과 관계없이 개인으로서 개인의 시간을 할애하여 작성된 글입니다. 본 글의 내용, 입장, 예측은 Oracle을 공식적으로 절대 대변하지 않습니다. 본 저작물은 전적으로 개인의 생각임을 다시한번 강조합니다.

독특한 GraalVM

위에서 언급한 질문을 바로 들어가기 앞서, 몇 가지 GraalVM의 특징을 살펴보겠습니다. GraalVM에 익숙하시다면 다음 절로 바로 넘기셔도 좋습니다. GraalVM에 특징을 이해한다면, 향후 모습을 예측하는데 도움이 될 것입니다. 다음은 GraalVM의 주요 특징 중에서 제가 주목하는 항목입니다.

  • Oracle Labs가 주도적으로 개발하는 Java
  • Meta-circular Java에 대한 도전(Java-on-Java)
  • 클라우드를 지향하는 다양성 자바
  • 개방성을 지향하는 개발 팀

이 특징에 대하여 간략히 정리해 보겠습니다.

Oracle Labs의 산학연의 협력 연구과제: GraalVM

최근에 진행되는 개발자 컨퍼런스에서 GraalVM세션을 자주 접할 수 있습니다. GraalVM 세션을 진행하는 발표자들은 대부분 “Oracle Labs” 소속입니다.

- 그림 1. GraalVM 발표자와 소속 팀(Oracle Labs)

Oracle Labs는 외부에 자주 노출되지 않는 순수 R&D 조직입니다. Oracle Labs는 시작점은 썬 마이크로시스템즈입니다. Sun Labs(Sun Microsystems Laboratories)는 1990년에 만들어졌고, 2010년에 썬 마이크로시스템즈가 오라클에 합병되면서 이름이 Oracle Labs로 변경되었습니다. 기존의 개발팀이 아닌 순수 R&D 조직에서 제품을 개발한다는 것은 기존에 오라클에서 볼 수 없었던 모습입니다.

GraalVM의 오라클이 독자적으로 개발하는 소프트웨어는 아닙니다. GraalVM 개발에는 Oracle Labs와 협력사, 여러 대학의 연구실이 참여합니다.

- 그림 2. GraalVM 개발 조직과 개발자

<그림 2>와 같이 Oracle Labs를 중심으로, Red Hat, Twitter, Intel이 참여하고 있고 9개 대학의 연구소가 GraalVM 개발에 참여하고 있습니다. 이 산학연 개발팀은 GraalVM을 주제로 7년간(2012~2019.06) 총 64편의 논문을 발표했습니다. (전체 논문 목록[↗NW] )1

Meta-circular Java에 대한 도전

GraalVM의 원류는 “Maxine Virtual Machine(Maxine VM)[↗NW] “입니다. Maxine VM은 meta-circular 스타일2의 자바에 대한 연구로, 2005년에 멘체스터 대학과 Sun Labs가 함께 시작한 자바 R&D 주제였습니다. Java HotSpot 성능 개선이 한계점에 도달하면서 2005년 순수 연구 주제로 시작한 Maxine VM은 세상이 주목을 받게됩니다. C++로 개발된 자바 컴파일러(C2 JIT 컴파일러)의 대안이 요구되는 상황에서 세상의 큰 주목을 받았습니다.

2012년에 GraalVM은 OpenJDK의 서브 프로젝트로 등록되었습니다. OpenJDK의 서브 프로젝트인 GraalVM의 목표는 Meta-Circular 자바의 구현과 C2 JIT 컴파일러 Graal로 대체하는 것입니다. 7년의 개발 기간을 거쳐 2019년 5월에 GraalVM 버전 1.0이 공개되었습니다. GraalVM의 역사는 프로젝트 명을 기준으로는 7년, 연구 과제의 시작점을 기준으로는 총 14년의 역사를 가집니다.

클라우드 지향 자바

GraalVM의 3가지 특징은 Graal을 기반으로하는 고성능 자바, Polyglot을 기반으로 다양한 언어의 통합 기능, Native 자바의 특성을 통해서 빠른 startup time을 제공한다는 것입니다. 다양한 언어를 지원하고, 빠른 처리 능력과 빠른 시작은 클라우드와 Docker/Kubernetes 환경에 적합한 기능입니다. 현재 GraalVM은 기존의 자바에 대한 호환성을 제공하면서, 새로운 언어적인 특징을 제공하고, 그 특징이 클라우드 환경에 적합하기 때문에 개발자 커뮤니티에서 관심이 높을 수 밖에 없습니다.

GraalVM은 OpenJDK 8u212를 기반으로 제작되었습니다. GraalVM은 표준을 지향하는 시대(2000년대 초반에서 2010년대 초반)에 시작된 오픈소스 프로젝트 입니다. GraalVM의 다양한 시도와 도전은 최근 클라우드 시대에 IT환경에서 꼭 필요한 기능들 입니다. 이러한 이유로 GraalVM에 대한 관심과 인기가 급격히 증가하고 있습니다.

개방성을 지향하는 개발팀

GraalVM은 여러 산학연 조직이 함께 개발하는 오픈소스 프로젝트이지만, 개발자 그룹의 목록을 보면 알 수 있듯이 주축은 오라클입니다. 올 초에 오라클 내부 GraalVM 메일링 리스트찾아서 구독을 신청했었습니다. Oracle Labs에 메일링 구독을 신청한 다음날 다음과 같은 답장을 받았습니다.

- 그림 3. GraalVM 개발팀의 개방성, 공개 Mailing List 사용을 권고

요약하면, GraalVM팀은 오라클 내부 메일링을 거의 사용하지 않으며, 주로 graalvm.org의 공개 메일링을 사용한다는 내용입니다. 여러 산학연이 오픈소스 형태로 개발하는 프로젝트이기에 이러한 행동은 자연스럽습니다. 그러나 Oracle Labs의 이러한 결정은 제게 신선한 충격이었습니다. 어찌보면 이것이 GraalVM 개발팀의 개방성을 가장 잘 보여주는 모습일 것 같습니다.

자주 듣는 질문

최근에 GraalVM에 대한 발표를 3-4차례 진행했습니다. 발표 현장에서 가장 많이 들었던 몇 가지 공통 질문이 있습니다. 이 질문에 답변을 드리기 위해서 공식적인 오라클 입장 및 발표를 찾아 보았지만 아직까지는 딱 맞는 자료나 문서는 찾지 못했습니다. 따라서 공식적인 답변은 아니지만 GraalVM을 조금 오래 지켜본 엔지니어 관점에서 이 질문에 대한 답변을 정리해 보았습니다. 이 부분은 전적으로 개인적인 견해임을 다시한번 말씀 드립니다.

질문1: 왜 오라클은 GraalVM을 만들었는가?

저는 개인적으로 오라클이 고성능 자바에 대한 필요성과 2006년 부터 진행해온 자바의 오픈소스화 과정 만들어 GraalVM을 만들었다고 생각합니다.

1999년 4월 HotSpot이 공개된 이후, 20년동안 HotSpot은 Oracle JVM의 상징적인 존재였습니다. 지난 20년 동안 C++로 개발된 HotSpot은 자바 성능을 크게 끌어 올렸습니다. 그러나 이제는 C++ 코드가 너무 복잡해진 나머지 추가적인 성능 개선이 어려운 상황입니다. Oracle Labs는 2010년 쯤에 HotSpot의 노후화에 대한 대안을 그 동안 R&D로 개발해온 Maxine VM에서 찾았던 것 같습니다. 결과적으로 Maxine VM이 추구하던 Meta-Circular 자바의 구현체가 바로 GraalVM이 됩니다.

2010년은 자바에게 혼동기였습니다. Sun이 Oracle에 합병되었고(2010), 2011년 7월에 공개할 JDK 7을 OpenJDK에서 개발발하고 있었습니다. 이를 위해서 2007년에 썬 마이크로 시스템즈는 OpenJDK을 만들었습니다. 그리고 JDK 7을 오픈소스로 개발하였습니다. 물론 Oracle JDK를 OpenJDK에서 개발한 것은 아닙니다. java.net에서 Oracle JDK7을 별도로 개발했습니다. 동시에 Java.net의 Oracle JDK7과 OpenJDK JDK7을 이원화하여 진행했습니다. 이 시기에 OpenJDK의 JDK7은 자바의 실제 코드를 확인할 수 있는 참조 구현체의 의미를 갖습니다.

10년이 더 흘러 2019년이 된 지금, 이제 Java는 완전히 OpenJDK에서 개발합니다. 새로운 버전의 자바가 공개된 후 6개월이 지나면 자바를 지원하는 각 업체가 자체적으로 자바를 유지보수하는 형태로 변경되었습니다. 이제 자바를 개발하는 주체는 OpenJDK이며, 각 자바 지원사들이 OpenJDK에 참여하여 JDK를 오픈소스로 개발합니다.

OpenJDK가 표준 자바 혹은 기반 자바(Base Java)의 의미를 갖게 됩니다. 각 자바 지원 업체 혹은 조직은 공개된 OpenJDK를 토대로 각자의 유지보수 자바를 운영할 수 있습니다. 또한 OpenJDK를 확장하여 다양한 자바를 만들 수 도 있습니다. 이제 다양한 업체와 조직이 자바를 유지보수하고 확장하고 변형체를 만드는 다양성 자바의 시대가 시작됩니다.

오라클는 OpenJDK를 유지보수하는 자바와 확장하고 변형한 자바를 별도로 만들었습니다. OpenJDK의 유지보수 자바가 Oracle Java이고 OpenJDK를 변형하여 클라우드라는 특정 목적을 위해 만든 다양성 자바의 첫 번째 구현체가 바로 GraalVM입니다. 이렇게 GraalVM은 다양성 자바의 새로운 시작이라고 생각합니다.

질문2: 오라클은 GraalVM의 포지션은?

다양성 자바가 GraalVM이라고 하지만, 아직 풀리지 않은 문제가 남아 있습니다. “다양성 자바라는 GraalVM이 왜 필요한가?” 입니다. OpenJDK가 6개월마다 새로운 버전을 공개하여 Agile한 개발 프로세스로 전환했습니다. 이제 Big Bang 방식이 아닌 단위 기술로 효과적인 기능 개선이 가능한 개발 프로세스를 정시켰기 때문에, 많은 사람이 이제는 Java가 빠르게 변화하는 IT 환경에 효과적으로 대응할 수 있을 것으로 기대합니다.

그러나 반대로 상항이 발생할 수 있습니다. OpenJDK가 이제 표준 자바 혹은 기반 자바라는 의미를 가지며, OpenJDK는 개발 기간이 짧습니다. 따라서 OpenJDK에 새로 추가되는 기술은 이미 검증된 기술을 추가해야 한다는 부담도 생깁니다. 이제는 예전처럼 자바 개발 과정에서 시행착오를 경험하고 검증할 시간이 없습니다. 따라서 OpenJDK에 추가되는 기술은 더 보수적으로 관리될 수 있습니다.

오라클의 경우 새로운 기능 및 기술을 Oracle Java에 적용하고 검증하면 어떨까요? Oracle Java는 이제 OpenJDK의 유지보수 버전이라는 성격이 강하게 때문에, 새로운 기술을 Oracle Java에 추가하고 실험하는 여러 제약이 따릅니다. 또한 이렇게 Oracle Java에 새로운 기능을 추가할 경우에, 새로 추가된 기능을 OpenJDK에 적용하는 것이 상당히 관리하기 어렵고 이상한 프로세스가 되어 버립니다.

자바 진영에서는 이와 유사한 문제를 예전에 경험하고 해결한 경험이 있습니다. Java EE 5를 기준으로 표준과 오픈소스 사이의 작업 흐름이 바뀐 경험을 알고 있을 겁니다. Java EE 5 이전에는 Java EE 스펙에 표준안을 먼저 정의하고, 그 표준안을 근거로 오픈소스나 상용 제품이 개발되었습니다. 이런 작업 방식은 Java EE 5를 기점으로 변경됩니다. Java EE 5 이후에는 SpringFramework와 Hibernate와 같은 유명 오픈소스에서 검증된 기술이 Java EE에 표준으로 들가는 방식으로 변경되었습니다. 그리고 이런 흐름은 기술 개발, 검증, 표준화의 순선환 구조를 만들고 확대되었습니다.

- 그림 4. Java EE 5 이후에 만들어진 JCP와 오픈소스 커뮤티니의 선순환 구조

최근에 오라클은 이와 같은 3단계로 구조화된 자바 개발 체계를 만들어 가고 있다고 생각합니다. 오라클은 새로운 기술에 대한 연구, 실험 및 검증을 GraalVM에서 수행합니다. GraalVM은 OpenJDK를 기반으로 만든 새로운 자바입니다. 클라우드와 임베디드 환경에 적합하도록 다양한 시도와 실험이 이뤄지고 있는 자바입니다. Oracle은 GraalVM에서 실험하고 검증한 기술을 OpenJDK에 추가하는 모습을 계속 보입니다.

- 그림 5. 오라클이 구성한 Java 기술 개발 및 관리 체계

위 그림처럼, GraalVM의 JVMCI, AOT, Graal JIT이 위 그림과 같이 새로운 기법을 JEP-243, JEP-295, JEP-317로 정의하여 OpenJDK에 적용하고 있습니다. GraalVM에서 개발되고 검증된 이러한 기술은 OpenJDK에 적용되어 표준 자바에 추가됩니다. 그리고 OpenJDK에 적용된 기술은 결과적으로 Oracle Java에 유입되는 모습을 보입니다. 이렇게 오라클은 GraalVM, OpenJDK 및 Oracle Java를 신기술을 적용하는 다양성 자바, 표준화 자바, 그리고 안전하게 관리되는 오라클 관리형 자바로 포지션하고, 지속해서 새로운 기술을 개발하고, 표준화하고 안정화하는 선순환 구조를 만들었다고 생각합니다.

질문3: 그럼 GraalVM은 불안정한 테스트용 JDK입니까?

질문 2의 내용을 보면, “GraalVM은 신기술 개발을 위한 파일럿 소프트웨어일까요?“라는 의문이 생깁니다. 결과부터 말씀 드리면, 전혀 그렇지 않습니다. GraalVM이 새로운 기술을 적극적으로 수용하는 Agile한 방식으로 빠르게 진화하고 있한다는 것이 GraalVM은 파일럿이며 불안정하다는 것을 의미하지는 않습니다. GraalVM은 산학연의 여러 조직이 오픈소스 형태로 개발하고 있으며, 오라클의 개발 프로세스와 QA 프로세스를 통해서 관리되고 있습니다. 현재 매월 1회 새로운 업데이트 버전을 공개하고 있습니다. 2019년 6월 현재 19.02 버전이 최신 버전입니다.

GraalVM의 라이센스는 Community Edition과 Enterprise Edition으로 구분됩니다. Community Edition고 Enterprise Edition의 차이는 기술 지원과 성능입니다. GraalVM CE와 EE는 기능적으로 동일한 기능(지원 툴 제외)을 제공하지만 성능을 기준으로 볼 때, Enterprise Edition이 Community Edition보다 약 30% 정도 더 성능이 높다고 보고되고 있습니다.

오라클은 GraalVM Community Edition에 추가적인 기능 개선을 적용하여 GraalVM Enterprise Edition 상용 솔루션으로 판매하고 있습니다. Oracle Java, OpenJDK, GraalVM은 어느 것이 더 안정성을 기준으로 하는 것이 아닌, 새로운 기능을 적용하는 방식과 관점에 따라서 다른 접근법을 가집니다.

Java 유형 성격 신기술 적용 방식
Oracle Java OpenJDK의 엔터프라이즈 유지보수 버전 보수적이고 신중하게 버그 중심의 기슨 개선, 오류에 대한 Fix에 중심을 두고 있음
OpenJDK 표준 자바 Java Spec과 JEP에 따른 표준화된 기능 추가 및 기능 개선에 중점을 두고 있음
GraalVM 다양성 자바 신기술 및 새로운 개념 및 기법을 적용하고 검증하는 용도로, 새로운 변화를 적극적으로 반영, 빠르게 변화하는 업계의 요구 사항을 빠르게 수용

질문4: 앞으로도 GraalVM CE를 지원할 것인가?

GraalVM의 Community Edition을 오라클이 과연 계속 유지할 것인지 궁금해 사시는 분들이 많습니다. GraalVM CE(Community Edition) 도입했는데, 갑자기 GraalVM CE 지원이 중단되는 상황을 걱정하시는 분들이 많았습니다. 물론 이 상황에 대해 확실한 예측을 할 수는 없습니다. 그러나 GraalVM이 개발된 역사와 산학연으로 구성되고 오픈소스 형식으로 개발되는 것 그리고 GraalVM, OpenJDK 그리고 Orale Java의 개별적인 역할과 선순환 구조를 생각할 때, 저는 GraalVM CE는 계속 유지될 것으로 예상합니다.

오라클이 GraalVM Enterprise Edition으로 수익을 올리는 것도 중요하지만, 이것 보다는 GraalVM CE를 활성화해 자바에 대한 새로운 시도와 완성도에 대한 다양한 피드백 받고, 이 결과를 OpenJDK에 반영하고 지속해서 효과적인 자바 개발의 선순환 구조를 유지하는 것이 오라클에 더 필요하고 중요하다고 생각합니다. 이러한 이유로 오라클은 GraalVM CE를 없애기 보다는 더 많이 확산시키는 쪽으로 움직일 것이라고 에상합니다.

마치며…

GraalVM은 Oracle Labs를 중심으로 여러 산학연 조직이 참여해서 만드는 오픈소스 자바로, OpenJDK를 기반으로하는 다양성 자바의 한가지 유형입니다. GraalVM의 역사는 짧게는 7년 길게는 14년의 역사를 가집니다. 자바로 자바를 만드는 Meta-circular Java에 대한 R&D로 시작되었고, 최근에는 클라우드와 OpenJDK의 등장과 함께 클라우드 JDK로 각광을 받고 있습니다.

오라클에서 GraalVM은 다양성 자바와 새로운 기술을 실험하고 적용하고 점증하는 역할을 담당한다고 생각합니다. GraalVM은 현장의 요구 사항을 빠르게 수용하고 새로운 개념을 적용하기 좋은 자바입니다. GraalVM에서 검증된 신기술은 OpenJDK에 전달되어 표준화됩니다. 이렇게 OpenJDK에서 표준화된 새로운 기능은 Oracle Java에 유입되고 안정화되고 유지보수 됩니다. 오라클은 GraalVM, OpenJDK와 Oracle Java를 구조화하여, 새로운 기술을 개발/검증하고 표준화하며 안정화하는 기술 발전의 순순환 구조를 만들고 있습니다. 결과적으로 이와 같이 3개의 자바를 이용하여, 안정적이고 Agile하게 자바 기술을 개발/검증/표준화/유지보수하는 효과적인 체계를 완성해가고 있습니다.

GraalVM은 Community Edition과 Enterprise Edition 라이센스로 제공됩니다. 오라클은 GraalVM의 Community Edition을 통해서 새로 적용한 기술을 검증하고 피드백을 받을수 있게 되었고, 이 피드백을 통해서 업계에서 필요한 기능을 신속하게 적용하고 개선하는 환경을 만들었습니다.

마지막으로 GraalVM은 오라클에서 다음과 같은 의미을 갖습니다.

  • 자바 신기술 개발과 검증의 시작점: 새로운 개념과 기술을 적용하는 자바 확장 및 실험 환경
  • 신기술에 대한 피드백 창고: 오픈소스와 GraalVM Communtiy Edition을 통한 활발한 피드백 수집과 개선
  • 고성능 자바: Graal JIT 컴파일러와 메모리 구조
  • Native 특징을 이용한 효율적인 임베디드 자바

GraalVM은 신 기술을 효과적으로 실험하고 검증하는 다양성 자바의 시작점의 역할과 검증되고 사용자의 피드백을 받은 기술을 OpenJDK의 JEP에 제안하는 기술 확산 체계의 시작점 역할을 함께 수행하고 있습니다.

관련 문서

참조 문서


  1. 2012년은 OpenJDK 프로젝트에 Graal 서브 프로젝트가 등록된 해입니다. GraalVM 개발이 외부에 공개된 시점입니다. [return]
  2. meta-circular 스타일이란 언어를 실행하는 환경과 코드를 개발하는 언어가 같은 스타일을 의미합니다. PyPy와 같이 파이썬으로 만든 파이썬이 meta-circular 구현체의 대표적인 예입니다. [return]
김태완 avatar
작성자: 김태완
1999년 부터 Java, Framework, Middleware, SOA, DB Replication, Cache, CEP, NoSQL, Big Data, Cloud를 키워드로 살아왔습니다. 현재는 빅데이터와 Machine Learning을 중점에 두고 있습니다.
E-mail: taewanme@gmail.com

이 저작물은 Oracle과 관계없이 개인으로서 개인의 시간을 할애하여 작성된 글 입니다. 본 글의 내용, 입장, 예측은 Oracle을 공식적으로 절대 대변하지 않습니다.