Julia 설치

소개

  • http://julialang.org/
  • 한국내 사용자 커뮤니티 https://www.facebook.com/groups/juliakorea/
  • 한국어로 번역된 소개글 https://juliakorea.github.io/latest/manual/introduction.html
  • 수치해석, 과학기술자를 위한 동적 스크립트 언어이다.
  • 2012년부터 MIT에서 스테판 카르핀스키(Stefan Karpinski)를 포함한 몇 명의 팀이 만들었다.
  • 유니코드 기반, LLVM 백엔드 컴파일러, JIT 등의 최신기술을 최대한 이용해서 개발되었다. 현존하는 과학기술용 언어 중에서 가장 최신의 물건이다.
  • 공개 직후 많은 사람들의 주목을 끌었던 와우 포인트는 엄청나게 빠른 실행속도였다. 벤치마킹을 보면 속도가 거의 C나 Fortran에 근접한다. (물론 여러 조건이 맞아들어갈 때의 이야기라고는 하지만 매우 놀라운 결과였다.)
  • 그렇게 빠른데도 불구하고 문법은 Matlab이랑 별 차이 없다. 한마디로 엄청 쉽다. 실행속도도 빠른데 코딩 생산성도 엄청나게 높은 것이다.
  • Matlab 정품은 너무 비싸기 때문에 합법적으로 사용하기가 쉽지 않다. 대안으로 존재하는 Octave, Scientific Python, R 등이 있지만 각각 단점들이 역시 존재한다. Octave는 너무 느리고 구식이다. Python은 프로그래밍 배우기가 쉽지않다(쉽다고들 하는데도 여전히 어렵다. 객체지향적으로 써진 소스코드를 보기 좋아하는 설계 전문 기계공학 엔지니어가 과연 얼마나 있을까).

장점

  • 코딩할 때 한 줄 끝나고 나서 빌어먹을 세미콜론(;)을 생략해도 된다.
  • Matlab 방식의 벡터/행렬 문법이 거의 다 그대로 먹어들어간다. 때문에 적응이 매우 쉽다.
  • Matlab처럼, 변수의 형(Type)을 일일이 정의하거나 해 줄 필요가 없다.
  • 유니코드 기반이라서, 함수 이름이라던가 변수 이름을 한글이나 그리스 문자 따위로 해도 된다. 심지어 Tex 문법으로 써서 해도 된다.
  • 수식을 써 넣을 때 곱셈 기호(*)를 생략해도 에러를 내뿜지 않고 알아먹는다. 2x라고 써도 2*x라고 알아먹는다는 뜻이다.
  • 자체 패키지 관리자가 있다. 때문에 필요한 라이브러리를 설치/관리하기가 매우 편하다.

단점

  • 아직 너무 젋은 언어라서 라이브러리 생태계가 충분히 거대하지는 않다. 필요한 것이 아직 없을수도 있다.
  • 독립 실행파일로 빌드하는 기능이 아직 개발단계에 있어서 실질적으로 사용할 수 없다.
  • Python에서 기능을 빌려쓰는 경우가 좀 있다. 때문에 Python 및 관련 Python 패키지가 설치되어 있지 않으면 사용 불가능한 기능도 있다.

배경지식

  • Matlab에서 간단한 계산이나 Plot정도 할 줄 알면 충분하다.
  • 나머지는 매뉴얼 등을 보면서 쉽게 익힐 수 있다.
  • 자신의 문제를 풀기 위해 간단히 짧은 스크립트 프로그램을 짜서 해결하고, 필요할 경우 Plot 또는 파일로 결과를 출력해 내는 것 만으로도 강력한 무기가 될 수 있다.
  • Julia 말고 다른 것들을 오랫동안 검토해 왔었다. 하지만 결국 최종적으로 Julia를 선택하게 되었다.
  • Scientific Python은 방대한 라이브러리가 있어서 강력하지만, 대신 그것들을 익히는데 너무 노력이 많이 들어갔다. 설계 엔지니어가 실무현장에서 이런 것을 위한 스터디 기회를 얻기가 현실적으로 힘들다. 또 Python은 적합한 환경을 구축하는데 생각보다 조금 까다로운 점이 있었다.
  • GNU Octave는 편하긴 하지만 역시 사용하고 싶지 않았다. 발전성이 별로 없어 보인다고 생각했다.
  • Scilab은 불안정성도 많이 해소되고 해서 상당히 성숙했지만, 역시 Matlab의 패러다임에서 벗어나지 못해서 제외했다. 그렇다고 해서 절대 안 쓰겠다 뭐 이럴 필요는 없겠다. Scilab에는 XCOS가 있으니 제어공학 하려면 이거라도 쓰는게 좋을 것이다.
  • SageMath는 실제로 적용을 시도해 보기도 했는데, SageMath Notebook 업데이트가 중단되고 SageCloud Service위주로 돌아가기 시작하다 보니 공학용으로 쓰기가 적합하지 않게 되어버렸다. 또 Exact Solution을 위한 수학 쪽에는 좋지만, 수치해석 쪽에는 확실히 불리해서 그냥 Python 쓰는거랑 차이가 없었다.
  • Processing Lang도 좀 깊게 검토하고 이리저리 써보기도 했었다. 문법도 매우 쉽고 해서 좋았지만, 아무래도 개발목적 자체가 수치해석과는 거리가 있다 보니 약간 안맞는 느낌이 들었다. 또 Java 기반이다 보니 그것도 매우 좋지 않았다. Web에서 실행가능한 Processing.js도 있어서 써 봤는데, 좋긴 하지만 다른 대체품이 나와서 조만간 사라질 환경이라고 판단되었다.
  • 결국 남는건 Julia 밖에 없었다.

설치 방법

  • 우선 Python 환경부터 만들어준다. Julia의 기초적인 패키지에서 이것들을 갖다 쓰게 된다. 터미널에서 아래 명령을 준다.
    sudo apt-get install python-pip
    sudo pip install ipython[notebook]
    sudo pip install jsonschema
    sudo pip install pip-tools matplotlib jinja2 sphinx pyzmq pygments tornado nose readline
    sudo pip-review --interactive
    
  • pip는 python의 패키지 관리자이다. 위에서 마지막 명령을 주면 메시지에 따라서 모든 패키지를 다 업그레이드 해 주면 된다.
  • 그리고 Julia 저장소를 설정하고 설치한다.
    sudo add-apt-repository ppa:staticfloat/juliareleases
    sudo add-apt-repository ppa:staticfloat/julia-deps
    sudo apt-get update
    sudo apt-get install julia
    sudo apt-get upgrade
    
  • 이제 Julia를 터미널에서 julia라고 쳐서 실행해 본다. 실행이 잘 되면 Julia 프롬프트상에서 다음의 명령을 쳐서 기초적인 패키지를 먼저 깔아준다. 참고로, Pkg는 Julia의 패키지 관리자이다.
    Pkg.init()
    Pkg.add("Jewel")
    Pkg.add("Images")
    Pkg.add("PyPlot")
    Pkg.add("IJulia")
    Pkg.update()
    
  • 이정도만 해도 기본적인 Plot정도 하는데는 충분하다. 추가적인 라이브러리들은 이곳에서 보고 골라 쓰면 된다.
  • 위에서 설치된 패키지들 중에서, ipython-notebook은 최신버전으로 업그레이드 되었기 때문에 나중에 실행시키면 jupyter 환경이 실행될 것이다.

Juno IDE 설치 방법

  • 이제 Julia 코딩을 위한 에디터가 필요하다. 아무거나 써도 되지만 제일 좋은 것은 환경이 잘 갖춰진 전용 에디터를 쓰는 것이다. Julia 홈페이지에서 Juno IDE를 다운로드 받아서 /opt/Juno로 풀어넣고 써도 되는데, 보니까 사소한 버그가 있어서 찜찜하다. 그냥 Juno의 원본인 LightTable 에디터를 깔아서 쓰는게 더 깔끔한 것 같다. LightTable 설치는 이곳을 참고한다.
  • 설치된 LightTable에 이제 Julia 관련 Plugin을 추가로 설치하자.
  • 터미널에서 sudo LightTable해서 루트 권한으로 실행할 것.
  • Commands에서 Plugins: Show plugin Manager 해서 julia를 검색한 다음에 Julia 및 Juno의 2개 패키지를 Install하면 된다.
  • LightTable을 종료하고, 다시 사용자권한으로 LightTable 실행.
  • 그럼 자동적으로 Juno가 LightTable 내부에서 실행되면서 Julia와 연결된다.
  • 아무 .jl 파일 하나 만들어서 내용을 써 넣어 본 후, Shift+Enter로 실행해 보면 된다. 끝!

IJulia를 사용해 보기

  • Juno 에디터 말고 다른 방법도 있다. 아까 설치된 패키지인 IJulia를 이용하는 것이다.
  • IJulia는 내부적으로 iPython을 불러다가 올라타서 실행된다.
  • 터미널에서 julia실행한 다음에 Julia 프롬프트상에서 다음을 실행해 보자.
    using IJulia
    notebook()
    
  • 또는 터미널에서 이렇게 명령을 줘도 바로 실행된다. (단, 이 경우에는 실행 후에 커널을 Julia로 선택해 줘야 Julia 명령이 먹는다.)
    ipython notebook
    
  • 그러면 내부적으로 iPython notebook(=Jupiter) 기능이 실행되면서, 그 위에 Julia 편집 패키지가 올라타게 된다. 시스템에서 로컬 웹서버가 만들어지고, 그것에 연결되도록 시스템의 기본 웹브라우저가 실행되면서 iJulia 편집 환경이 나타나게 된다.
  • 참고로, Jupyter라는 것은 기존의 iPython Notebook의 업그레이드 버전이라고 보면 된다. 기존에는 Python 전용이었는데 이제부터는 다른 다양한 언어들도 이곳에서 전부 실행 가능하게 되었다. 실행 가능한 언어들의 목록은 이곳을 참고. Jupyter로 여러가지 언어들의 커널을 설치해 보려면 이곳 참조. Jupyter 소개는 이곳 참조.
  • Jupyter의 웹환경을 사용하는 IJulia를 사용할 경우, 작성된 코드 및 문서는 *.ipynb 포멧으로 저장된다. 텍스트 편집기로 열어보면 xml 파일임을 알 수 있는데, 이것 y체만으로는 써먹을데가 없겠지만... Github의 Gistnbviewer 서비스를 이용하면 아주 편리하게 웹에 자신의 Notebook 내용을 그대로 얼려서 게시할 수 있다는 잇점이 있다.
  • 참고로 Gist라는 것은 소스코드를 복사해 넣고 웹에서 예쁘고 편리하게 사용할 수 있도록 주소를 제공해 주는 서비스이다. Gist에 간단한 문장이나 코드를 복사해 넣고 URL주소를 받은 다음, 그 주소를 html 작성할 때 그 주소를 이용해서 삽입(embed)해 넣으면 예쁘게 하이라이트된 코드를 보여줄 수 있다. *.ipynb 파일은 xml 코드 전체를 통째로 복사해 넣으면 된다. Nbviewer 서비스는, 여기에 Gist 주소를 넣고 변환을 시킨 후 나오는 URL주소를 삽입(embed)해 넣으면 *.ipynb 파일이 원래의 모습 그대로 얼려져서 웹에 게시할 수 있게 된다. 좀 더 구체적인 사용방법은 이곳을 참고.

JuliaBox.org 서비스

  • IJulia 환경을 이용해서 퍼블릭 서비스도 하고 있다. 그냥 들어가서 계정만들거나 SNS계정으로 접속해서 사용하면 된다. 온라인으로 작업 가능하므로 편리하긴 한데, 한달정도 써 보니까 인터넷 접속이 불안정할 경우에 가끔 데이타가 날아가버리거나 할 수도 있어서 저장 등에 극히 유의해야겠다 싶었다.
  • 그래도 캐쥬얼하게 써보는데는 상당히 유용한 듯 하다.
  • 본 서비스는 아마존에서 제공하는 서버 환경에서 Docker 가상머신을 사용자가 띄우는 인스턴스마다 만들어서 서비스를 제공하는 형태다. 최신 IT기술의 구현 사례를 직접 확인해 보는 차원에서도 좋은 것 같다.