오픈소스 일기 2: Apache Zeppelin 이란 무엇인가?

Jesang Yoon
Apache Zeppelin Stories
11 min readSep 18, 2016

이번시간엔 필자가 Contribute하고 있는 오픈소스 프로젝트인 아파치 제플린(Apache Zeppelin)에 대해서 다뤄보도록 하겠다. 이미 잘 알고 계시는 분들보다 이것이 뭔지 잘 모르는 분들의 이해를 돕고자 쓰는 글이니 혹시 잘 알고 계시는 분들은 덧글로 지적 및 코멘트 주시면 감사히 반영토록 하겠습니다 :) 질문이 있으신 분들도 환영합니다 :)

Hadoop에 이어 가장 핫한 빅데이터 분석 도구인 Spark는 Hadoop보다 빠르고 설치가 비교적 쉽다는 장점을 가지지만 Hadoop과 마찬가지로 이를 다룰려면 커맨드라인에서 검은 글씨와 싸워야 하는 단점이 있다. 데이터 분석 업무을 하다보면, 여러가지 알고리즘과 파라메터를 바꿔가면서 분석 결과를 반복해서 그래프나 테이블 같은 형태로 시각화하여 확인해야 하는데 커맨드라인 도구는 불편하다. 비슷한 예로 데이터 분석 분야에서 빼놓을수 없는 R역시 CRAN 패키지만 깔면 커맨드라인으로 분석은 할수 있으나 실무에선 분석 결과를 GUI를 통해서 확인하고 Graph같은 요소들을 쉽게 볼수 있도록 도와주는 RStudio등이 널리 쓰이고 있다.

Spark만 설치했다면 이런 인터페이스에서 분석 코드를 짜야한다 (출처: http://yokekeong.com)
RStudio는 R을 매우 편리하게 사용할수 있도록 도와준다. (출처: http://www.rstudio.com)

Apache Zeppelin은 Spark를 통한 데이터 분석의 불편함을 Web기반의 Notebook을 통해서 해결해보고자 만들어진 어플리케이션이다. Web기반 Notebook 스타일 환경이란 Web에 워드프로세서 처럼 아무거나 입력 가능한 하얀 화면이 뜨고 여기에 코드를 작성-실행-결과확인-코드수정을 반복하면서 원하는 결과를 만들어 낼수있는 작업환경을 말한다.

CLI 매니아가 아니고서야 이런 GUI에 끌릴수밖에 없을 것이다. (출처: http://zeppelin.apache.org)

사실, Notebook형태로 데이터를 다루고 분석하는 어플리케이션은 Zeppelin이 최초는 아니다. 20년 전부터 Wolfram Research의 Mathematica나 National Instrument사의 Matlab이 이러한 Notebook 스타일의 분석도구 분야를 선도해 왔다. Notebook 스타일의 작업환경은 매우 큰 자유도를 제공하기 때문에 Mathematica나 Matlab의 유저들은 코드작성 뿐만 아니라 일반문서 및 보고서 그리고 데모를 위한 프레젠테이션까지 이 환경 안에서 구현하여 쓰고 있을 정도다.

Wolfram Research의 Mathematica는 1988년부터 Notebook 환경을 제공해 왔다. (출처: http://www.mathematica25.com/)
Mathematica의 Notebook 환경에선 데이터와 분석코드 그리고 그래프를 자유롭게 섞어 쓰고 배치할수 있다. (출처: 위키피디아)

다만 이런 환경은 너무 큰 자유도 때문인지 초심자가 배워서 접근하기가 만만치가 않다는 문제도 가지고 있다. 처음 접하는 사용자들은 이 빈 화면에 뭘 입력해서 시작해야 할지 난감할 것이다. 그런 상황에서 원하는 결과를 뽑을 때까지 막막할 것이고 끈기있게 예제를 탐독하고 실패를 여러번 경험하고 난 후에야 자유롭게 “아 이제 뭔가 할만하구나"라는걸 느끼게 된다. 이때문에 이런 환경을 자유롭게 쓰는 유저는 연구소나 대학 또는 금융권에서 수년이상 전문적으로 쓰는 사람들(이라 쓰고 하드코어 유저라 읽는다)이 대부분을 차지하고 있다. Mathematica의 개발팀이었던 필자의 지인의 경험에 따르면 Wolfram Research내에서도 일반 사용자를 늘리기 위해 Notebook 인터페이스를 포기해야 하느냐에 대해서 오랜 논의가 있었다고 한다.

이뿐만 아니라 이러한 어플리케이션들이 오랜시간동안 오픈소스 형태의 무료로 제공되기 보다, 비싼돈을 내고 써야하는 기업의 제품으로 제공되어 왔기 때문에 기업외의 일반 유저들이 접하기는 쉽지 않았다. (이 때문에 Matlab이나 Mathematica의 Keygen들이 토렌트에 여럿 검색되어 나오는 것일지도) 이런 저런 이유로 Notebook 형태의 분석툴은 일찍 등장한것에 비해 오랜시간동안 대중화되기 어려웠다. 그러다가 최근들어 Hadoop을 시작으로 빅데이터 분석툴이 주목을 받기 시작하면서 이를 사용하는 유저층이 넓어졌고 커맨드라인 대신에 편리하게 분석툴을 사용할수 있는 방법을 찾기 시작했다. 빅데이터 분석의 주 수요층인 연구소나 대학의 분석가들이 익숙한 인터페이스인 Notebook 환경이 주목받기 시작하면서 오픈소스 진영에서 IPython, Jupyter, Zeppelin등이 등장했다.

Jupyter는 Python, Julia등의 댜양한 프로그래밍 언어로 Notebook을 작성할수 있게 도와준다 (출처: http://Jupyter.org)

Zeppelin은 비교적 최근에 등장한 분석도구로서 아파치 소프트웨어 재단의 후원을 받으며 개발이 되고 있다. 사용자들은 Zeppelin을 이용하여 Web에서 Python, Scala등의 다양한 언어를 섞어가며 분석 코드를 짤수 있고 이 결과를 바로 Graph로 시각화하여 볼수 있다. 여기에 더해 Zeppelin은 넓어져가는 빅데이터 분석도구 시장의 다양한 니즈에 맞추기 위해서 Spark 뿐만이 아닌 Livy, Cassandra, Lens, SQL 등등의 다른 데이터 분석도구나 데이터 베이스에 접근하여 쿼리하는 것을 쉽게 할수 있는 확장 기능들을 지원한다. 오픈소스를 기반으로 빅데이터 분석 시스템을 구성하는 기업들은 다양한 기술 스택을 서로 엮어서 시스템을 구성하게 되는데 Zeppelin 하나만 있으면 이들 시스템의 각 요소들에 자유롭게 접근하여 데이터를 다룰수 있게 된 것이다. 이러한 확장성 때문에 Zeppelin은 후발주자임에도 매우 빠르게 여러 기업들에 사용되기 시작했고 널리 알려지게 된 것이다.

Zeppelin에서 Interpreter를 통해 다룰수 있는 다양한 기술 스택들 (출처: http://zeppelin.apache.org)

이러한 확장성은 Zeppelin의 Interpreter라는 플러그인 구조로 지원되는데 각 Interpreter들은 Zeppelin의 Web Interface를 통해서 입력받은 분석 코드를 local 또는 원격에서 실행할수 있다. 예를들어 Spark로 Map-Reduce하는 코드를 작성하고 실행을 누르면 Zeppelin안에 설치된 Spark Interpreter가 이를 받아 Spark Master에 Client 라이브러리를 통해 코드를 보내고 그 실행 결과를 받아 다시 Web Interface에 보내준다. 또한 Bash로 쉘 스크립트를 짜면 Zeppelin안에 탑재된 Shell Interpreter가 이를 받아 Zeppelin이 설치된 서버에서 shell script를 실행하고 그 결과를 Web Interface에 보내주는 형태이다. Zeppelin자체가 데이터 분석 처리를 하지 않기 때문에 분석 시스템이나 데이터베이스 등이 미리 구성되어 있어야 하고, Zeppelin과 이들 시스템을 연결해주는 작업을 해야 한다는 어려움이 있지만 한번 연결해 두면 같은 Notebook에서 Pyspark와 SparkR그리고 Cassandra DB를 한번에 조회하는 등의 일을 편하게 할수 있는 장점이 있다.

인터프리터를 통해서 서로다른 기술스택도 같은 Web에서 다룰수 있도록 해준다. (출처: http://zeppelin.apache.org)

이외 Zeppelin은 몇가지 장점을 더 가지는데 그중 하나가 협업 기능이다. Google Apps를 보면 여러 사람이 같이 Google Sheet나 Google Document등을 편집할수 있는데 Zeppelin도 WebSocket을 활용하여 같은 Notebook을 여러 사람이 동시에 편집할수 있는 기능을 제공하고 있다. 한 사람이 분석 코드를 짜면 다른 사람이 그 결과를 원격에서 실시간으로 바로 확인할수 있는 것이다. 이러한 기능은 원격으로 공동 작업을 통해서 실험과 논문을 작성하는 일이 많은 연구소에서 환영할만한 기능이다. 다만 Google Apps처럼 문서의 히스토리까지 알아서 관리해주는 기능은 2016년 현재 제공되지 않고 있다. (Git을 이용하여 비슷하게 지원하는 방법은 존재한다.)

여러 사람이 편집중인 모습을 실시간으로 확인할수 있다. (출처: http://zeppelin.apache.org)

이뿐만 아니라 Zeppelin은 Angular JS를 활용하여 Web Interface가 만들어졌기 때문에 Angular JS의 장점인 Data Binding기능을 응용한 보고서 또는 Dashboard등을 만들수 있다. 예를들어 학교에서 학생들의 성적을 분석하는 보고서를 만든다고 하자. 이 보고서에는 50점 이상의 학생들의 분포만 보여주는 그래프가 포함되어 있고 이 그래프를 만든이는 코드를 고쳐 50점을 60점으로 수정한 그래프를 쉽게 만들수 있을 것이다. 하지만 보고서를 보는 사람이 코드를 잘 모르는데 40점이나 70점 등으로 이리저리 확인해서 보고 싶다면? Zeppelin에선 이 기준점수를 TextBox로 받을수 있도록 Binding을 걸수 있다. 이렇게 하면 코드를 모르는 사람도 보고서에서 점수만 고치면 그래프가 자동으로 변경된 값을 반영하여 새로 그려지므로 좀더 사용자 친화적으로 보고서가 만들어진다. Binding뿐만 아니라, Angular 인터프리터를 사용하여 AngularJS가 가미된 HTML코드를 실행하면 Zeppelin소스를 수정하지 않아도 여러 GUI를 만들어 낼수 있어 다양한 Dashboard를 구성할 수 있다.

분석 코드 안에 변수를 삽입하고 Binding을 걸어 Interaction이 가능하도록 만들수 있다. (출처: http://zeppelin.apache.org)

이러한 대표적인 기능 외에 분석 및 협업 작업을 편리하게 해주는 다양한 기능들이 판올림이 될 때마다 전 세계의 개발자들에 의해서 제안되고 추가되고 있으며 앞으로 어떤 형태로 Zeppelin이 발전이 될지 기대가 되고 있다. 다만 아직 Jupyter 처럼 설치가 쉽지 않아 초심자들이 접하기가 어려운 편이며 2016년 9월 현재 0.6버전으로 아직 1.0이 되지 않아 여러 부분들이 불안정하다는 문제를 지니고 있긴하다. 하지만 리눅스가 그랬듯이 이러한 문제는 시간이 가면서 개선되리라 생각한다.

아마존, 마이크로소프트, 트위터, 페이스북 같은 글로벌 IT 공룡 뿐만 아니라 국내에선 VCNC(비트윈), 캐시슬라이드 같은 스타트업 부터 SK같은 대기업까지 활용하고 있는 Zeppelin은 데이터 분석 플랫폼을 개발하는 ZeppelinX(구 NFLABS)라는 한국 스타트업에서 만들었고 한국인들이 Maintainer로 활동하며 Apache Software Foundation의 지원을 받는 전 세계에서 몇 안되는 한국인이 주도하는 오픈소스 프로젝트이다. 한국인 PMC분들을 중심으로 국내 Zeppelin 유저들을 지원하기 위해서 페이스북 그룹을 운영하고 있는데 이곳에서 비정기적으로 다양한 교육이나 번개모임등을 하고 있으니 사용하시는 분이나 관심있으신 분은 이곳에서 Zeppelin을 만들고 계신 분들과 바로 소통하셨으면 좋겠다.

https://goo.gl/PDJuyM 또는 페이스북 “제플린과 친구들"로 가입하실수 있습니다.

다음시간엔 Zeppelin을 실제로 본인 머신에 설치하고 실행하는 방법에 대해서 다뤄보도록 하겠다. 필자도 이 부분이 쉽지 않았고 이것때문에 고생하는 사람들이 종종 있기 때문에 블로그로 소개하면 적잖아 도움이 되리라 생각한다.

--

--