Julia Language

[Julia] 줄리아, 지금 당장 시작하라! (부제: 줄리아를 배워야 하는 이유)

공부하는백수 2021. 4. 15. 10:26

나는 개발자이긴하다.
내가 '이긴하다'라고 표현한 이유는 껍데기는 개발자이나 업무의 비중이 연구에 더 높기 때문이다.
따라서 다른 블로그에 있는 내용들보다 프로그래밍에 관한 학문적(혹은 기술적) 깊이가 얕을 수도 있다. (밑밥깔기용 멘트인건 안비밀)

그럼에도 불구하고 내가 기술 블로그를 시작한 이유는 순전히 Julia라는 언어 때문이다.


Julia라는 언어를 아주 오래 전에 들어본 기억이 난다.
하지만 그때는 그냥 무시하고 넘어 갔다. 왜냐하면 머신러닝, 데이터 분석, 알고리즘 설계 등에 있어 python, R, MATLAB 같은 훌륭한 언어들이 이미 존재하고 있었기 때문이다.
그러다 얼마 전 아주 우연한 기회에 Julia라는 언어를 다시 마주하게 되었다.
요즘 들어 한동안 소홀했던 머신러닝 알고리즘을 다시 공부하면서 Kaggle에 관심을 갖게 되었는데 Kaggle 상위권에 Julia 언어도 많이 보인다는 글을 어느 블로그에서 접하게 되면서 Julia가 뭐지?라는 생각에 구글링을 하게 되었다.

Julia는 쉽고, 빠르다.


구글에서 Julia 프로그래밍 혹은 줄리아 프로그래밍, 줄리아 언어 등으로 검색을 해보면 python 대비 Julia의 장점이 무엇인지 설명하는 글들이 제법 보인다. 해당 포스트를 열어보면 공통적으로 하는 말이 python만큼 배우기 쉽고 C에 버금갈 만큼 빠르다는 것이다. 아래 그림은 C의 속도를 1.0이라고 할 때, 다른 언어들의 작업 수행 속도를 비교한 결과이다. Julia를 보라. 놀랍게도 1.0에 근접한 성능을 보여주고 있다.


Julia의 빠른 속도는 나의 눈을 사로 잡았다.
그간 python, R, MATLAB 등으로 알고리즘을 수정해가며 데이터 분석 결과를 비교하는데 있어 항상 느린 처리 시간이 불만이었기 때문이다. 아무리 잘 짜려고 노력해도 interpreter의 한계는 명확했다.
그런데 Julia는 (범용 언어이기는 하지만) 수치해석, 데이터 분석, 머신러닝 등 scientific computing을 목적으로 개발되었음에도 불구하고 C에 버금갈만큼 빠르다고한다.
그렇다면 한 번 쯤은 써볼만하지 않은가?라는 생각으로 Julia의 세계에 입문하게 되었다.

(참고로 위 그림은 https://rk1993.tistory.com/entry/PYTHON%EB%B3%B4%EB%8B%A4-%EC%A4%84%EB%A6%AC%EC%95%84 블로그의 그림을 가져왔다. 해당 블로그에 Julia에 대하여 잘 소개를 해놨으니 한 번 읽어보길 추천!)

그럼 얼마나 쉽고 얼마나 빠른데?


나는 알고리즘을 설계하는 업무가 주이기 때문에 MATLAB을 많이 활용하고 경우에 따라 R과 python을 병행한다. 그리고 알고리즘 설계가 완성되면 C로 구현하여 제품에 적용한다. 이 네 가지 언어의 활용비중은 MATLAB(50%), python (20%), R(5%), C(25%) 정도 되는 것 같다. (예전에는 R을 많이 사용하였는데 이제는 거의 쓰지 않는다. 사실상 0%일 듯)

위 언어들 중 MATLAB, python, R의 실행속도는 사실 비슷비슷하다.
task에 따라 언어 간 속도 차가 있겠지만 솔직히 유의미하게 큰 차이는 모르겠다. ( 나같은 경우 아직까지는 python과 R을 제한적으로 사용하고 있어 일반적으로 성립하지 않을 수 있다.)

그런데 내가 사용해본 Julia는 정말 빨랐다.
최근 MATLAB으로 작성한 알고리즘 개발 코드를 Julia로 변화하는 작업을 하고 있는데 체감상 MATLAB보다 최소 10~20배 정도 빠른 것처럼 느껴진다. 특히나 어쩔 수 없이 for문을 많이 돌려야 하고나 대용량 파일을 읽고 쓸 때 Julia는 좋은 선택지가 될 것이다. (추가: 벡터-행렬 연산은 MATLAB과 거의 차이가 없다. MATLAB이 이미 최적화가 잘 되어 있기 때문..)

그렇다고 C처럼 코딩할 때 이것저것 신경써줘야 할 것이 많은가?
그렇지도 않다.
Julia의 문법은 마치 MATLAB+Python+C의 느낌이다.
C의 느낌은 구조체의 정의 정도에서만 느껴볼 수 있고 사실 python과 MATLAB을 사용할줄 안다면 Julia 언어를 배우는 것은 매우 쉽다.
나는 책을 구매하여 하루 정도 살펴본 후 인터넷을 간간히 찾아가며 어느 정도 원하는 알고리즘을 바로 구현할 수 있었다. 나는 프로그래링에 소질이 별로 없기 때문에 아마 이 글을 보는 분들은 더 쉽게 다가갈 수 있으리라 생각된다.

Julia Language, 지금 당장 시작하라!


개인적으로 Julia 언어 입문을 강추한다.
당신이 지금 MATLAB, python, R등을 사용하고 있다면 지금 당장 Julia 공부를 시작하라고 말하고 싶다.

물론 기존의 언어를 버리라는 것이 아니다.
기존 언어들이 형성하고 있는 방대한 생태계를 무시할 수 없다. 안정성 측면과 버전 업데이트 시 하위 호환성 문제 등은 여전히 Julia를 선택하는데 장애 요소로 작용한다.

그럼에도 불구하고 scientific computing을 많이 하고 다루는 문제가 복잡하거나 데이터의 양이 방대하여 당신이 만든 알고리즘을 한 번 테스트하는데 많은 시간이 소요된다면 Julia를 통해 드라마틱한 생산성 향상을 이루어 낼 수도 있다.
일단 시도해보자. 경험도 하지 않고 선택하는 것은 바보 같은 짓이다.
라이브러리가 부족하다는 불만들이 있지만 나는 쓸만큼은 다 있다고 생각한다. python과 R에서 제공되는 엄청나게 많은 라이브러리(패키지) 중 당신이 몇 %나 사용하는가? 그래도 부족하다면 Julia는 C나 포트란 라이브러리를 가져다 쓸 수 있고 PyCall을 통해 파이썬을 불러올 수도 있기 때문에 부족한 라이브러리는 문제에 대한 해법이 어느 정도 존재하다고 말해주고 싶다.

블로그를 시작하며..


서두에 밝혔듯이 내가 블로그를 개설한 이유는 Julia 언어의 매력에 빠졌기 때문이다.
사실 나는 Notion에 내가 공부한 것들을 기록해왔기 때문에 블로그 개설에 대한 필요성을 느끼지 못하였다.
그런데 Julia 언어를 공부하려고 하니 자료를 많이 찾을 수 없었다.
그래서 앞으로 내가 Julia 언어를 공부해가며 겪는 시행착오들을 여기에 기록해 놓으면 내가 다른 블로그에서 도움을 받은 것처럼 나보다 늦게 Julia를 공부하는 사람들에게 조금이나마 도움이 되길 바라는 마음으로 이 블로그를 운영해볼 생각이다.

참고로 이 블로그에서 Julia 강의를 진행하지는 않는다.
따라서 어떠한 커리큘럼대로 글이 작성되지는 않을 것이다.
그러나 시간이 흐르면 작은 글들이 모여 자연스럽게 나름대로의 연관관계를 형성하고 이 곳을 찾는 모든 분들에게 유익하게 읽히길 기대해본다.


2021. 04
무명의 개발자