Kotlin 지원 Jupyter: BeakerX 도커 이미지

최근에 Kotlin을 익히고 있습니다. 안드로이드 개발을 목적으로 하기 보다는 서버사이드 개발언어, Micoroservice 구현언어로 Kotlin을 살펴보고 있습니다. Kotlin을 잘 지원하는 IntelliJ라는 개발툴이 있기는 하지만, 새로운 언어를 익힐때 빠른 실험과 결과 확인이 편리한 REPL 환경을 더 선호합니다.

Kotlin은 자체적으로 REPL을 지원하기는 하지만 터미널에서 CLI 형태로 사용하기 때문에, 편집이 불편합니다. 또한, 코드 추천 기능이 지원되지 않고, 테스트한 코드를 별도로 보관하기 어렵습니다. Kotlin 자체 REPL보다 편리한 다음 조건을 부합하는 REPL 환경을 찾아보았습니다.

  • Jupyter 환경의 Kotlin 커널
  • Kotlin과 Java9의 완전한 환경 분리
    • 현재 업무로 Java9을 사용중 입니다.
    • Kotlin은 아직 Java9을 지원하지 않습니다.
Kotlin의 REPL
그림 1: Kotlin의 REPL

BeakerX: Kotlin 입문자를 위한 최적의 선택지

BeakerX(http://beakerx.com/)는 Jupyter 커널과 확장 기능의 묶음입니다. BeakerX는 Anaconda와 docker 이미지로 Jupyter 환경을 제공합니다. 현재 BeakerX는 다음과 같은 기능을 제공합니다.

  • 지원 커널: Groovy, Scala, Clojure, Kotlin, Java, SQL
  • 다양한 위젯: 시계열 그래프, 테이블, 폼 (파이썬 및 자바스크립트 기반)
  • Jupyter 랩: 가이드 노트북

Docker 이미지 설치 및 실행

사용하는 컴퓨터에 Docker가 설치되어 있다면, 한 개 명령으로 BeakerX 도커 이미지를 구성할 수 있습니다.

다음과 같은 명령으로 BeakerX의 최신 이미지를 가져올 수 있습니다.

docker pull beakerx/beakerx

위 명령이 실행되면 다음과 같은 로그가 출력됩니다.

Using default tag: latest
latest: Pulling from beakerx/beakerx
22dc81ace0ea: Already exists
1a8b3c87dba3: Already exists
91390a1c435a: Already exists
07844b14977e: Already exists
b78396653dae: Already exists
7b21c7c4b0cc: Already exists
daf4b703e422: Already exists
ba8964e0b44c: Pull complete
c8dc03fc2971: Pull complete
94ecdf222f55: Pull complete
ae5a433d9181: Pull complete
e5614ee28714: Pull complete

BeakerX가 사용와 설치가 쉽고 간편하지만, 단점도 있습니다.

> docker images
REPOSITORY        TAG        IMAGE ID        CREATED      SIZE
beakerx/beakerx   latest     508f0fb95279    13 days ago  7.29GB

이미지 사이즈가 상당히 큽니다. 더커 이미지 사이즈가 7.3GB정도라는 것을 고려하셔야 할 것 같습니다. 이미지 다운로드 후 다음과 같은 명령으로 BeakerX 컨테이너를 실행하고, Jupyter에 접근할 수 있습니다.

docker run -p 8888:8888 beakerx/beakerx

Execute the command
[I 23:15:00.526 NotebookApp] Writing notebook server cookie secret to /home/beakerx/.local/share/jupyter/runtime/notebook_cookie_secret
[W 23:15:00.555 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 23:15:00.569 NotebookApp] [beakerx] enabled
[I 23:15:00.601 NotebookApp] JupyterLab beta preview extension loaded from /opt/conda/envs/beakerx/lib/python3.6/site-packages/jupyterlab
[I 23:15:00.602 NotebookApp] JupyterLab application directory is /opt/conda/envs/beakerx/share/jupyter/lab
[I 23:15:00.678 NotebookApp] Serving notebooks from local directory: /home/beakerx
[I 23:15:00.678 NotebookApp] 0 active kernels
[I 23:15:00.678 NotebookApp] The Jupyter Notebook is running at:
[I 23:15:00.678 NotebookApp] http://[all ip addresses on your system]:8888/?token=d7a6490ff29d3ab2ab4f6d2e21b393fb5b7003750d400dab
[I 23:15:00.678 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 23:15:00.678 NotebookApp]

     Copy/paste this URL into your browser when you connect for the first time,
     to login with a token:
         http://localhost:8888/?token=d7a6490ff29d3ab2ab4f6d2e21b393fb5b7003750d400dab
 [I 23:15:10.080 NotebookApp] 302 GET /?token=d7a6490ff29d3ab2ab4f6d2e21b393fb5b7003750d400dab (172.17.0.1) 0.77ms
 [I 23:15:22.441 NotebookApp] Creating new notebook in
 [I 23:15:22.452 NotebookApp] Writing notebook-signing key to /home/beakerx/.local/share/jupyter/notebook_secret
 [I 23:15:22.954 NotebookApp] Kernel started: 3968764f-363c-4b1b-923b-11a82f61fda4
 [I 23:15:29.230 NotebookApp] Adapting to protocol v5.1 for kernel 3968764f-363c-4b1b-923b-11a82f61fda4

Jupyter는 8080 포트로 오픈됩니다. 다음과 같은 URL로 Jupyter에 접근할 수 있습니다.

http://localhost:8888
BeakerX 도커 이미지의 Jupyter
그림 2: BeakerX 도커 이미지의 Jupyter

Jupyter 메인 페이지에서 지원 커널을 확인할 수 있습니다.

  • clojure
  • grovvy
  • Java
  • kotlin
  • python 3
  • sql
  • scala

Kotlin 커널에서 다음과 같이 코틀린 코드를 실험해 볼 수 있습니다.

BeakerX 도커 이미지의 Jupyter
그림 3: BeakerX 도커 이미지의 Jupyter

참고

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