본문 바로가기

프로그래밍/clojure

Lein과 함께 클로저 시작하기

클로저 시작하기

클로저(Clojure)는 JVM에서 사용할 수 있는 언어입니다. 원래 JVM은 Java를 위해 만들어진 가상 머신이었지만, 이제는 자바가 독점하고 있지 않습니다. Groovy, JRuby, Jython, Scala 등 다른 언어들이 JVM 위에서 공존하고 있습니다. 이러한 언어중 하나가 클로저입니다. 클로저는 다른 JVM 언어와 완전히 다른 함수형 프로그래밍 언어입니다. 그렇기 때문에 다른 언어에서 볼 수 없는 독특한 기능들을 많이 가지고 있습니다. 다른 언어를 사용 하던 사람들이 클로저를 사용하려면 좀 힘들지만, 잘 사용하기 시작하면 엄청난 위력을 보여 줄 수 있는 그런 언어입니다. 

클로저를 시작하기 위해서 가장 먼저 필요한 것은 JDK 입니다. 클로저는 JVM 언어이기 때문에 JDK는 필수적으로 설치되어 있어야 합니다. 1.5 이상의 버전의 JDK가 필요합니다. JDK를 설치했다면 다음에는 클로저 공식 홈페이지에서 클로저를 받아서 사용 할 수 있으나, 그 방법은 불편합니다. 보통 클로저를 사용할때는 Leiningen을 사용합니다. (Lancet과 같은 다른 빌드 시스템을 사용할 수 있으나 Leiningen이 가장 일반적으로 사용됩니다.)

Leiningen

Leiningen은 클로저 빌드 시스템입니다. Leiningen은 클로저 컴파일러를 내장하고 있어서 Leiningen만으로 간단하게 클로저 프로젝트를 빌드 할 수 있습니다. 빌드 뿐만 아니라 REPL을 제공 하고, 간단하게 프로젝트를 생성할 수 있어서 클로저를 사용하는데 있어 필수적인 프로그램이라고 할 수 있습니다. 그러므로 Leiningen을 재빠르게 설치하도록 합시다.


Leiningen logo


Leiningen을 설치하는 방법은 위 링크로 들어가면 친절하게 나와 있습니다. 하지만 영어로 써져 있기 때문에 이해하기 좀 힘들수 도 있기 때문에 여기서 설명하도록 하겠습니다.

Leiningen을 설치하는 방법은 여러가지가 있습니다. 그 중  Package Manager을 이용하는 방법이 가장 일반적인 방법입니다. 우분투를 사용하시는 분은 apt-get을, 페도라를 사용하시는 분은 yum을, 맥을 사용하시는 분이라면 homebrew를 다 알고 계실 것입니다. 이러한 Package Manager을 사용하여 설치하는 방법이 가장 간단하고 쉽습니다. Windows 환경에서는 Chocolatey라는 Package Manager를 사용하여 설치할 수 있습니다. 저는 Chocolatey를 클로저를 설치하면서 처음으로 알게되었습니다.

Package Manager에 대해 잘 모르시는 분이라면 Package Manager로 설치하는 방법이 좀 어려울 수 있습니다. 일단 가장 추천하는 것은 이 기회에 Package Manager에 대해 배우는 것입니다. Package Manager는 굉장히 많이 사용되므로 알아두는 것이 좋습니다.

다른 방법으로는 script를 다운받아 사용하는 방법입니다. (리눅스 사용자 또는 Cygwin을 설치한 윈도우 사용자를 위한 방법입니다.) 이 링크를 클릭하여 스크립트를 다운받으세요. 스크립트를 환경변수에 추가해 줍시다. 그리고 스크립트를 실행 가능하게 만들어 주면 됩니다. 무슨 소린지 모르겠다면 아래 순서대로 해 보세요.

  1. 다운 받은 스크립트를 /bin 폴더에 집어 넣으세요. (안되면 sudo 명령으로 집어 넣으세요. sudo mv lein ~/bin/lein)
  2. 터미널에서 chmod 755 ~/bin/lein 을 입력하세요. (마찬가지로 sudo 명령을 이용하세요. sudo chmod 755 ~/bin/lein)
이렇게 하면 설치가 끝입니다.

다음은 윈도우 사용자를 위한 방법입니다. 이 링크를 클릭하여 batch 파일을 다운받으세요. Batch 파일을 환경변수에 추가해 주세요. 윈도우에서 환경변수에 파일을 추가하는 방법은 다음과 같습니다.

  1. 컴퓨터 속성 열기 (내 컴퓨터 오른쪽 클릭 -> 속성 클릭)
  2. 고급 시스템 설정 클릭
  3. 환경변수 클릭
  4. 시스템 변수에서 Path 변수를 찾고, Path 변수에 Lein.bat 파일이 있는 위치의 경로를 추가해 줍니다.

이제 Lein 설치가 완료되었습니다.


커맨드 lein

이제 터미널이나 윈도우 프롬프트에서 lein 명령어를 사용할 수 있게 되었습니다. lein이 제공하는 기능중 많이 쓰는 기능은 다음과 같습니다.

  • lein new [TEMPLATE] NAME # 새로운 프로젝트를 Template를 이용하여 생성합니다. Template를 지정하지 않으면 기본 Template를 사용합니다.
  • lein test [TESTS] # TESTS 네임스페이스에 있는 테스트들을 실행합니다.
  • lein repl # 클로저 REPL를 실행합니다.
  • lein run -m my.namespace # 해당 네임스페이스에 있는 -main 함수를 실행합니다. 네임스페이스는 프로젝트 설정에서 지정해 줄 수도 있습니다.
  • lein uberjar # 프로젝트를 jar 파일로 만들어 줍니다.

lein을 이용하면 간단하게 클로저를 이용할 수 있습니다. 먼저 커맨드 창을 열고 lein repl를 입력해 봅시다. repl이 실행된 것을 확인할 수 있습니다. 여기서 클로저를 가지고 놀 수 있습니다.

lein repllein repl을 입력하여 클로저 REPL를 실행한 모습

lein에서는 기본적으로 nREPL를 사용하고 있습니다. 여러가지 클로저 REPL이 존재합니다. nREPL은 무난하게 사용할 수 있는 괜찮은 REPL이므로 그냥 사용하면 됩니다. 이제 클로저를 시작할 때가 왔습니다. 프로그래밍을 시작하면 항상 하던 그것의 변형을 해봅시다.

user=> (println "Hello edoli's shallow and wide spring")
Hello edoli's shallow and wide spring
nil

println은 생각하던 대로 출력함수 입니다. 클로저에서 함수를 호출하는 방법은 (함수이름 인자) 이다. 괄호로 둘러쌓는 문법을 가지고 있습니다. 이 문법은 기존에 많이 사용하는 언어와 매우 다른 문법으로 항수형 프로그래밍인 Lisp의 영향을 받았습니다. 이로써 클로저를 사용한 준비는 완료되었습니다. 클로저 프로젝트를 생성하고 싶으면 간단하게 lein new 프로젝트이름 을 입력하면 쉽게 프로젝트를 생성할 수 있습니다.


프로젝트 셋팅

lein new를 이용하여 프로젝트를 생성해 보도록 하겠습니다.


lein new 를 이용하여 프로젝트 생성



생성된 프로젝트 폴더


프로젝트가 생성되었습니다. 프로젝트안에는 기본적으로 doc, src, test폴더가 있고, .gitignore, project.clj, REAME 파일들이 생성됩니다. project.clj 파일이 바로 프로젝트를 설정 파일입니다. 보통을 프로젝트 설정파일로 xml을 파일을 쓰는데 leiningen은 독특하게 클로저 파일을 사용합니다. 클로저 언어는 로직과 데이터에 모두 사용될 수 있는 장점이 있습니다. 그렇기 때문에 설정파일로 클로저를 사용할 수 있는 것입니다. 설정 파일을 열어보면 다음과 같이 되어 있습니다.


Leiningen 설정Leiningen 설정 파일


Leiningen 설정 파일은 위와 같이 생겼습니다. :이름 형태로 되어있는 것은 키워드 입니다. 일단은 여기서는 자세히 설명하지 않도록 하겠습니다. 각각의 설정들이 어떤것들인지에 대해서 간략하게 설명하겠습니다.

  • :description: 프로젝트에 대한 설명
  • :url: 프로젝트 홈페이지 url
  • :license: 프로젝트가 채택하고 있는 라이센스
  • :dependencies: 의존 라이브러리들

여기서 :dependencies를 설정해 두면 나중에 빌드할때 lein이 알아서 clojars에서 해당 라이브러리를 설치하게 됩니다. 그리고 :main my.namespace 를 설정해 두면 lein run으로 프로젝트를 실행할때 메인 함수를 지정해 주지 않아도 됩니다.

이번 포스팅에서는 Leiningen을 설치하는 방법과 간략한 사용방법들을 알아봤습니다. 현재로서는 Leiningen 이외에는 괜찮다고 할 만한 빌드 시스템이 없어서 사실상 Leiningen은 클로저를 사용할때 있어서 필수품 입니다. 그렇기 때문에 Leiningen을 잘 알아두는 것이 클로저를 잘 사용할 수 있는 길이라고 할 수 있습니다.