Why Clojure (클로저)

2011년 lisp을 common lisp으로 처음 접하고 지금까지 clojure를 사용한지 벌써 6년이 지난다. clojure를 간단한 side project나 취미로 사용한게 아니라, 창업하고 시스템을 구축하면서 서버의 메인 언어로 사용했다.

내가 창업했던 회사는 2012년에 시작한 부동산 플랫폼 다방(https://www.dabangapp.com) 이고 국내에서는 브랜드 인지도로 인해서 트래픽이 적지 않다. 다방은 맨 처음 내가 취미로 시작했지만 서비스가 커져나감에 따라 취미 프로젝트에서 진짜 프로젝트로 서서히 바뀌었고, clojure는 빠른 프로토타이핑에서 실제 많은 트래픽을 받을때까지 안정적으로 동작하였다.

내가 느낀 clojure의 장점을 나열해보려면 엄청 많이 있는데, 그 중 나에게 있어서 제일 좋았던 몇가지를 써보면 다음과 같다.

  1. 코드 생산성
    JVM기반의 언어이긴 하지만 python이나 ruby와 같은 언어보다 더 간결하다. python과 같은 언어보다는 그래도 compile time에 잡아주는 에러가 조금 더 있긴 하지만 근본적으로 dynamic type에 속한다.
  2. Java interop
    꽤 좋아 보이고 시도해보고 싶은 언어가 몇개 있어도 보통 그 언어의 커뮤니티가 어느정도 커지기 전에는 실제 project에서 도입하기가 힘들다. 왜냐면 아주 기본적인 부분도 구현이 안되어 있을 가능성이 크기 때문에 중요한걸 못하고 기본적인 라이브러리를 먼저 만들고 있어야 할 가능성이 크기 때문이다. clojure는 JVM기반의 언어이고 java interop이 아주 간결하게 되어 있기 때문에 특정 라이브러리의 clojure wrapper가 굳이 없어도 바로 사용가능 하다. 이런 이유로 왠만한 라이브러리는 java쪽이 이미 잘 만들어져 있기 때문에 쉽게 갖다 쓸 수 있다.
  3. Immutability
    Functional language는 예전에 학교 다닐때 숙제로 SML을 사용해본게 다 였고, 실제 프로젝트에서 immutability를 느껴볼수 없었다. 그런데 clojure는 기본적으로 data structure가 모두 immutable이다. 처음 접했을때는 이게 익숙치 않아 이상하게 사용하기도 했고, 왜 이렇게 불편한가 싶었는데 이제는 오히려 immutable data가 아니면 마음이 괜히 불편하다.
  4. LISP
    lisp의 장점을 찾아보면 수도 없이 많이 나오는데, 개인적으로 생각하기에는 제일 좋은 점은 macro에서 시작되는것 같다. lisp처럼 간단한 syntax이기 때문에 macro를 만들수 있고, macro로 인해서 언어 자체와 library의 경계를 허문다. 이러한 특성 때문에 lisp에는 다른 언어의 좋은점들을 쉽게 가져와 마치 원래 있던것 처럼 사용할 수 있다. 예를 들면 go lang의 go routine과 channel은 언어 자체에 내장된 기능이고, 이걸 다른 언어에서 가져오기란 쉽지 않다. 그런데 clojure에는 core.async 라는 패키지가 있고 go routine과 channel을 사용해 볼 수 있다.

개인적으로 생각하기에 실제 프로젝트에 믿고 사용할 수 있으면서, 구닥다리 언어가 아니라 생산성 높은 좋은 언어를 사용하고 싶다면 clojure를 배워서 써보기를 추천한다.

Show your support

Clapping shows how much you appreciated Heehong Moon’s story.