Tag Archives: gorildown

Clojure 프로젝트 공유하기 (Gorilla REPL)

파이썬에 Jupyter가 있다면, 클로저에는 Gorilla REPL이 있다. 물론 Jupyter에도 클로저 커널을 올려서 사용할 수 있지만, 기본 REPL을 띄워서 연습하는 경우면 몰라도  project.clj에 dependencies나 기타 세팅을 포함한 프로젝트를 테스트하는데는 무리가 있다. 파이썬의 경우에는 virtual env에 세팅을 해버리면 그만이지만 클로저는 프로젝트 세팅을 참조해서 Leiningen REPL을 올려야 하기 때문이다.

물론 동적으로 의존성을 추가할 수 있는 라이브러리도 존재하긴 하지만 여전히 번거로운 작업이고, Jupyter나 Gorilla REPL과 같은 노트북 스타일을 사용하는 목적은 스크립트와 그 실행 결과를 Markdown 기반의 설명과 함께 공유하기 위함인데 노트북에 프로젝트 세팅하는 코드가 난무하는 것도 그리 바람직하지 못하다. 이런 면에서 클로저 프로젝트를 위해선 Jupyter보다는 Gorilla REPL을 사용하는 것이 그 목적에 더 부합하는 것 같다.

Gorilla REPL도 Jupyter와 유사하게 웹 UI상에서 클로저 코드를 실행하고 그 결과를 동적으로 렌더링해주며, Markdown 문법을 사용한 설명을 덧붙여 저장할 수 있는 기능을 제공한다.

이렇게 작성한 결과는 클로저 파일로 저장된다.

웹 UI 상에서 실행했던 코드와 결과들을 Gorilla REPL에서 정의한 notation들이 포함된 주석으로 감싸고 있다. 그런데 앞서 언급했듯이, 노트북 스타일의 결과물은 공유 기능이 상당히 중요한 부분 중 하나인데, Gorilla REPL의 웹 UI와 같이 HTML로 렌더링된 결과물을 공유하고자 할 때는 해당 프로젝트를 통째로 공유한 다음 다른 사용자가 Gorilla REPL을 띄워 확인하도록 해야 하는데 상당히 번거롭다. 공유 대상이 클로저 개발자라면 Gorilla REPL이 저장한 클로저 파일을 공유할 수도 있겠지만, 번잡스러운 주석이 걸리적거리는 것을 감수해야 한다.

Github에 프로젝트를 공개하는 경우 Jupyter 노트북의 저장 결과물인 ‘.ipynb’는 자동으로 렌더링되어 Markdown 형식으로 살펴볼 수 있지만 Gorilla REPL의 결과 클로저 파일은 렌더링되지 않기 때문에 변환과정을 거치는 수 밖에 없다. 다행히도 Gist에 Timothy Renner가 작성해둔 변환 코드가 공개되어 있길래, 이걸 조금 다듬어서 변환 프로젝트를 배포했는데, Gorilla REPL 기반의 프로젝트에 포함된 모든 노트북들을 한 번에 Markdown으로 변환해주는 프로젝트가 있으면 편리할 것 같아 아예 Leiningen 플러그인으로 배포해 보았다.

Gorilla REPL을 사용하는 프로젝트에 lein-gorildown 플러그인을 세팅하고 터미널에서  $ lein gorildown 을 실행해주면 Gorilla REPL 노트북만 골라내어 Markdown으로 변환해준다. 변환된 파일을 Github에 공유하거나 Markdown 뷰어를 사용하여 확인하면 되니 공유하기에도 편리하다.