자바의 새로운 도약: OpenJDK(Feat. Oracle JDK Subscription)
최근에 자바는 OpenJDK를 중심으로 빠르게 변화하고 있습니다. 올해부터 OpenJDK는 일 년에 두 번 3월과 9월에 새 버전을 공개합니다. 점차 OpenJDK 개발에 참여하는 기관도 늘어나고 있습니다. 이제 OpenJDK 개발에 참여하는 인증 기관(기업)은 15개에 달합니다.1 또한 OpenJDK 소스를 기반으로 GraalVM과 같은 독특한 기능을 갖춘 새로운 자바가 만들어지고 있습니다. 예전에 자기 환경에 맞는 WAS를 선택했던 것처럼, 내 환경에 맞는 Java를 선택하고 사용하는 Java 다양성 시대로 진입하고 있습니다. 빠른 버전 업그레이드, OpenJDK에 참여하는 조직 확대 및 다양한 Java의 등장과 같은 특징을 통해서 자바는 빠르게 변하는 환경에 신속하게 적응하는 역량을 확보하고 있습니다.
2019년 부터 사용자 입장에서 주의할 점은 자바는 무상으로 계속 사용할 수 있지만, 자바 버전 관리에 추가 노력이 필요하다는 것 입니다. openjdk.org는 새 버전의 자바를 공개하고 6개월간 계속 최신 빌드 버전을 공개합니다. openjdk.org의 이런 지원은 6개월까지만 유지됩니다. 그 이후에 자바 사용자는 선택을 해야 합니다.
- openjdk.org에 공개된 마지막 버전을 계속 사용한다.
- 사용중인 버전의 최신 빌드 버전을 제공하는 다른 조직을 확인하고, 가장 유리한 지원(무상 혹은 유상)을 선정 및 사용한다.
- 새로운 버전 jdk로 업그레이드 한다.
Java의 한계 & 아재 이미지
자바는 다양한 분야에서 사용되는 범용 개발 언어입니다. 자바의 가장 큰 특징은 IT 업계의 여러 이해 이해당사자들이 모여 사전에 기능을 선정하고 합의하여 스펙을 정의하고, 이 스펙에 따라서 개발하고 관리하는 체계를 갖고 있다는 것입니다.
이런 운영 방식을 통해서 자바는 체계적이고 일관성 있는 발전을 해 왔습니다. 표준화와 통합이 중요한 시대(2000~2010년)에 자바는 JCP 중심의 자바의 개발 프로세스로 엔터프라이즈에 적합한 개발언어와 신뢰할 수 있는 개발언어라는 이미지를 만들었습니다.
올해로 자바가 공개된 지 23년이 지났습니다. 이제는 객체 지향뿐만 아니라 다양한 개발 패러다임이 나오고 있고, 새로운 인프라와 플랫폼이 등장했습니다. 자바가 처음 만들어지던 세상과는 완전히 달라졌습니다. 이제는 체계적인 관리도 중요하지만 기민한 개발과 실행력도 중요한 지표가 되고 있습니다. 클라우드와 같은 플랫폼이 등장하면서, 새로운 인프라를 개발 언어 차원에서 지원해야 한다는 요구도 늘어나고 있습니다.
JCP의 합의 과정을 통해서 개발되고, 통일성과 일관성을 중시하는 자바가 새로운 변화를 빠르게 적응하기에는 한계가 있었습니다. 자바는 사실 기민한 이미지보다는 중후한 이미지를 갖고 있습니다. 자바의 한계와 느린 기능 개선 그리고 무거운 이미지 때문에 자바가 이제는 한계에 도달했다는 평가를 받기도 합니다.
OpenJDK의 급부상, 시작점
2018년 09월 오라클은 자바 유료 라이센스 변경 계획을 발표했습니다. 물론 SNS상에서 개발자들은 반응은 굉장히 뜨거웠습니다. 지난 20년 동안 제약 없이 무료로 사용하던 자바를 유료화한다는 것에 큰 충격을 받았습니다.
오라클의 라이센스 정책 변경은 자바의 오픈소스화와 자바 버전 관리 방식의 변화에 큰 영향을 받은 결과입니다. OpenJDK 프로젝트에서 오픈소스 형태로 개발되고 있는 자바의 버전 관리 체계는 올해부터 일 년에 두 번(3월과 9월) 새로운 버전을 공개하는 형태로 변경되었습니다. OpenJDK는 새 버전을 공해한 후, 6개월간 새 JDK의 버그 수정 관리하과 패치를 제공합니다. OpenJDK 프로젝트는 6개월 이후의 LTS(Long Term Support) 계획을 명확하게 공개하지 않고 있습니다. 이 부분은 OpenJDK 개발에 참여하는 조직(기업)의 새로운 비즈니스 영역으로 남겨두고 있습니다. 현재 오라클, RedHat 및 Azul이 자바 LTS 기술 지원 체계를 발표한 상태입니다.
자바를 계속 무료로 사용하는 가장 명확한 방법은 6개월 주기로 자바 버전을 업그레이드하는 것입니다. 물론 새 버전 출시 후 6개월 동안 공개된 버전을 계속 사용하는 것도 가능합니다. 공개된 OpenJDK의 기간에 따른 사용 제약은 없습니다. 이와 달리 특정 자바 버전을 계속 패치 받거나 추가적인 기술 지원을 받고자 한다면 자바 LTS 체계를 제공하는 오라클, RedHat, Azul 및 AdoptOpenJDK와 같은 조직으로 부터 지원을 받아야 합니다.
OpenJDK의 시작과 관리 체계
2000년대 초에 기업용 애플리케이션 개발 언어로 주목받던 자바의 오픈소스화에 대한 지속적인 요구가 있었습니다. JavaOne 2006에서 Sun Microsystems(이하 SUN)는 Java를 오픈소스로 만들겠다고 발표했습니다. 2006년 11월에 Sun은HotSpot VM과 자바 컴파일러를 GPL 라이센스로 공개했습니다. 그리고 2007년 3월에 Sun JDK 소스코드를 공개하고 OpenJDK 프로젝트를 시작했습니다.
Sun은 OpenJDK를 준비하면서, OpenJDK 개발의 참여 기관을 인증하는 체계를 함께 만들었습니다. 오픈소스 자바의 개발과 관리에 참여하기 위해서는, Sun의 TCK검증 을 통과하고 OCTLA 협약을 체결해야 합니다. 2007년에 개발된 협약과 검증 절차는 현재까지 유지되고 있고, 현재는 Sun을 인수한 오라클이 이 역할을 담당하고 있습니다.
오픈소스 자바 개발에 참여하고자 하는 기관은 OpenJDK를 기반으로 자체 JDK를 개발해야 합니다. 그리고 그 산출물과 협약 신청서를 오라클에 제출하면, 오라클은 TCK로 제출된 JVM의 JCP 구현 상황과 완성도를 검증합니다.
TCK 인증을 통과하고 오라클과 OCTLA를 체결한 조직(기업)이 만든 JDK는 OpenJDK로 인정을 받으며, 해당 조직은 OpenJDK 프로젝트에서 자바 개발과 운영에 참여할 수 있는 권한을 갖습니다. 현재 OpenJDK 프로젝트는 자바 버전 별로 OCTLA 협약 기관을 관리합니다.
Java SE 9 이상 Java SE 8 Java SE 7 OCTLA 체결 기관 Azul Systems, BellSoft, Canonical, Fujitsu, Technology, Solutions GmbH, London Jamocha, Community, Loongson, Technology Co., MicroDoc, Software GmbH, Red Hat, SAP, SUSE Linux, GmbH,Twitter Alibaba, Amazon, Azul Systems, BellSoft Canonical, Cavium, Emmanuel Bourg, The FreeBSD Foundation, Fujitsu, Solutions GmbH Huawei Technologies, Intel, Linaro, London Jamocha Community, Loongson, MicroDoc Software GmbH, Myriad Group AG, Red Hat, SAP, Supercomputing Systems AG, SUSE Linux GmbH, Twitter Azul Systems, Inc. Canonical, The FreeBSD Foundation, Linaro Red Hat, SAP, Supercomputing Systems AG SUSE Linux, GmbH, University Of Tokyo
- <표 1> Java 버전 별 OCTLA 체결 기관
- 출처: http://openjdk.java.net/groups/conformance/JckAccess/jck-access.html
<그림 2>는 OpenJDK 11 프로젝트의JIRA에 등록된 이슈를 처리한 비율을 기관별 시각화한 결과입니다. 이렇게 OpenJDK는 여러 기관이 함께 개발 및 운영에 참여하고 기여하는 공개 소프트웨어입니다.
OpenJDK의 새로운 변화
2000~2010년까지 자바는 기업에서 대용량 트래픽과 중요한 데이터 처리를 담당하는 백-앤드 혹은 웹 애플리케이션을 만드는 용도로 주로 사용되었습니다. 최근에 자바의 스펙트럼은 광장히 넓어졌습니다. 하둡 파일 시스템과 같은 인프라, Scala, Kotlin, JRuby, Clojure와 같은 개발 언어, 클라우드 네이티브 애플리케이션 및 모바일UI을 모두 자바로 개발합니다. 자바의 쓰임새는 점점 더 확장되고 있습니다.
자바의 쓰임새가 넓어지면서, 자바는 더 신속하게 새로운 기능을 추가하고 다양한 현장의 요구사항을 반영하기 위해서 새로운 버전 관리 체계가 필요해 졌습니다. 올해부터 자바 버전은 연 2회 메이저 버전을 공개 형태로 변경되었습니다.(표 2 참조) https://openjdk.java.net 에서는 새로운 버전을 출시한 후, 다음 버전이 출시 전까지 6개월간 버그 수정과 패치를 제공합니다.
신규 자바 버전 구 자바 버전 출시 일정 Java SE 18.3 Java 10 2018.03 Java SE 18.9 Java 11 2018.10 Java SE 19.3 Java 12 2019.03
- <표 2> Java 버전 별 OCTLA 체결 기관
- 출처: http://openjdk.java.net/groups/conformance/JckAccess/jck-access.html
Oracle과 OpenJDK
오라클이 자바 라이센스 변경을 발표하기에 앞서, OpenJDK에 대한 지원을 먼저 발표했습니다. 새로운 자바 버전을 공개할 때, 오라클은 “Oracle JDK의 모든 기능을 OpenJDK에 공개할 것입니다. 그리고 새로운 버전의 자바 공개 후 6개월간 Oracle JDK 패치를 모두 제공한다.”라고 발표했습니다. 또한 Java 11부터 Oracle JDK와 OpenJDK의 완전한 호환성을 지원하기 위해서 OpenJDK 빌드에 직접 참여하며, 두 JDK의 호환성을 검증하고 있습니다.
Oracle JDK는 OpenJDK를 기반으로 개발됩니다. 그리고 새로운 자바가 공개되면 6개월 동안 Oracle은 Oracle JDK에 적용하는 모든 패치를 OpenJDK에 제공합니다. 따라서 https://openjdk.java.net에서 공개되는 OpenJDK는 6개월 동안 Oracle JDK와 같은 버전이라고 할 수 있습니다.
Oracle과 OpenJDK가 경쟁 관계로 소개되는 경우가 있습니다. 현재 OpenJDK는 오라클이 운영하는 java.net에서 개발 중이며, OCTLA 체결과 검증은 오라클이 수행하고 있습니다. 또한 <그림 2>와 같이 OpenJDK 개발과 개선에 가장 높은 비율로 참여하고 있습니다. Oracle은 OpenJDK의 핵심 스폰서이며 주체입니다.
OpenJDK LTS 이슈와 새로운 비즈니스
Java 11부터 새로 공개되는 OpenJDK는 Oracle JDK와 같은 JDK입니다. OpenJDK는 공식적인 자바 참조 구현체이며, 오라클을 포함한 모든 JDK는 OpenJDK를 근간으로 개발됩니다. 또한 새 버전이 공개된 후 6개월 간 오라클이 개발한 모든 패치를 OpenJDK에 제공합니다. 결과적으로 OpenJDK에서 관리하는 JDK는 Oracle JDK와 같은 소프트웨어입니다.
OpenJDK을 운영 환경에 적용할 때 고려사항은 크게 3가지입니다. 첫 번째는 소프트웨어의 지원 매트릭스입니다. 현재 자바로 개발된 많은 소프트웨어가 Oracle Java만을 지원(써티)하고 아직 OpenJDK는 지원하지 않는 경우가 많습니다. 대표적인 예가 Hadoop입니다. Cloudera의 CDH는 2018년 10월 현재 Oracle Java만을 지원합니다. 반가운 소식은 OpenJDK를 지원하는 소프트웨어가 빠르게 늘어간다는 것 입니다. 최근에 Hotownworks의 HDP 자바 지원 매트릭스에 OpenJDK가 추가되었습니다. 점차 OpenJDK 지원을 발표하는 소프트웨어가 늘어가고 있습니다. 가장 큰 걸림돌은 역시 LTS(Long Term Support) 및 기술 지원입니다. OpenJDK는 아직 LTS에 대해서는 명확한 언급을 하지 않고있습니다. 패치 및 업데이트 주기를 명확하지 설명하지 않고 있습니다. 이슈 발생 시 기술 지원을 받기 어렵습니다.
OpenJDK에 대한 서포트 이슈는 OpenJDK에 참여하는 기관에게는 새로운 비즈니스 영역이 되고 있습니다. OCTLA 협약을 체결하고 OpenJDK 개발과 관리에 참여하는 기관은, 그 역량과 경험을 바탕으로 자바 기술 지원 비즈니스에 참여하고 있습니다. 오라클, 레드헷과 Azul이 그 대표적인 예입니다. 물론 무상지원을 약속하고 있는 AdoptOpenJDK도 있습니다.
오라클은 Oracle Java SE에는 Oracle JDK 외에도 고성능 JDK(JRockit JDK), 분석 및 프로파일링 툴(Java Mission Control, Java Flight Recorder 등)을 함께 제공합니다. 그리고 해당 버전의 LTS(Long Term Support)와 24x7x365 기술 지원 체계에 대한 유료화 모델 갖고 있습니다.
RedHat은 RedHat Enterprise Linux 사용 고객에게 OpenJDK의 LTS를 제공합니다. OpenJDK 7, 8, 11을 지원합니다. RedHat은 이러한 자바 지원을 CentOS와 Ubuntu의 차별점으로 활용하고 있습니다.
Azul은 OpenJDK로 인증받은 자사의 JDK를 Zulu라는 이름으로 제공합니다. Azul은 Zulu에 대한 유료 라이센스를 제공합니다. Azul의 라이센스의 특징은 서버 단위로 라이센스를 제공한다는 것 입니다. 25대, 100대, 1,000 대 단위로 라이센스를 제공합니다. 스텐다드 서포트는 8x5 기술 지원을 제공하고, 프리미엄 서포트는 24x7x365 기술 지원을 제공합니다.
OpenJDK가 만든 Java 다양성
OpenJDK의 긍정적인 효과는 OpenJDK 를 기반으로 하는 다양한 JDK가 만들어지고 있다는 것입니다. 최근에 자바에 대한 기능 개선 요구가 많아지고 있습니다. 새로 등장한 개발 언어의 특징과 기능을 요구하기도 하고, 클라우드 인프라를 위한 기능을 요구하기도 합니다. JCP의 협의 체제를 근간으로 하는 자바 개발 프로세스는 업계의 다양한 요구 사항을 신속하게 수용하기 어렵습니다.
OpenJDK는 TCK로 새로운 JDK를 인증하는 체계를 갖고 있습니다. 이런 체계를 통해서 JDK의 통일성과 다양성을 만들어 가고 있습니다. 대표적인 예가 GraalVM와 Azul의 Zulu입니다.
GraalVM을 사용하면 클라우드 네이티브 애플리케이션에 필요한 다양한 기능을 사용할 수 있습니다. Java 클래스를 실행 파일로 변환하여 빠르게 실행할 수 있고, java프로그램에서 R 코드를 실행하고 컨텍스트로 변수를 공유할 수 있습니다. C++ 코드를 자바 코드에서 호출할 수 있습니다. 또한 GraalVM은 자바로 만든 컴파일러를 제공하여, 자바 프로그램 실행 중에 새로운 코드를 컴파일하여 사용할 수 있습니다.
불과 몇 년 전만 해도 WAS(Web Application Server) 시장의 경쟁은 굉장히 뜨거웠습니다. WebLogic, WebShpere, OC4J, JEUS, JBoss, Tomcat등 여러 WAS가 경쟁하는 체계였습니다. 그때 각 WAS는 각자 Java EE 표준을 완전하게 지원하며, 추가로 특화 기능을 제공하여 효율적이라는 표현을 즐겨 사용했습니다. 개발팀은 여러 WAS(Web Application Server) 중에서 내 환경에 적합한 것이 어떤 것인지를 비교 검증한 후 선정해야 했습니다. 이런 선택이 WAS에서 JDK로 내려왔습니다. 애플리케이션과 비즈니스 환경에 적합한 JDK를 고르는 Java 다양성의 시대가 시작되고 있습니다.
자바 라이센스: 아쉬움과 필요성
OpenJDK로 시작된 변화는 다양한 측면에서 긍정적인 효과가 예상됩니다. 자바 생태계가 빠르게 발전하고 다양한 기능이 추가되는 환경은 반가운 소식이지만, 모든 것이 좋을 수는 없는 것 같습니다.
자바 소비자 입장: 아쉬움
20년간 자바를 무료로 사용하던 개발자에게 자바 라이센스는 부담이 큰 것 이 사실입니다. 이제 최신 빌드 자바를 무료로 사용하기 위해서는 6개월 마다 자바 버전을 업그레이드해야 합니다. 6개월마다 새로운 버전이 나오기 때문에, 자바 버전 업그레이드가 과거만큼 어렵지는 않겠지만, 실무에서 운영 환경 변경은 어려운 작업입니다. 기존 자바 버전을 사용하기 위해서 이제 추가 비용이 지불해야 한다는 것은 실무 담당자에게 가혹하게 느껴질 것입니다.
이것은 자바 기술 지원 업체가 해결해야 할 중요한 과제입니다. 자바 패치를 다운로드 권한을 부여하는 것 뿐만 아니라, 자바 개발자에게 만족감을 주는 서비스가 무엇인지 고민해야하는 시점이라고 생각합니다. 그리고 이 부분이 자바 저변 확대에 중요한 요소가 될 것이라고 생각합니다.
2018 Oracle Code One(Java One의 새로운 명칭)에서는 ‘Java is still free’임을 강조하고 있습니다. 언어로서의 자바와 구현체는 모두 무료이며, 신규 버전 출시 6개월 이후에 추가적인 기술 지원이 댜앙한 형태의 유료로 전환된다는 의미입니다. 앞에서 말한 것처럼 자바를 계속 무상 개발 언어로 사용하기 위해서는 추가적인 노력이 필요합니다. 지속적인 버전 업그레이드를 하는 자체 노력 혹은 적합한 기술 지원 라이센스를 선정, 대안 무상 지원 조직(AdoptOpenJDK)을 모색하는 노력이 필요합니다.
자바 라이센스가 부담스러운 분들은 AdoptOpenJDK를 주목할 필요가 있습니다. AdoptOpenJDK는 OpenJDK의 공개 코드를 빌드하는 Build Farm입니다. AdoptOpenJDK가 직접 OpenJDK의 코드 구현 능력을 갖고 있지는 않지만, IBM과 RedHat의 지원을 받아 지속적인 OpenJDK 빌드를 제공한다는 계획을 발표했습니다. AdoptOpenJDK가 OpenJDK에 미칠 영향을 주의깊게 살펴볼 필요가 있습니다.
자바 생산자 입장: 라이센스 필요성
특정 기술이 지속적으로 발전하는 안전한 기술 체계가 되기 위해서는 그 기술에 참여하는 생산자와 소비자의 균형이 중요합니다. 기술을 사용하는 소비자와 생산자가 함께 늘어나야 합니다. 자바는 산업계의 필요에 따라서 기업의 주도로 만들어진 개발 언어입니다. 자바 생태계가 지속적으로 발전하고 성장하기 위해서는 자바를 개발하고 관리하는 기업과 여러 조직의 참여가 중요합니다.
과거에는 Sun, IBM, Oracle, HP, BEA와 같은 메이저 IT 기업이 주도하여 자바를 만들었습니다. 자바가 다양한 분야와 플랫폼에서 사용됨에 따라서 더 많은 기업의 참여가 중요합니다. 참여 기업이 지속적으로 자바 개발과 관리에 투자를 늘리고 지속적으로 참여하기 위해서는 자바를 매개로하는 수익 창출이 필요합니다. 자바 라이센스는 자바 생태계를 건전하게 만들고 생산자의 참여를 촉진하는 중요한 요소입니다. 자바 라이센스를 기술 생태계가 건전하게 발전하는 긍정적인 요소로 볼 수 있습니다.
현재 자바에 라이센스를 부과하는 방식은 다양합니다. CPU의 Core단위 혹은 서버 단위로 기술 지원 라이센스 정책을 만든곳도 있고, 자사의 솔루션(WAS, OS 혹은 Cloud)에 자바 라이센스를 번들로 제공하여 해당 솔루션의 가치를 높이는 방식도 있습니다. 다양한 방식으로 자바 라이센스 개념을 만들고 자사의 비지니스에 결합하는 시도가 진행중입니다.
마치며: OpenJDK 선순환에 대한 기대
오랫동안 지속되는 주류 기술의 특징은 그 기술의 생산과 소비에 많은 기업과 개발자가 참여하고, 그 기술로 수익을 창출하는 부류가 많다는 것입니다. 이런 관점에서 OpenJDK가 활성화되는 모습은 정말 반갑습니다.
OpenJDK가 활성화되면서 Java를 개발하고 관리하는 조직(기업)이 늘어나고 있고, 이 조직들은 자바 기술 지원 역량을 다양한 비즈니스에 접목하여 수익을 창출하고 있습니다. 이제 자바는 6개월 버전 업그레이드 주기로 좀 더 애자일한 모습을 보이고 있습니다. 또한 OpenJDK를 근간으로 검증된 다양한 JDK를 만들어지면서, 개발자들이 요구하는 새로운 기능을 빠르게 수용하는 자바 다양성의 모습을 보여주고 있습니다. 이 모든것이 긍정적인 선순환 구조를 만들어가고 있습니다.
OpenJDK에서 시작된 변화가 자바 생태계에 어떤 결과를 낳을지 관심을 갖고 지켜볼 필요가 있을 것 같습니다. 그리고 이런 변화가 오랜만에 자바에게서 느껴지는 긍정적인 시그널 이라서 더 기대가 됩니다.
참고
- https://en.wikipedia.org/wiki/OpenJDK
- https://en.wikipedia.org/wiki/Technology_Compatibility_Kit
- https://en.wikipedia.org/wiki/Java
- https://www.oracle.com/technetwork/java/javase/overview/faqs-jsp-136696.html
- OpenJDK 인증 기관: http://openjdk.java.net/groups/conformance/JckAccess/jck-access.html
- RedHat OpenJDK 지원: https://access.redhat.com/articles/1299013
- Azul 라이센스: https://www.azul.com/products/pricing/
관련문서
- Oracle OCI에서 'Oracle Java SE is free'[↗NW]
- 오라클 자바 라이센스 정리: Oracle Java SE Subscription[↗NW]
- 자바의 새로운 도약: OpenJDK(Feat. Oracle JDK Subscription)[↗NW]
- 구글 vs 오라클 Java 라이센스 전쟁[↗NW]
- Java 11을 기준으로 15개 입니다. Java 8에는 21개 조직이 참여하고 있습니다. [return]