ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SiteMesh 개요
    Java/JSP/Servlet 2008. 9. 5. 09:41
    반응형

    SiteMesh 개요

    SiteMesh는 무엇에 쓰는 물건인가?

    • 웹페이지 레이아웃을 쉽게 조합 가능하게 해주는 decoration 프레임웍크
    • 많은 Look&Feel과 네비게이션 및 레이아웃 스키마가 요구되는 대형 사이트에 필요한 웹 어플리케이션 통합 프레임워크

    SiteMesh는 웹서버를 통해(또는 직접) 서블릿 컨테이너에 요청되는 모든 정적이고 동적인 페이지 Request를 가로채어 페이지를 파싱하고 데이타와 속성값들을 설정한 뒤, 파싱된 원본과 함께 사용자에게 보여질 최종 페이지를 만든다.

    이러한 작업은 그 유명한 4명의 건달(GangOfFour)이 말하는 Decorator 디자인 패턴에 기반한다.

    또한 4명의 건달(GangOfFour)의 Composite 디자인 패턴에 기반해, SiteMesh는 서버측 Include와 유사하게 또 다른 페이지안의 Panel로써 모든 HTML 페이지 안에 포함될 수도 있다.

    이런 SiteMesh의 특징에 따라, Portal 유형을 가진 웹 사이트의 레이아웃은 아주 빠르고 효과적으로 구축될 수 있다.

    SiteMesh는 Java Servlet, JSP, XML 기술을 이용해 만들어졌다. 이것은 J2EE 어플리케이션과 함께 이용할 경우 매우 이상적지만, CGI (Perl/Python/C/C++/etc), PHP, Cold Fusion 등과 같은 비 자바기반 서버측 웹 아키텍쳐와도 함께 통합될 수 있다.

    SiteMesh는 사용자 요구를 위한 확장성을 고려하여 디자인 되었다는 점을 명심하라.

    CGI란 Common Gateway Interface의 약자이다

    일반적으로 HTML로 작성된 홈페이지는 TV처럼 일방적으로 단방향성 정보를 제공하기때문에 유연하지 못한 문제점이 있다. 이러한 문제점들을 해결하기 위해서 다양한 해결책들이 마련되어왔는데, 그중의 하나가 CGI이다.

    CGI 프로그램은 한번 실행되어 열기/입력/저장/검색등의 기능을 수행하고 끝마치는 일반적인 프로그램들과는 달리, 한번 실행시 단 하나의 명령만을 수행하고 종료하게된다.

    보통 큰 웹사이트를 가면 ~~.cgi&db=guest&mode=read&....등으로 길게 씌여진 명령줄을 볼수 있는데, 이건 한번 실행시 단 하나의 명령만을 수행하고 종료하는 CGI의 특성상 계속해서 연속적으로 명령을 실행하기 위하여 미리 다음 명령및 이전의 정보를 인자로 보내기 위함이다.

    이렇듯 일반 프로그램처럼 한번 실행하여 모든 명령을 수행하면 좋으련만, 유독 CGI프로그램은 불편하게 단 한가지 명령만 수행하고 종료되는 이유가 무엇일까?

    바로 서버의 부하를 막기 위해서이다.

    사용자가 서버에 접속(혹은 CGI등의 프로그램을 실행)하게되면 각각 개별적으로 하나의 쓰레드, 혹은 프로세스가 생성되어 개별적인 쓰레드(혹은 프로세스)에서 수행되게 되는데, 만일 일반적인 프로그램처럼 한번 실행되어 종료명령을 내리기전까지 종료되지 않는다면 서버는 큰 부담을 지게된다.
    그렇기때문에 한번 실행되고 바로 종료되어 서버의 부담을 줄이도록 한 것이다.

    통상적인 웹 어플리케이션의 문제점

    웹 어플리케이션에서 사용되고 있는 플래품과 프레임웍이 이미 많이 존재하고 있다.

    일반적으로, 웹 어플리케이션은 특정 플랫폼(J2EE의 TagLib, CGI에서의 Perl API, PHP 등)에 기반한 특정 프레임워크에 기반해 만들어진다.

    이들 각각의 웹 어플리케이션은 사전에 웹 디자이너가 구성한 레이아웃을 통해 보여질 것이지만, 기존에 존재하는 페이지 레이아웃과의 통합과 분리, 하이퍼링크로 구성된 사이트의 추가 등이 다소 어렵다.

    이러한 원인의 대부분은 이미 만들어진 "상자 외부에 있는" 소프트웨어(예를 들면 검색엔진 등)와 커스텀하게 개발된 페이지들이 혼합되어 있기 때문이다.

    이러한 소프트웨어는 페이지의 필요한 부분에서 요구되는 Look&Feel을 위해 충분한 설정을 제공하지 않거나, 어떤 다른 기술을 이용해 커스텀하게 화면이 개발될 것이다. "검색결과"와 같은 페이지를 기존 화면 레이아웃에 따라 구성하는 경우를 생각해 보라.

    해결방안

    SiteMesh는 XML, WML, PDF등과 같은 다른 매개물에 쉽게 부착하게 하는 확장가능한 문법을 제공한다.

    SiteMesh에 의해 HTML의 내용은 사용자 브라우져에게 뿌려지기 전에 가로채인다. <head> 태그 내의 내용과 <body> 태그의 내용은 페이지의 메타데이타 속성으로 추출되며 (<title, <meta> 태그, <html> 속성, <body> 태그) 추출된 메타데이타로부터, 적절한 Decorator가 결정된다.

    Decorator는 페이지 스킨이라고 생각할 수 있으며, 원본 페이지의 Look&Feel을 포장하는 역할을 한다.

    SiteMesh를 사용하기 위해서는, 설치 및 설정, 그리고 당신의 Decorator를 만드는 작업이 필요하다. 이런 작업은 몇분 밖에 안 걸리며, 별도의 코딩 작업도 필요로 하지 않는다.

    당신의 기존 웹페이지를 SiteMesh로 구성하기 위해 필요한 것은 앞서 언급한 것 외에 더이상 존재하지 않는다.

    Visual 예제

    서로 다른 시스템에서 만들어진 2개의 페이지가 있다. 하나는 JSP이고 다른 하나는 CGI이다. 두 페이지 모두 정적인 최종 페이지를 만들기 위해 SiteMesh에 의해 포장되고 파싱된다. 


    SiteMesh 특징

    Java

    • 엔터프라이즈 어플리케이션을 위한 표준인 Java로 만들어졌다.
    • Java Servlet 2.3 명세서에서 최종 릴리즈된 내용을 확인해보라.

    Open Source

    • OpenSymphony Software License (Apache Software License와 잘 맞는....)로 배포된 오픈소스 소프트웨어 이다.

    간단함

    • 비숙련 사용자도 정적인 Look&Feel을 쉽게 유지하도록 해준다.
    • 웹 어플리케이션을 개발하고 유지하는데 드는 시간을 줄여준다.
    • 사용자 에이전트나 요청 파라메타에 따른 데코레이터의 변화에 의해 각기 다른 사용자를 위한 다중 웹페이지를 만드는 수고를 없애준다.

    매우 유연함

    • 당신의 전체 사이트에 예를들어 별도의 프린트 페이지를 위한 기능을 추가하는 건 정말 몇 분 안 걸린다!
    • 쿠키 값에 기반한 데코레이터 맵을 구성한다.
    • RobotDecoratorMapper와 함께 당신은 검색로봇에 의한 인덱싱을 그냥 통과시키도록 하는 특별한 데코레이터를 이용할 수 있다. 현재 200여개의 로봇에 대해 작동한다.

    통합

    • 데코레이터 작성을 위한 Velocity 와 Freemarker 기술과의 통합을 지원한다.


    SiteMesh 설치

    SiteMesh를 이미 다운로드(또는 소스로부터 빌드를 완료)했다면, 설정은 매우 간단하다.

    1. 당신이 해왔던 일반적인 방법으로 web-app를 설정한다. 이미 설정이 완료된 sitemesh-blank.war(다운로드 받은 배포본에 있음)를 이용한다면 그냥 넘어가도 좋다.

    2. sitemesh-@VERSION@.jar파일을 WEB-APP-ROOT/WEB-INF/lib에 복사한다.

    3. 다음 내용을 포함하는 WEB-APP-ROOT/WEB-INF/decorators.xml 파일을 만들어라.

    <decorators>
    </decorators>
    

    4. 다음 내용을 포함하는 WEB-APP-ROOT/WEB-INF/sitemesh.xml 파일을 만들어라. 그러나 이것은 선택사항이다.

    <sitemesh>
        <property name="decorators-file" value="/WEB-INF/decorators.xml" />
        <excludes file="${decorators-file}" />
    
        <page-parsers>
            <parser content-type="text/html"
                class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
            <parser content-type="text/html;charset=ISO-8859-1"
                class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
        </page-parsers>
    
        <decorator-mappers>
            <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
                <param name="config" value="${decorators-file}" />
            </mapper>
        </decorator-mappers>
    </sitemesh>
    

    5. WEB-APP-ROOT/WEB-INF/web.xml 파일의 태그안에 다음 내용을 추가한다.

    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    이것으로 설치는 완료되어 당신의 웹 어플리케이션은 SiteMesh를 사용할 수 있는 준비가 되었다.

    SiteMesh의 가장 기본적인 설치및 셋팅

    SiteMesh를 다운로드받고 나서 설정은 간단한다.

    평소처럼 web-app 설치한다(또는 미리 설정된 sitemesh-blank.war을 사용하면 모든게 생략된다.).
    sitemesh-2.2.1.jar를 web-app/WEB-INF/lib으로 복사해라
    다음을 포함하는 web-app/WEB-INF/decorators.xml을 생성하라.

    <decorators>
    </decorators>
    (Optional) Create the file [web-app]/WEB-INF/sitemesh.xml that contains the following:
    <sitemesh>
        <property name="decorators-file" value="/WEB-INF/decorators.xml" />
        <excludes file="${decorators-file}" />

        <page-parsers>
            <parser content-type="text/html"
                class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
            <parser content-type="text/html;charset=ISO-8859-1"
                class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
        </page-parsers>

        <decorator-mappers>
            <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
                <param name="config" value="${decorators-file}" />
            </mapper>
        </decorator-mappers>
    </sitemesh>

    web애플리케이션/WEB-INF/web.xml의 태그내에 다음을 추가하라.

    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    반응형
Designed by Tistory.