관리 메뉴

쿰뱅이

Velocity[벨로씨티] 본문

WEB/WEB Etc

Velocity[벨로씨티]

주년 2011. 10. 11. 13:59
반응형

Velocity란 무엇인가?

Velocity는 자바 기반의 템플릿 엔진이다.

Velocity는 웹 페이지 디자이너들이 자바 코드안에서 정의된 메소들에 접근하는 것을 도와준다. 이것은 웹 페이지 디자이너들이 자바 개발자들과 함께 Model-View-Controller(MVC) 아키텍쳐에 따른 웹 사이트를 각자의 영역에서 최선의 결과를 가져오도록 도와준다는 것을 의미한다.

Velocity는 웹 페이지로부터 자바 코드를 분리할 수 있고, 웹사이트를 계속 오랫동안 유지할 수 있으며, 자바 서버 페이지(JSP)의 실용적인 대안을 제공한다.

Velocity로 무엇을 할 수 있나?

당신이 진흙(Mud)을 판매하는 "온라인 진흙 가게"의 페이지 디자이너 이라고 가정해보자. 그리고 고객들은 다양한 종류와 많은 수량의 진흙을 주문하여 당신의 가게는 날로 번성하고 있다.

고객들은 사용자 이름과 패스워드를 입력하고 당신의 사이트에 로그인하여 자신이 이전에 주문했던 주문목록을 조회하고, 또 다른 진흙을 살 수도 있다. 모든 고객에 관한 정보는 당신의 데이타 베이스안에 저장되고 있다.

데이타 베이스에 따르면 특별히 설악산에서 만든 진흙이 매우 인기가 좋으며, '설악산 진흙'보다 인기가 덜 한 일본산 빨간 진흙도 정기적으로 일본에서 수입하고 있다.

그러던 어느날 당신은 왜 '설악산 진흙'에 흥미를 느끼는 수많은 고객들과의 특별한 거래를 찾는데 Velocity를 사용하지 않는 지에 대한 의문을 갖게된다.

Velocity는 웹페이지를 통한 당신의 온라인 방문객들에게 진흙 판매를 쉽게 해준다. 진흙 가게의 웹사이트 디자이너인 당신은 고객이 웹 사이트 로그인 후에 보게 될 특별한 웹 페이지를 원하고 있다.

명심하라. 당신은 개발자들이 데이터베이스에서 필요한 정보를 어떻게 추출하는지에 대해 걱정할 필요가 없다. 당신은 단지 그것이 올바르게 작동한다는 것만 기억하면 된다. 그렇게 되면 당신은 당신만의 페이지 디자인을 하게 되고, 개발자들은 그들만의 일을 하게 된다.

이런 결과로, 당신은 로그인한 사용자에게 나타낼 동적인 정보를 아래와 같이 velocity Template Language(VTL) 문장을 사용해 웹페이지에 넣을 수 있게 된다.

Hello, $customer.Name! <br> $flogger.getPromotion( $mud ) 

$customer는 현재 로그인한 사용자에 대한 정보를 가지고 있고, $promotion은 로그인한 고객별로 데이타 베이스를 조회에 해당 고객에 맞는 추천 상품을 소개하는 일을 한다.

그래서 '설악산 진흙'을 오랫동안 구입해온 기록을 가진 고객이 로그인 했을 때 '설악산 진흙 현재 대폭 세일중!!' 이라는 메시지를 정면에서 보게 될 것이다.

Velocity의 힘과 유연함은 이렇게 VTL 레퍼런스와 함께 당신에게 제공된다.

VTL (Velocity Template Language)

VTL은 Velocity에서 템플릿 개발에 사용되는 언어로 레퍼런스(Reference), 디렉티브(Directive), 그리고 주석(Comment)으로 구성된다.

레퍼런스 ${variable} 컨텍스트에서 제공되는 변수에 대한 레퍼런스
${variable.property} 속성에 대한 레퍼런스
${variable.method(args)} 메소드 대한 레퍼런스
디렉티브 #set 레퍼런스의 값을 설정
#if #elseif #else 조건문 제어
#foreach 반복문 제어
#include 파싱되지 않는 로컬 파일 출력
#parse 파싱되는 로컬 템플릿 출력
#stop 템플릿 엔진의 동작 정지
#macro 반복적으로 사용될 매크로 정의
주석 ## 한 줄짜리 주석
#* .... *# 여러 줄에 걸친 주석

VTL은 위 표에서 정리한 것처럼 너무나 단순하기 때문에 흔히 성냥갑 표지에 다 적을 수 있을 만큼 작은 API라고 불려진다.

이는 뷰 작업을 개발자와 디자이너가 함께 진행해 나간다는 점을 감안하면 매우 바람직한 일이라고 볼 수 있다.

VTL을 통해 작성된 벨로시티 템플릿(vm 파일)은 다음과 같은 패턴을 통해 처리 된다.

// 벨로시티 템플릿 엔진의 초기화
// 초기화 설정은 velocity.properties 파일을 사용함
Velocity.init("velocity.properties");

// 자바 클래스와 템플릿간의 정보 전달에 사용할 컨텍스트 객체 생성
// 컨텍스트 객체는 해시 테이블을 상속받으므로 (키, 값)의 순서쌍 형태로 값을 저장 
// 예) context.put("members", memberDAO.getMembers()); 
// 이렇게 해서 컨텍스트에 저장된 값들은 템플릿에서 레퍼런스를 이용해서 참조됨
// 컨텍스트에 담긴 값이 컬렉션일 경우 #foreach 디렉티브를 통해 하나씩 참조 가능 
VelocityContext context = new VelocityContext();
Template template = null

// 로직과 연결되어 사용될 템플릿 파일을 선택
template = Velocity.getTemplate("HelloWorld.vm");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out))

// 템플릿과 컨텍스트를 렌더링해서 그 결과를 출력 
if template != null
  template.merge(context, writer);

writer.flush()
writer.close()

템플릿 엔진이 동작하는 방식을 정리해 보면, 개발자는 사용자에게 보여 질 디자인을 위해 VTL을 이용한 템플릿 파일을 작성하고, 그 처리를 위한 코드를 개발한다.

자바 코드와 템플릿 간의 필요한 정보 전달은 컨텍스트 객체를 통해 이루어진다.

이러한 2개의 파일을 입력받아 벨로시티는 템플릿을 토대로 렌더링한 결과 페이지를 출력하게 되는 것이다.

템플릿에 어떤 내용이 담겨 있느냐에 따라 결과 페이지는 일반 텍스트가 될 수도 있고, HTML이나 SQL, PostScript, XML 등도 될 수 있다.

 

 

출처.. intranet.traniz.com

반응형