서버 관리하기

NIMS의 JupyterHub 완전 파헤치기

다된밥통 2018. 7. 19. 20:03

안녕하세요! 다된밥통입니다!

오늘은 JupyterHub 에 대해 알아볼까 합니다! 시작해볼까요?

이번 글의 목표는! "Linux 에 설치된 Python 을 Jupyter or JupyterHub 를 통해 웹에서 사용해보기!" 입니다.

여기서 보이는 Linux 라는 운영체제, Python 프로그램 언어, 그리고 웹 기반 환경에 대해 먼저 살펴볼까요?

운영체제는 소프트웨어와 하드웨어를 사이에서 둘을 이어주는 중재 역할을 하고 있는데요! 우리가 흔히 알고 있는 OS 로는 윈도우10, 맥 OS, 등이 있을 수 있겠네요! 그중 오늘은 Linux 라는 환경을 기준으로 해보려합니다!

좀더 들어가기에 앞서 몇가지 용어를 살펴볼게요! (경고. 위 내용은 제가 생각하는 내용이니.. 전적으로 믿으시면 안됩니다!!)

예를 들면 위와 같이 쓸 수 있겠네요! 특히 포트는 알려진 포트를 이용하게되면 서로 통신에 문제가 생기게 되겠지요? (참고. TCP/UDP의 포트 목록)

Linux 는 다양한 장점들이 있는데요! 누구나 소스를 수정하고 할 수 있는 프리웨어이고 GUI 환경을 사용할 수도 있기 때문에 많은 분들이 사용하고 있답니다.

Python 은 최근 인기가 좋은데요! 일화로는 귀도 반 로섬과 그 친구들이 크리스마스 이브에 불편한 프로그래밍 언어를 해결하기 위한 새로운 언어를 개발했다... 라는 말이... 역시 천재는 달라달라...

무튼, 특징은 객체지향언어이기 때문에 처음 코딩을 접하는 분들께도 비교적 쉽게 하실 수 있다는 것이지요!

또한, 그 이름은 그들이 좋아하는 코미디 쇼 이름에서 따왔다고 하네요! 사실 python은 보아뱀?이라는 뜻을 가진 영어인데요, python의 로고에서도 확인할 수 있어요! (잘 보시면, 뱀 두마리가 똬리를 틀고 있지요!?)

파이썬에 대해 좀더 설명 드리면, 인터프리터라는 점인데요! 쉽게 (경고. 제 생각입니다) 설명하자면, 위 그림처럼 이해할 수 있을 거 같아요!

기존의 프로그램 언어들은 컴파일러 (코드를 컴퓨터가 알아들을 수 있는 언어로 변환하는 친구, 번역가)가 있어 전문을 읽고 번역 후 컴푸터에게 전달하는 방식인데요!

파이썬은 인터프리터 (코드 작성을 바로바로 변환하는 친구, 통역사)가 있어 바로바로 컴퓨터와 대화하는 느낌의 언어로 생각될 수 있어요.

이 파이썬 언어를 편리하게 쓸 수 있는 편집기로는, 아나콘다(Anaconda), 스파이더(Spyder), 파이참(PyCharm), 등등이 있습니다. 특히 IPython 은 In 과 Out 이라는 입력창과 출력창을 보여줌으로써 더더욱 대화형 언어 형태를 띄고 있습니다.

마지막으로 JupyterHub 에 대해 알아볼까요?

세상이 발전하면서 물론 컴퓨터의 발전도 눈부시게 나아겠는데요!

많은 프로그래머들은 더 좋은 컴퓨터를 어느곳에서나 사용하고프다는 생각을 하게 되었고, 이는 Project Jupyter 로 이어졌습니다.

앞서 말한 IPython 의 특징을 잘 살려 2014년에는 Jupyter 로 발전했는데요, 이름에서 보이듯이 줄리아(Julia) 와 파이썬(Python) 의 이름을 따왔습니다.

특히, 발음이 비슷한 목성 (Jupiter) 과는 많은 특징을 공유하고 있는데요!

많은 위성 (다양한 언어 지원)을 가지고 있고, 재현성 (누구나 똑같은 결과를 얻을 수 있게끔!)에 그 중심을 두고 있습니다!

이렇게 하면, 성능이 뛰어난 엄청 큰 서버컴퓨터를 두고 여러분들은 Jupyter를 이용해 휴대폰이든 노트북을 이용해 그 성능을 외부에서 쉽게 이용할 수 있게 되는 것이지요!

그렇다면, 우리에겐 이러한 환경이 필요할까요? 만약 실습을 하게 된다면, 위의 학생 1,2,3,4처럼 시작도 전에 다양한 난관에 봉착하게 되는데요!

웹 환경에 잘 세팅하고 모두 그곳으로 접속하게 된다면 아주 순조롭게 실습을 진행할 수 있겠지요!? 뿐만 아니라 공동작업에도 쓰일 수 있겠네요!

이러한 환경구축이 힘들 수 있기 때문에 다양한 기업에서 주피터 환경 서비스를 제공하고 있는데요! 우리나라의 국가수리과학연구소에서도 지원하고 있답니다.

지원되는 스펙은 다음과 같구요! 인텔의 i5 6세대와 비교했을땐 CPU 성능에서는 3배정도 차이가 나네요!

NIMS 에서 지원하는 Jupyter 서비스는 사실 JupyterHub 인데요! 차이는 JupyterHub는 허브를 통해 각 접속자, 계정별로 새로운 가상환경을 띄워 독립적인 주피터 환경을 제공해 줍니다. 이 때, NIMS 는 Docker를 이용하여 가상환경을 구축했는데요!

Docker 는 기존의 VM (virtual machine)에 비해 굉장히 가볍고 성능도 뛰어나답니다. (이유는, 공통된 OS 내용은 공유하고 다른부분만 기록해두기 때문이지요!)

이 두 차이를 좀 더 쉽게 설명하면 아래처럼 생각해볼 수 있어요!

VM 은 한 몸에 여러 인격이 들어있는 느낌이지요.

각각의 공간을 가지고 있어야만 하기 때문에 전체적으로 성능이 떨어질 수 밖에 없겠죠?

하지만 도커는 공통된 부분 (나!)라는 것은 유지하고, 다른 부분만 가지고 가는데요!

마치 우리가 여러 직책? 역할들을 하는 것과 비슷하게 생각할 수 있습니다. 물론 그렇기 때문에 공통된 부분이 적은, 다른 기반의 OS 를 가상환경으로 구축하게되면 빠른 속도를 보장받을 순 없는 거 같아요!

Jupyter 또는 JupyterHub 를 잘 활용하면 멋진 조교가 될 수 있겠죠!!?

이번 글에선 여러 내용들을 살펴봤는데요! 도움이 되길 바랍니다!

감사합니다~!