Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Lift로 Hello World 실행하기

스칼라 스터디를 2개나 마쳤지만 아직 이해도가 상당히 떨어지고 있습니다. 아무래도 시간들여서 코딩도 해보고 해야 좀 이해가 될것 같아서 조그만한 프로젝트를 해보려고 하는데 웹프레임워크로 Lift를 사용하기로 했습니다. 원래는 작년에 좀 사용해본 Play Framework를 사용하려고 마음을 먹었었습니다. 심플하면서 생산성도 좋아서 꽤 마음에 들었기 때문인데 아무래도 Play에 상당히 의존적이 되는데다가 조만간 Lift스터디도 있을 예정이라 Lift로 사용하기로 마음을 바꿨습니다.

Lift는 David Pollak이 Scala로 만든 웹프레임워크로 Scala에서는 Ruby의 Rails정도로 돋보적인 위치에 있다고 생각됩니다.(프레임워크가 Rails와 닮았다기 보다는 위치상...) 아주 약간 만져봤지만 책들은 좀 있는데 웹사이트의 문서화는 약간 불만족 스럽더군요.(많이 본게 아니라 정확치는 않습니다.)




Hello World 예제 실행하기
Lift는 대부분 Maven으로 관리를 하는지 기본골격에 대한 코드를 모두 Maven의 archetype으로 제공해주고 있습니다. archetype이 기본구조를 만들어주기 때문에 초기에 골격을 잡아서 프로젝트를 진행하는 것은 상당히 편하기는 한데 Lift에 대한 구조에 대한 이해가 없다보니 좀 어렵더군요. 2011년 1월에 Lift 2.2가 릴리즈되었는데 가이드에는 Maven쪽 부분만 업데이트되고 현시점에서 다른쪽 문서는 아직 갱신되지 않은 것 같습니다. 물론 메이븐이 설치되어 있어야 합니다.

mvn archetype:generate \
 -DarchetypeGroupId=net.liftweb \
 -DarchetypeArtifactId=lift-archetype-basic_2.8.1 \
 -DarchetypeVersion=2.2 \
 -DarchetypeRepository=http://scala-tools.org/repo-releases \
 -DremoteRepositories=http://scala-tools.org/repo-releases \
 -DgroupId=kr.sideeffect \
 -DartifactId=lift_helloworld \
 -Dversion=1.0

Scala-tools의 메이븐 레파지토리에서 필요한 아키타입을 가져와서 코드를 생성할 수 있습니다. 위 코드에서는 정식릴리즈용 저장소인 http://scala-tools.org/repo-releases를 사용했고 개발중인 부분에 대한 Snapshot저장소를 사용할 수도 있습니다. 사용할 아키타입에 대한 리스트에서 필요한 아키타입명과 아키타입 버전을 찾아서 사용할 수 있습니다. 위 코드에서는 Scala 2.8.1 final에서 돌릴것이기 때문에 lift-archetype-basic_2.8.1에 Lift 버전 2.2를 사용했습니다.

아키타입으로 생성한 폴더 구조

lift-archetype-basic_2.8.1 아키타입으로 코드를 생성하면 위와같은 구조의 코드가 나타납니다. Lift에 대한 구조에 대한 이해도가 아직 거의 없기 때문에 코드에 대한 설명은 생략합니다.(저도 공부해야해서...)

mvn jetty:run

이제 위의 코드를 실행하면 메이븐이 의존성 라이브러리를 다운받은 뒤 Jetty를 실행하여 주기 때문에 http://localhost:8080으로 접속을 하면 아래와 같은 Lift의 초기화면을 볼 수 있습니다.

Lift의 기본예제 실행 화면

헬로월드 예제 치고는 좀 복잡합니다. H2라는 데이터베이스를 사용하고 있고 사용자 로그인과 회원가입까지 구현되어 있는 간단한 예제 애플리케이션입니다. 그냥 Hello World만 찍는 흐름을 보고 싶었는데 그런 예제는 따로 없는것 같습니다. Getting Started 예제도 채팅애플리케이션으로 되어 있더군요. 구조에 대한 부분은 따로 파악을 좀 해야할 것 같습니다.




SBT 사용하기
메이븐 대신 SBT를 사용하고 싶었는데 Wiki에 SBT설정 부분도 아키타입에서 소스를 받은 다음에 의존성 라이브러리 관리 부분을 SBT에서 사용하는 Scala클래스로 추가해서 사용하는 것으로 되어 있는데 SBT와 Lift에 대한 이해도가 둘다 부족하기 때문에 의존성 라이브러리를 적어주기가 쉽지 않았습니다.

대신 (위 위키문서에도 나와있듯이) Github에 David PollakLift 2.2용 SBT 골격프로젝트를 만들어놓았고 정식릴리즈 이후에 갱신이 되어 있기 때문에 문서보면서 고민하는 것 보다는 위 프로젝트를 받아서 사용하는 것이 더 나은것 같습니다. 위 아키타입과 동일한 결과를 얻으려면 lift_basic을 사용하면 됩니다.

sbt를 실행한 다음에 update를 실행하여 관련 라이브러리를 받고 jetty-run을 실행하면 예제 프로젝트를 볼 수 있습니다.
2011/02/07 02:08 2011/02/07 02:08