sdkman으로 GraalVM Enterprise Edition 관리

sdkman으로 GraalVM Enterprise Edition 관리

다양성 자바의 시대에 되면서 다양한 Java가 만들어지고 있습니다. 이제는 Oracle, AdoptOpenJDK, Amazon, Azul, SAP, OpenJDK 등 여러 벤더와 개발 커뮤니티가 Java를 제공합니다. 이제 개발자 컴퓨터에 여러 벤더와 여러 버전의 Java를 설치하고 사용하는 경우가 늘어가고 있습니다.

여러 Java를 설치하고 필요한 시점에 특정 Java를 활성화시키고 사용하기 위해서 shell 작업을 하거나 환경 변수를 수정하는 것은 상당히 번거로운 작업입니다. 이런 작겁에 sdkman(Software Development Kit Manager)를 사용하면 매우 편리합니다.

sdkman

SDKMAN은 다양한 SDK(Software Development Kits)의 여러 버전을 관리하는 툴입니다. 여러 버전의 SDK 설치, 전환, 업데이트, 삭제를 돕은 CLI 명령을 제공합니다. 루비 커뮤니티의 RVM과 rbenv에 영향을 받았습니다. https://sdkman.io/ 에서 관리됩니다.

SDKMAN 설치

설치 법은 간단합니다. 다음 명령으로 간단히 설치할 수 있습니다.

> curl -s "https://get.sdkman.io" | bash
> $ source "$HOME/.sdkman/bin/sdkman-init.sh"

다음 명령으로 설치 상태를 확인할 수 있습니다. 2019.09.04 현재 sdkman의 최신 버전은 ‘5.7.3+337’입니다.

> sdk version

SDKMAN 5.7.3+337
>

sdkman을 이용한 Java 관리

sdkman은 다양한 자바 벤더와 버전을 지원합니다. 아래 명령으로 sdkman이 지원하는 java 종류를 확인할 수 있습니다. 아래 명령의 실행 결과로 GraalVM 19.2.0 버전이 설치 및 활성화 되어 있는 것을 확인할 수 있습니다.

이 문서에서는 OS X와 리눅스를 기준으로 합니다. Window 사용자의 경우 Window Subsystem으로 리눅스를 설치하면 동일한 환경을 이용할 수 있습니다.

~/dev_env/demo> sdk list java
================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 AdoptOpenJDK  |     | 12.0.1.j9    | adpt    |            | 12.0.1.j9-adpt
               |     | 12.0.1.hs    | adpt    |            | 12.0.1.hs-adpt
               |     | 11.0.4.j9    | adpt    |            | 11.0.4.j9-adpt
               |     | 11.0.4.hs    | adpt    |            | 11.0.4.hs-adpt
               |     | 8.0.222.j9   | adpt    |            | 8.0.222.j9-adpt
               |     | 8.0.222.hs   | adpt    |            | 8.0.222.hs-adpt
 Amazon        |     | 11.0.4       | amzn    |            | 11.0.4-amzn
               |     | 8.0.222      | amzn    |            | 8.0.222-amzn
               |     | 8.0.202      | amzn    |            | 8.0.202-amzn
 Azul Zulu     |     | 12.0.2       | zulu    |            | 12.0.2-zulu
               |     | 11.0.4       | zulu    |            | 11.0.4-zulu
               |     | 10.0.2       | zulu    |            | 10.0.2-zulu
               |     | 9.0.7        | zulu    |            | 9.0.7-zulu
               |     | 8.0.222      | zulu    |            | 8.0.222-zulu
               |     | 8.0.202      | zulu    |            | 8.0.202-zulu
               |     | 7.0.232      | zulu    |            | 7.0.232-zulu
               |     | 7.0.181      | zulu    |            | 7.0.181-zulu
 Azul ZuluFX   |     | 11.0.2       | zulufx  |            | 11.0.2-zulufx
               |     | 8.0.202      | zulufx  |            | 8.0.202-zulufx
 BellSoft      |     | 12.0.2       | librca  |            | 12.0.2-librca
               |     | 11.0.4       | librca  |            | 11.0.4-librca
               |     | 8.0.222      | librca  |            | 8.0.222-librca
 GraalVM       | >>> | 19.2.0       | grl     | installed  | 19.2.0-grl
               |     | 19.1.1       | grl     |            | 19.1.1-grl
               |     | 19.0.2       | grl     |            | 19.0.2-grl
               |     | 1.0.0        | grl     |            | 1.0.0-rc-16-grl
 Java.net      |     | 14.ea.11     | open    |            | 14.ea.11-open
               |     | 13.ea.33     | open    |            | 13.ea.33-open
               |     | 12.0.2       | open    |            | 12.0.2-open
               |     | 11.0.2       | open    |            | 11.0.2-open
               |     | 10.0.2       | open    |            | 10.0.2-open
               |     | 9.0.4        | open    |            | 9.0.4-open
 SAP           |     | 12.0.2       | sapmchn |            | 12.0.2-sapmchn
               |     | 11.0.4       | sapmchn |            | 11.0.4-sapmchn
================================================================================
Use the Identifier for installation:

    $ sdk install java 11.0.3.hs-adpt
================================================================================
~/dev_env/demo> 

다음 명령으로 현재 활성화된 Java의 설치 위치와 유형을 검증할 수 있습니다.

~/dev_env/demo> which java
/Users/taewan/.sdkman/candidates/java/19.2.0-grl/bin/java
~/dev_env/demo> java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-20190711112007.graal.jdk8u-src-tar-gz-b08)
OpenJDK 64-Bit GraalVM CE 19.2.0 (build 25.222-b08-jvmci-19.2-b02, mixed mode)
~/dev_env/demo> 

새로운 자바 설치 및 활성화

sdk install java ” 명령을 사용하여 새로운 자바를 설치하고 디폴트 자바로 설정할 수 있습니다. 다음 코드로 OpenJDK 12.0.2가 설치됩니다.

~/dev_env/demo> sdk install java 12.0.2-open

Downloading: java 12.0.2-open

In progress...

######################################################################## 100.0%

Repackaging Java 12.0.2-open...

Done repackaging...
Cleaning up residual files...

Installing: java 12.0.2-open
Done installing!

Do you want java 12.0.2-open to be set as default? (Y/n): Y

Setting java 12.0.2-open as default.
~/dev_env/demo>

다음 명령으로 현재 활성화된 java 버전을 확인할 수 있습니다.

~/dev_env/demo> java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-20190711112007.graal.jdk8u-src-tar-gz-b08)
OpenJDK 64-Bit GraalVM CE 19.2.0 (build 25.222-b08-jvmci-19.2-b02, mixed mode)
~/dev_env/demo>

또한 “sdk list java” 명령으로 지원 Java 유형, 설치 버전 및 활성화 유형을 확인할 수 있습니다.

~/dev_env/demo> sdk list java
================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 AdoptOpenJDK  |     | 12.0.1.j9    | adpt    |            | 12.0.1.j9-adpt
               |     | 12.0.1.hs    | adpt    |            | 12.0.1.hs-adpt
               |     | 11.0.4.j9    | adpt    |            | 11.0.4.j9-adpt
               |     | 11.0.4.hs    | adpt    |            | 11.0.4.hs-adpt
               |     | 8.0.222.j9   | adpt    |            | 8.0.222.j9-adpt
               |     | 8.0.222.hs   | adpt    |            | 8.0.222.hs-adpt
 Amazon        |     | 11.0.4       | amzn    |            | 11.0.4-amzn
               |     | 8.0.222      | amzn    |            | 8.0.222-amzn
               |     | 8.0.202      | amzn    |            | 8.0.202-amzn
 Azul Zulu     |     | 12.0.2       | zulu    |            | 12.0.2-zulu
               |     | 11.0.4       | zulu    |            | 11.0.4-zulu
               |     | 10.0.2       | zulu    |            | 10.0.2-zulu
               |     | 9.0.7        | zulu    |            | 9.0.7-zulu
               |     | 8.0.222      | zulu    |            | 8.0.222-zulu
               |     | 8.0.202      | zulu    |            | 8.0.202-zulu
               |     | 7.0.232      | zulu    |            | 7.0.232-zulu
               |     | 7.0.181      | zulu    |            | 7.0.181-zulu
 Azul ZuluFX   |     | 11.0.2       | zulufx  |            | 11.0.2-zulufx
               |     | 8.0.202      | zulufx  |            | 8.0.202-zulufx
 BellSoft      |     | 12.0.2       | librca  |            | 12.0.2-librca
               |     | 11.0.4       | librca  |            | 11.0.4-librca
               |     | 8.0.222      | librca  |            | 8.0.222-librca
 GraalVM       |     | 19.2.0       | grl     | installed  | 19.2.0-grl
               |     | 19.1.1       | grl     |            | 19.1.1-grl
               |     | 19.0.2       | grl     |            | 19.0.2-grl
               |     | 1.0.0        | grl     |            | 1.0.0-rc-16-grl
 Java.net      |     | 14.ea.11     | open    |            | 14.ea.11-open
               |     | 13.ea.33     | open    |            | 13.ea.33-open
               | >>> | 12.0.2       | open    | installed  | 12.0.2-open
               |     | 11.0.2       | open    |            | 11.0.2-open
               |     | 10.0.2       | open    |            | 10.0.2-open
               |     | 9.0.4        | open    |            | 9.0.4-open
 SAP           |     | 12.0.2       | sapmchn |            | 12.0.2-sapmchn
               |     | 11.0.4       | sapmchn |            | 11.0.4-sapmchn
================================================================================
Use the Identifier for installation:

    $ sdk install java 11.0.3.hs-adpt
================================================================================
~/dev_env/demo>

위 출력을 보면 GraalVM 19.2.0과 OpenJDK 12.0.2이 설치되어 있는 것을 확인할 수 있습니다. 그리고 디폴트 자바로 OpenJDK 12.0.2가 활성화 되어 있습니다.

디폴트 자바 변경

디폴트 자바로 OpenJDK 12.0.2가 설정된 상태에서, 다음 명령을 실행하면 디폴트 자바가 GraalVM 19.2.0로 변경됩니다.

~/dev_env/demo> sdk use  java 19.2.0-grl

Using java version 19.2.0-grl in this shell.
~/dev_env/demo>

다음 명령으로 디폴트 자바가 GraalVM 19.2.0로 변경된 것을 확인할 수 있습니다.

~/dev_env/demo> which java
/Users/taewan/.sdkman/candidates/java/19.2.0-grl/bin/java
~/dev_env/demo> java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-20190711112007.graal.jdk8u-src-tar-gz-b08)
OpenJDK 64-Bit GraalVM CE 19.2.0 (build 25.222-b08-jvmci-19.2-b02, mixed mode)
~/dev_env/demo>

sdkman의 GraalVM 지원

sdkman은 GraalVM CE(Community Edition)을 기본 지원하며 2019.08.25 기준으로 다음 4개 버전의 GraalVM CE를 설치하고 사용할 수 있습니다.

  • 19.2.0
  • 19.1.1
  • 19.0.2
  • 1.0.0

sdkman은 GraalVM CE만 지원하고 GraalVM EE는 기본 제공하지 않습니다. 이것은 아마도 라이센스 문제 때문인것 같습니다. 그러나 GraalVM EE를 sdkman에 등록하고 활용할 수 있습니다. 기본 제공하지 않는 자바를 sdkman에 등록하는 명령은 다음과 같습니다.

sdk install java <JAVA_HOME_DIR>

GraalVM 다운로드

GraalVM EE(Enterprise Edtion)은 oracle.com에서 제공하며, 다음 그림과 같은 흐름으로 다운로드 받을 수 있습니다.

GraalVM EE(Enterprise Edtion) 설치 파일은 510MB이며 tar.gz 파일 형태로 제공합니다.

~/dev_env/demo> ls -alh
total 1044544
drwxr-xr-x   4 taewan  staff   128B Sep  8 10:46 .
drwxr-xr-x  18 taewan  staff   576B Sep  8 10:45 ..
-rw-r--r--@  1 taewan  staff   510M Sep  8 09:38 graalvm-ee-darwin-amd64-19.2.0.tar.gz
~/dev_env/demo>

sdkman에 GraalVM EE 등록

sdkman에 GraalVM EE 등록하고 관리를 위임하기 위해서는 GraalVM 설치 파일을 다운로드하고 tar.gz 파일의 압축을 풀어야 합니다. 다음 명령을 실행하여 압축을 풉니다.

tar -xvzf graalvm-ee-darwin-amd64-19.2.0.tar.gz

위 명령으로 다운로드 받은 파일의 압축을 풀면 다음과 같이 파일은 디렉터리가 생성됩니다. Mac 용 설치 파일의 경우 GraalVM EE의 JAVA_HOME_DIR 디렉터리는 “./graalvm-ee-19.2.0/Contents/Home”입니다.

~/dev_env/demo> ls -alh
total 1044544
drwxr-xr-x   4 taewan  staff   128B Sep  8 10:46 .
drwxr-xr-x  18 taewan  staff   576B Sep  8 10:45 ..
drwxr-xr-x   3 taewan  staff    96B Sep  8 10:46 graalvm-ee-19.2.0
-rw-r--r--@  1 taewan  staff   510M Sep  8 09:38 graalvm-ee-darwin-amd64-19.2.0.tar.gz
~/dev_env/demo> ls graalvm-ee-19.2.0/Contents/Home
GRAALVM-README.md                   lib
LICENSE.txt                         license-information-user-manual.zip
bin                                 man
include                             release
javafx-src.zip                      src.zip
jre
~/dev_env/demo>

GraalVM EE의 JAVA_HOME_DIR인 “./graalvm-ee-19.2.0/Contents/Home”를 기반 디렉터리로, 다음과 같은 “sdk install java” 명령을 실행하여 GraalVM EE를 sdkman에 등록합니다.

~/dev_env/demo> sdk install java 19.2.0-graalee ./graalvm-ee-19.2.0/Contents/Home
Linking java 19.2.0-graalee to /Users/taewan/dev_env/demo/./graalvm-ee-19.2.0/Contents/Home
Done installing!

~/dev_env/demo>

sdk list java“를 실행하여 GraalVM EE가 sdkman에 등록된 것을 확인할 수 있습니다.

sdkman으로 GraalVM EE 활성화

sdk use java “를 실행하여 특정 java를 선택하고 활성화 할 수 있습니다.

sdkman에서 GraalVM EE 제거

sdk uninstall java ” 명령으로 설치된 Java를 제거할 수 있습니다. 앞에서 설치한 GraalVM EE는 다음 명령을 통해서 제거할 수 있습니다.

김태완 avatar
작성자: 김태완
1999년 부터 Java, Framework, Middleware, SOA, DB Replication, Cache, CEP, NoSQL, Big Data, Cloud를 키워드로 살아왔습니다. 현재는 빅데이터와 Machine Learning을 중점에 두고 있습니다.
E-mail: taewanme@gmail.com

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