Freemarker 정의

공식 배포 사이트에서는 다음과 같이 FreeMarker를 정의하고 있다.


FreeMarker는 템플릿 엔진이며 템플릿을 사용하여 (어떠한 포맷이라도)텍스트를 출력하는 역할을 담당합니다. 자바 클래스 형태로 패키지로 묶어 배포하고 있으며 개발자를 위한 도구입니다


다음 그림처럼 자바 객체에서 데이터를 생성해서 템플릿에 넣어주면, FreeMarker에서 템플릿에 맞게 변환하여 최종적으로 HTML 파일을 생성한다. 다른 언어 사용의 가능성을 배제하고 있지는 않지만, JVM에서 돌아가는 엔진이므로 주로 자바에서 사용되고 있다.

FreeMarker는 HTML 출력만을 위한 엔진은 아니고 텍스트라면 그 어떠한 것도 가능하다. 이는 텍스트에서 텍스트로의 변환이기 때문에 너무나도 당연한 얘기이다.  그렇기에 FreeMarker는 웹기반 프레임워크가 아니고 완전한 POJO기반 템플릿 엔진이다.

 

Freemarker 맛보기

백문이 불여일견! 곧바로 예제를 살펴보도록 하자.

 

<welcome.xml>

<root>

    <user>Big Joe</user>

    <latestProduct>

         <url>products/greenmouse.html</url>

         <name>green mouse</name>

    </latestProduct>

</root>

<welcome.ftl>

<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome ${user}!</h1>
  <p>Our latest product:
  <a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>

welcome.xml과 welcome.ftl (ftl파일은 템플릿을 가리킨다)로 다음과 같은 코드를 사용해서 변환시키면 welcome.html 파일을 얻을 수 있다.

FileWriter w = new FileWriter("welcome.html");
Map<String, NodeModel> root = new HashMap<String, NodeModel>();
root.put("doc", NodeModel.parse(new File("welcome.xml")));
Template template = cfg.getTemplate("welcome.ftl");  
template.process(root, w); 

 

<welcome.html>

 <html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome Big Joe!</h1>
  <p>Our latest product:
  <a href="products/greenmouse.html">green mouse</a>!
</body>
</html>

FreeMarker는 데이터 모델을 그대로 템플릿으로 떨어뜨려서 사용하므로 직관적이며 명확하다. 또 다른 템플릿 엔진인 XSLT는 트리를 입력받아 트리를 출력하지만, FreeMarker는 출력받을 파일에 대해 전혀 몰라도 상관없다. 비록 XSLT는 W3C 표준이라 널리 사용되고 있다는 장점이 있지만, 일단 XSLT는 사용하기 어려우며 복잡하다. 템플릿 파일을 일일이 출력폼에 맞춰 XML로 구성해야 된다는 것은 큰 단점이 아닐 수 없다. 게으른 개발자에게는 XSLT는 이해하기 어려운 템플릿 엔진이다.

 

성능

그렇다면 다른 템플릿 엔진과 비교했을때 그 성능차이는 어떨까? 공식 사이트에서는 XSLT와 비교하여 속도도 빠르고 메모리도 덜 잡아먹는다고는 밝히고 있다. 하지만 비교기준이 명확하지 않기에 확실하게 더 낫다라고는 말하지 않고있다. 이 점은 더 두고봐야 할 사항이다.

 

참고자료

공식 사이트 - http://freemarker.sourceforge.net


===================================================================================


스프링에 프리마커 적용하기(how to set freemarker on spring)

 

<서론>
전 주로 view resolver를 jsp가 아닌 freemarker로 사용합니다.
저 이외에도 freemarker를 jsp 대신 쓰시는 분들이 있을 것 같아 
방법을 정리하여 포스팅 합니다.

<본론>

1. 메이븐 dependency를 추가 합니다.
   현재 날짜 기준으로 최신 프리마커 버전을 넣어 놓았고, 추후에 메이븐 검색으로 
   더 높은 버전이 있는지 확인 하신 후 버전업을 해주시면 좋습니다.

   1: <!-- freemarker -->
   2: <dependency>
   3:    <groupId>org.freemarker</groupId>
   4:    <artifactId>freemarker</artifactId>
   5:    <version>2.3.18</version>
   6: </dependency>

2. applicationContext.xml에 기본 View Resolver를 프리마커로 지정하고,   
    FreeMarkerConfigurer를 추가하여 설정합니다. 
    (velocity도 이와 매우 흡사한 방법으로 설정 할 수 있습니다.)



   1: <?xml version="1.0" encoding="UTF-8"?>
   2: <beans xmlns="http://www.springframework.org/schema/beans"
   3:        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
   4:        xmlns:context="http://www.springframework.org/schema/context"
   5:        xmlns:oxm="http://www.springframework.org/schema/oxm" xmlns:p="http://www.springframework.org/schema/p"
   6:        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
   7:         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
   8:         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
   9:         http://www.springframework.org/schema/oxm
  10:         http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd">
  11:  
  12: <!-- 다른 설정들이 들어 가겠죠? ^^ -->
  13:  
  14:     <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
  15:     <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
  16:         <property name="order" value="2" />
  17:         <property name="cache" value="true" />
  18:         <property name="suffix" value=".ftl" />
  19:         <property name="contentType" value="text/html; charset=UTF-8" />
  20:         <property name="exposeSpringMacroHelpers" value="true" />
  21:     </bean>
  22:     
  23:     <!-- FreeMarker configuration -->
  24:     <bean id="freemarkerConfig"
  25:           class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  26:         <property name="templateLoaderPath" value="/WEB-INF/freemarker" />
  27:         <property name="defaultEncoding" value="UTF-8" />
  28:     </bean>
  29: </beans>


<결론>
메이븐 디펜던시 설정 + application context 설정만 하면 프리마커를 사용 할 수 있습니다.


출처 - http://lks21c.blogspot.com/2012/01/how-to-set-freemarker-on-spring.html









'Web > Common' 카테고리의 다른 글

자바스크립트에서 BR태그 vs \n vs 엔터문자 / & nbsp vs 공백문자  (0) 2012.05.13
시맨틱 웹(Semantic Web)  (0) 2012.05.13
Adobe Flash  (0) 2012.05.11
색상표  (0) 2012.05.11
web - REST(Representational State Transfer)  (0) 2012.05.09
Posted by linuxism
,