쉽게 간편한 데이터 분석에 안성맞춤 '주피터 노트북'이란?

InfoWorld
누구나 자신의 작업 내용을 다른 사람에게 보여줘야 할 때가 있다. 대부분 프로그래밍 작업 내용은 가공되지 않은 소스 코드 형태나 컴파일을 거친 실행가능 파일 형태로 공유된다. 소스 코드에는 정보가 빠짐없이 제공되지만 “보여준다”기 보다 “말해 주는” 편에 가깝다. 실행가능 파일은 해당 소프트웨어가 어떤 작업을 하는지 보여 주지만, 소스 코드와 함께 제공되는 경우에도 정확히 어떤 식으로 작동하는지 이해하기 어려운 경향이 있다. 
 
ⓒNASA / JPL

만일 같은 UI에서 코드를 확인하고 실행할 수 있다면 어떨까? 코드를 수정한 후 수정 결과를 즉시 실시간으로 볼 수 있을 것이다. 그것이 바로 주피터 노트북(Jupyter Notebook)에서 제공되는 기능이다.  

주피터 노트북은 손쉽게 누군가의 프로그래밍 작업 내용을 보여주고 다른 사람들이 참여할 수 있도록 만들어졌다. ‘노트북’이라는 대화형 문서에 코드와 의견, 멀티미디어, 시각화 자료 등을 결합해 이를 공유하고 재사용 및 재작업할 수 있게 해 준다.  

웹 브라우저를 통해 실행되므로 주피터 노트북 자체를 자신의 로컬 시스템이나 원격 서버에 호스팅할 수 있다.  
 
ⓒIDG

주피터 노트북의 텍스트, 코드, 시각화 화면. 코드를 변경하고 브라우저에서 다시 실행하면 결과물도 바꾸고 새 결과를 새 노트에 저장할 수 있다.

주피터 노트북의 장점
주피터 노트북은 원래 파이썬, R, 줄리아 등의 언어로 작성된 데이터 과학 애플리케이션용으로 개발되었기 때문에 다음과 같은 각종 프로젝트에 다양한 방식으로 유용하다.

• 데이터 시각화. 대부분 사람이 주피터 노트북을 처음 접하는 것은 데이터 시각화를 통해서다. 데이터 시각화란 일부 데이터 모음의 렌더링이 그래픽으로 포함된 공유 노트북을 말한다. 주피터 노트북을 통해 시각화를 작성하고 공유할 수 있으며 공유된 코드 및 데이터 모음에 대화형 수정도 가능하다.
• 코드 공유. 깃허브, 페이스트빈 등의 클라우드 서비스에서 제공되는 코드 공유 방식은 대부분 대화형이 아니다. 반면, 주피터 노트북으로는 웹 브라우저에서 직접 코드를 확인, 실행하고 결과를 표시할 수 있다.
• 코드와의 실시간 대화. 주피터 노트북 코드는 고정되어 있지 않다. 브라우저에서 직접 제공되는 피드백을 반영해 실시간으로 조금씩 편집하여 다시 실행할 수 있다. 코드 입력 소스로 활용 가능한 사용자 제어장치(예: 슬라이더 또는 텍스트 입력 필드)에 노트북을 내장할 수도 있다.
• 코드 샘플 기록. 실시간 피드백을 주고받으면서 작동 방식을 라인별로 설명하고 싶은 코드가 있다면 주피터 노트북에 내장할 수 있다. 가장 큰 장점은 코드가 계속 정상 작동한다는 점이다. 설명과 함께 대화 기능을 추가할 수 있다. 보여주면서 말하기가 가능해진다.


주피터 노트북의 구성요소
주피터 노트북에는 여러 종류의 구성 요소를 포함할 수 있다. 이는 각각 다음과 같은 별도의 블록으로 구성된다.

• 텍스트 및 HTML. 문서 아무 데나 일반 텍스트(아니면 HTML 생성을 위해 마크다운 구문으로 주석을 단 텍스트)를 삽입할 수 있다. CSS 스타일링 역시 그때그때 포함하거나, 노트북 생성에 사용되는 템플릿에 추가할 수 있다.
• 코드 및 출력물. 주피터 노트북 내 코드는 주로 파이썬 코드지만, R이나 줄리아 같은 다른 언어 지원 기능을 사용자의 주피터 환경에 추가할 수 있다. 실행된 코드의 결과는 코드 블록 바로 뒤에 나타난다. 그리고 코드 블록은 원하는 순서대로 실행 가능하고 몇 번이고 다시 실행할 수 있다. 
• 시각화. 그래픽과 차트는 맷플롯립(Matplotlib), 플로틀리(Plotly), 보케(Bokeh)와 같은 모듈을 통해 코드로부터 생성할 수 있다. 출력물과 마찬가지로, 이들 시각화는 이를 생성한 코드 옆에 그때그때 표시된다. 단, 필요할 때 외부 파일에 따로 작성되도록 코드를 구성할 수도 있다.
• 멀티미디어. 주피터 노트북은 웹 기술로 구축되었기 때문에 웹 페이지에서 지원되는 각종 멀티미디어를 모두 표시할 수 있다. 노트북에 HTML 요소로 포함시킬 수도 있고 IPython.display 모듈을 통해 프로그램에 따라 생성시킬 수도 있다.
• 데이터. 데이터는 주피터 노트북을 구성하는 .ipynb 파일과 나란히 별도의 파일로 제공되거나 프로그램에 따라 내보내기도 가능하다. 예를 들면, 노트북에 코드를 포함해 공용 인터넷 저장소로부터 데이터를 다운로드 하거나 데이터베이스 연결을 통해 데이터에 접근하는 방식이다.

주피터 노트북의 활용 사례
주피터 노트북이 가장 흔하게 사용되는 곳은 데이터나 공식의 시각화가 필요한 데이터 과학, 수학 등의 연구 프로젝트다. 이 밖에도 다음과 같은 다양한 활용 사례가 있다.

• 대화형 기능 불문 시각화 공유. 사람들은 데이터 시각화 결과를 정지 이미지로 공유하는 경우가 많은데 이 방식이 유용한 것은 어느 정도까지만 그렇다. 주피터 노트북을 공유하면 사용자의 참여를 유도할 수 있다. 사용자는 대화형 방식을 통해 데이터를 철저하게 파악할 수 있다.
• 코드로 과정 기록. 프로그래밍 경험담 블로그를 운영하는 프로그래머 중에는 주피터 노트북으로 게시물을 작성하는 경우가 많다. 다른 사람들은 자신의 노트북을 다운로드 해서 해당 내용을 재현해 볼 수 있다.
• 라이브러리나 모듈을 위한 실시간 기록. 파이썬 모듈에 대한 대부분 기록은 고정적이다. 주피터 노트북은 특정 모듈의 작동 방식을 배우기 위한 대화형 학습 도구로 활용할 수 있다. 노트북 인터페이스에서 무난하게 작동하기만 한다면 어떤 파이썬 모듈이라도 가능하다. (즉, 동작의 일환으로 stdout에 작성되는 것이면 된다.)
• 코드 및 데이터의 일반적인 공유. 주피터 노트북과 관련 데이터 파일을 공유하려면 보관소에 옮겨 넣기만 하면 된다.

주피터 노트북의 한계점
이처럼 강력하고 유용한 주피터 노트북에도 다음과 같이 감안해야 할 한계점이 없지 않다.

• 노트북이 자립적이지 않다. 주피터 노트북 사용에 가장 큰 한 가지 단점이 이것이다. 노트북은 사용하고자 하는 모든 라이브러리와 더불어 주피터 런타임을 요구한다. 자립적 주피터 노트북을 만들기 위한 몇 가지 전략이 존재하지만, 그 중에 공식적으로 지원되는 것은 없다. 노트북을 실행할 수 있는 인프라를 이미 구비하고 있거나 설정에 신경 쓰지 않는 사람에게 노트북을 (예를 들면 아나콘다(Anaconda)를 통해) 배포하는 편이 가장 낫다.
• 세션 상태를 쉽게 저장할 수 없다. 주피터 노트북에서 실행되는 모든 코드는 그 상태를 주피터 노트북의 기본 도구모음으로는 보존하고 복원할 수 없다. 노트북을 불러올 때마다 노트북에서 코드를 다시 실행해야만 그 상태를 복원시킬 수 있다.
• 대화형 디버깅 등 IDE 기능이 없다. 주피터 노트북은 본격적인 파이썬용 개발 환경이 아니다. IDE에 있어야 할 기능(예: 대화형 디버깅, 코드 완성, 모듈 관리) 중 많은 부분이 없다.
ciokr@idg.co.kr