Whiteship's Note


오늘 하루 타일즈(Tiles)에 낚였나보다~

Good Tools : 2009.05.01 19:46


성윤이랑 정말 신나게 가지고 놀았는데, 집에 갈 때 쯤이 다 되서 생각해 보건데..

매번 페이지를 추가할 때 마다 설정을 추가해야 한다는 건 정말 못 할 짓이다. 하루 종일 성윤이랑 씨름하며 개발중인 봄싹 사이트에 적용해 보았다.

못 할 짓이다.

안그래도 하면서 성윤이한테 이런 얘길 했었다.

    <!-- main page  -->
    <definition name="index" extends=".root">
        <put-attribute name="content" value="/jsp/index.jsp" />
    </definition>

    <definition name="login" extends=".root">
        <put-attribute name="content" value="/jsp/login/login.jsp" />
    </definition>

    <!-- member page  -->
    <definition name="member/list" extends=".root">
        <put-attribute name="content" value="/jsp/member/list.jsp" />
    </definition>

    <definition name="member/add" extends=".empty">
        <put-attribute name="content" value="/jsp/member/add.jsp" />
    </definition>

    <definition name="member/view" extends=".empty">
        <put-attribute name="content" value="/jsp/member/view.jsp" />
    </definition>

    <definition name="member/update" extends=".empty">
        <put-attribute name="content" value="/jsp/member/update.jsp" />
    </definition>

이런 식으로 계속 설정하는 건 정말 안 되겠다 싶어서, definition의 name 속성에 넣는 값이랑 put-attrubute의 value 속성에 넣는 값들이 비슷해 보이니까 저런걸 CoC 적용해서 자동으로 할 수 있게 패치를 만들어 볼까? 하는 얘길했었다.


그러나...


못 할 짓이고, 안 해도 될 것 같다. 하루 종일 공부했는데 허탈한 기분이 들지만..

사부님이 such is life 란다. ㅋㅋ

내일은 태그파일을 적용해봐야겠다.


top


Tiles와 SiteMesh 차이

Good Tools : 2009.05.01 14:42


참조: http://tiles.apache.org/framework/tutorial/pattern.html

이 두 가지 툴이 비슷한 일을 하지만, 그 일을 하는 방식은 다른 것 같습니다. Tiles는 Composite View 패턴을 사용하고 SiteMesh는 Decorator 패턴을 사용하는 차이가 있더군요.

두 패턴을 비교한 표가 있길래 옮겨 봅니다.

Aspect Composite View Decorator
Reusability The different parts of the
page (template and pieces) can
be reused across the whole
application.
Each decorator can be
reused, but the decoration
itself can be applied to
one page at a time.
Ease of
configuration
Each page must be defined
explicitly.
The decorator can be
applied even to the entire
application.
Runtime
configuration
The pages can be configured
and organized at runtime
Since one page is decorated
at a time, this feature is
not present.
Performances Low overhead for composition. The page to be decorated
has to be parsed.

일단, 재사용성에 있어서는 매번 데코레이터를 적용하여 페이지를 만들어 내는 데코레이터 패턴 보다는 변하는 부분만 바뀌고 나머지는 재사용하는 컴포짓 뷰 패턴에 한표를 주고 싶습니다.

두 번째, 설정에 있어서는 컴포짓 뷰 패턴이 모든 페이지에 (뷰 구성요소들을)명시적으로 정의해줘야 하는 불편함이 있기 때문에 데코레이터에게 한표 주겠습니다.

세 번째. 실행시에 설정을 변경할 수 있는 것 때문에 컴포짓 뷰에 한표 주겠스니다.

마지막으로 성능에 있어서도 컴포짓 뷰에 한표 주겠습니다.


top


Tiles VS SiteMesh

Good Tools : 2009.05.01 14:25


너무 차이가 많이 나네요. 3단 구조(위, 본문, 아래)로 나누려는데, 비슷한 일을 해주는 두 개 툴중에 뭘 쓸까 고민하다가 일단 트랜드를 확인해 봤습니다. 무작정 트랜드를 따르려는 건 아니고, 둘 중에 어떤게 왜 인기가 많은지 궁금하자나요.ㅎㅎ



Tiles가 엄청나게 인기가 좋군요. 작년에 무슨일이 있었길래 인기가 급상승 중이던 SiteMesh가 급 하락 하고, Tiles 인기가 확 올라갔는지 궁금해지네요. 그보단 일단 왜 Tiles가 인기가 좋은 건지 Tiles를 좀 봐야겠습니다~
top


14.3. Tiles

Spring/Chapter 14 : 2007.05.15 13:22


14.3.1. Dependencies

Tiles를 사용하려면 다음의 jar파일들이 필요합니다.
- Struts version 1.1 or highe
- Commons BeanUtils
- Commons Digester
- Commons Lang
- Commons Logging

14.3.2. How to integrate Tiles

Tile를 사용할 때 필요한 definition 파일들을 서술해 줍니다.
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles.TilesConfigurer">
  <property name="factoryClass" value="org.apache.struts.tiles.xmlDefinition.I18nFactorySet"/>
  <property name="definitions">
    <list>
      <value>/WEB-INF/defs/general.xml</value>
      <value>/WEB-INF/defs/widgets.xml</value>
      <value>/WEB-INF/defs/administrator.xml</value>
      <value>/WEB-INF/defs/customer.xml</value>
      <value>/WEB-INF/defs/templates.xml</value>
    </list>
  </property>
</bean>

위 설정에서 다섯개의 definition들을 세팅했습니다. 저 파일들이 각각 하나의 tile인건가요? 흠;; 안써봐서 모르겠군요;

Anyway, Tiles도 사용하려면 역시 ViewResolver를 등록해야 하는데 역시 두 가지 Resolver를 사용할 수 있습니다.

- InternalResourceViewResolver

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="requestContextAttribute" value="requestContext"/>
  <property name="viewClass" value="org.springframework.web.servlet.view.tiles.TilesView"/>
</bean>

- ResourceBundleViewResolver

<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
  <property name="basename" value="views"/>
</bean>

...
welcomeView.class=org.springframework.web.servlet.view.tiles.TilesView
welcomeView.url=welcome (&lt;b&gt;this is the name of a definition&lt;/b&gt;)

vetsView.class=org.springframework.web.servlet.view.tiles.TilesView
vetsView.url=vetsView (again, this is the name of a definition)

findOwnersForm.class=org.springframework.web.servlet.view.JstlView
findOwnersForm.url=/WEB-INF/jsp/findOwners.jsp
...

여기서 볼 수 있듯이 ResourceBundleViewResolver 를 사용하면 여러 view 기술을 혼용할 수 있습니다.

'Spring > Chapter 14' 카테고리의 다른 글

Spring에서 Freemarker 사용하기  (2) 2008.02.20
14.6. Document views (Excel)  (0) 2007.05.16
14.6. Document views (PDF)  (0) 2007.05.16
14.5. XSLT  (1) 2007.05.16
14.3. Tiles  (0) 2007.05.15
14. Integrating view technologies  (0) 2007.05.15
top