Skip to content

kyuls

Just another WordPress.com site yet

시작하기

이 글은 compojure 프로젝트 위키에 있는 Getting Started 문서를 번역한 것입니다. 번역상태가 그리 좋진 않습니만 누군가에게 도움이 되면 좋겠네요.

원본 링크는 요기 입니다.

컴포저를 시작하는 가장 간단한 방법은 Leiningen 을 이용하는 것이다. (Leiningen은 대중적인 클로저 빌드툴이다.) 아직 Leiningen이 없다면 설치한다.

Leiningen 을 설치했다면 새로운 클로저 프로젝트를 생성한다.

$ lein new hello-www
$ cd hello-www

이것으로 기본적인 프로젝트의 껍데기를 만든다.(혹은 프로젝트 스켈레톤)

다은으로 프로젝트 폴더에 있는 project.clj 을 열어서 dependency에 컴포저를 추가한다.

(defproject hello-www "1.0.0-SNAPSHOT"
  :description "A Compojure 'Hello World' application"
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [compojure "0.6.2"]])

이제 어플리케이션을 작성할 준비가 되었다. src/hello_www/core.clj 파일에 다음 코드를 넣어준다.


(ns hello-www.core
  (:use compojure.core)
  (:require [compojure.route :as route]
            [compojure.handler :as handler]))

(defroutes main-routes
  (GET "/" [] "<h1>Hello World Wide Web!</h1>")
  (route/resources "/")
  (route/not-found "Page not found"))

(def app
  (handler/site main-routes))

위 코드는 app이라는 기본적인 Ring 핸들러를 정의한 것이다. 이 예제에서 몇가지 일들이 일어나고 있다. 자 각각 어떤것인지 알아보자.

처음으로 세개의 라우트를 정의한다:

(defroutes main-routes
  (GET "/" [] "<h1>Hello World Wide Web!</h1>")
  (route/resources "/")
  (route/not-found "Page not found"))

컴포저에서 라우트는 cascade down 방식이므로 맨위부터 매치한다.


(GET "/" [] "<h1>Hello World Wide Web!</h1>")

이 식은 요청방식이 “GET”이며 URI가 “/”인 경우만 매치되는 라우팅 함수를 정의한다. 다른경우에는 nil을 리턴하며 시퀀스에 있는 다음 라우트를 단계적으로 요청한다:


(route/resources "/")

이 라우트는 compojure.route 이름공간에 있는 함수에 의해 생성된다. 이것은 요청한 URI 파일을 “resource/public” 디렉토리에 찾는다. 이것은 프로젝트에 CSS 스타일시트나 이미지 같은 정적인 파일들을 포함할 수 있도록 한다. [번역이 매끄럽지 못함]

만약 정적 파일을 찾을 수 없으면 세번째이자 마지막인 다음 라우트를 요청한다:


(route/not-found "Page not found")

쉽게 예상할 수 있는 것처럼 이것은 404 응답을 리턴한다. 이 라우트는 항상 매치된다. 그래서 이전 라우트에서 매치되지 않은 모든 경우에 대해서 Catch-all 라우트처럼 동작한다.

라우트가 정의되면 site함수에 포함된다:

(def app
  (handler/site main-routes))

이것은 일반적으로 사용되는 Ring 미들웨어들을 라우트에 추가한다.  이게 없으면 쿠키나 폼 변수를 다룰 수 없고 세션 작업을 할 수 없다.

이제 핸들러 함수가 정의되었고 돌리기만 하면 된다. 가장쉬운 방법은 project.clj파일에 lein-ring 을 개발 의존관계로 추가하는 것이다:

(defproject hello-www "1.0.0-SNAPSHOT"
  :description "A Compojure 'Hello World' application"
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]
                 [compojure "0.6.2"]]
  :dev-dependencies [[lein-ring "0.4.0"]]
  :ring {:handler hello-www.core/app})

lein-ring 플러그인은 :ring 키로 설정한다. 메인 링핸들러 위치를 적어 주었다.

이제 의존관계를 다운로드하고 Leiningen으로 개발 서버를 돌릴 수 있다:

$ lein deps
$ lein ring server

개발서버는 열려있는 포트를 찾고 브라우저 창을 연다.  만약 아무 소스파일이나  고치면 자동으로 갱신된다.

태그:, ,