구글 앱 엔진에 Clojure 앱 올리기

내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.

구글 앱 엔진에 Clojure 앱 올리기

구글 앱 엔진(Google App Engine)은 Clojure를 위한 SDK를 따로 제공하지는 않지만 Clojure는 JVM에서 실행되므로 Java가 실행되는 환경이라면 Clojure도 실행할 수 있다.

준비

먼저 Leiningen과 App Engine SDK (for Java)를 설치한다.

MacOS X에서 Homebrew를 사용한다면 다음과 같이 간단히 설치할 수 있다.

$ brew install leiningen
...
$ brew install app-engine-java-sdk

Clojure 앱 만들기

다음과 같이 compojure-template을 이용해 프로젝트를 생성한다.

$ lein new compojure-app app-test

프로젝트를 생성한 다음 아래와 같이 실행하면 브라우저 창에 "Hello World!"를 표시한다.

$ lein ring server

여기서는 이 상태 그대로 앱 엔진에 배포해 볼 것이다. Clojure로 웹 애플리케이션을 만드는 방법은 원래 문서참고에 나온 다른 도서를 보기 바란다.

배포를 위한 패키징

다음 명령으로 war 파일을 생성한다.

$ lein ring uberwar

war 파일은 프로젝트 루트 밑의 target 디렉터리 안에 생성된다. 다음과 같이 unzip 명령을 이용해 압축 해제한다. (파일 이름은 다를 수 있으며, 압축 해제할 디렉터리 이름이 꼭 stage일 필요는 없음)

$ unzip -d stage target/test-app-0.1.0-SNAPSHOT-standalone.war

stage/WEB-INF 디렉터리에 다음과 같은 내용으로 appengine-web.xml 파일을 만든다.

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>your-gae-application-id</application>
  <version>1</version>
  <threadsafe>false</threadsafe>
</appengine-web-app>

your-gae-application-idhttps://appengine.google.com/에서 애플리케이션을 생성할 때 지정한 아이디를 넣어주면 된다.

앱 엔진에 배포

<app-engine-sdk>/bin이 PATH에 잡혀 있어야 한다. MacOS X에서 Homebrew로 설치했다면 이미 PATH에 잡혀있을 것이다. 앱 엔진 서버에 배포하기 전에 로컬에서 테스트 해볼 수 있다

$ dev_appserver.sh stage

브라우저를 열어 주소창에 http://localhost:8080을 입력해보면 실행 결과를 볼 수 있다.

앱 엔진 서버에 올린 준비가 되었다면 다음과 같이 배포한다.

$ appcfg.sh update stage

서버로 배포하는 데는 시간이 좀 걸린다. 배포가 끝나면 브라우저로 http://<<your-gae-application-id>>.appspot.com에 접근해 확인할 수 있다.

요약

과정을 요약하면 다음과 같다.

  1. lein new compojure-app <project-name>으로 프로젝트 생성
  2. 웹 애플리케이션 작성
  3. lein ring uberwar로 war 파일 생성
  4. 생성된 war 파일을 압축 해재하고 WEB-INF 디렉터리에 appengine-web.xml 파일 생성
  5. dev_appserver.sh로 로컬에서 테스트
  6. appcfg.sh를 이용해 앱 엔진으로 업로드

참고