지난 글에서 소개한바와 같이 마소에서 연재 되었던 오픈소스를 이용한 시스템통합 두번째 컬럼인 스트럿츠와 벨로시티의 통합 이라는 제목이라는 글입니다.

 

1회, 오픈소스를 이용한 시스템 통합, 그 즐거운 도전의 시작
2회, 첫번째 도전! 스트럿츠와 벨로시티의 통합

3회, 약한 결합도 아키텍처를 위한 대안 기술, 스프링
4회, OR 맵핑 도구의 선두 주자, 하이버네이트

지난 글 에서는 오픈소스가 가지고 있는 무한한 가능성이 어떻게 실무와 연동될 수 있는지를 살펴보고, 관련 사례와 VSSH 프레임워크의 개발 방향에 대해 간단히 소개했다. 이번 호에서는 VSSH 프레임워크를 구성하는 기술 중에서 벨로시티와 스트럿츠를 통합하는 방법에 대해 이야기를 풀어나가고자 한다.

벨로시티와 스트럿츠 연동을 위한 예제
<그림 1>과 같은 단순한 구조를 가진 로그인 예제를 개발해 나가면서 벨로시티와 스트럿츠의 연동 방법을 살펴보도록 하자(이 예제는 참고자료 2의 17장에 소개된 예제를 벨로시티와 스트럿츠의 연동 과정을 설명하기 위한 목적으로 수정한 것이다).

<그림 1> 로그인 예제의 구성

로그인 예제는 로그인 기능과 로그아웃 기능만을 가지는 아주 간단한 웹 애플리케이션이다. 처음 사이트를 방문하게 되면 환영 메시지와 함께 로그인 링크가 나타난다. 로그인 링크를 클릭하면 사용자 아이디와 비밀번호를 입력할 수 있는 로그인 화면이 뜬다. 사용자가 입력한 아이디와 비밀번호가 등록된 것이라면 다시 초기 화면으로 이동해서 로그인 정보를 보여주고, 그렇지 않다면 에러 메시지를 출력하고 다시 로그인하도록 한다.

로그인 상태에서는 사용자 아이디가 출력되며, 로그아웃 버튼을 누르면 로그아웃됨과 동시에 초기화면으로 이동하는 것이다. 자기가 개발해야 하는 도메인 영역에 대해 많은 경험이 없다면, 분석된 유즈케이스 시나리오를 토대로 위와 같이 사용자 인터페이스를 그려보고, 각 사용자 인터페이스간의 흐름을 파악한 다음 각각의 흐름에 이름을 붙여두는 것이 좋다. 이 방법은 해결해야 할 문제 자체를 더 잘 이해할 수 있도록 도와줄 뿐 아니라, 스트럿츠의 액션 설계에도 도움을 준다.

로그인 예제에서 사용되는 정보는 아이디와 비밀번호만으로 유지한다. 이 정보는 user.properties라는 프로퍼티 파일에 기록되며, 아이디는 대소문자 구별을 하지 않기 위해 대문자로 미리 변환시킨 형태로 기록해 두도록 하겠다(. 다음 연재에서는 이 정보를 데이터베이스로 옮겨 저장하고, CMP 방식의 엔티티 빈을 이용해서 Spring 프레임워크에서 처리되도록 확장할 것이다).

형식 : {USERID}={password}
예제 : VSSH=good

예제를 위한 환경 구성
로그인 예제를 개발하고 운영하기 위해 다음과 같은 환경을 구성했다. 지면 관계상 각 도구의 설치 및 사용 방법에 대해서는 필자들이 운영하는 VSSH 포럼(참고자료 1)에 따로 기록해 두었으므로 환경 구성이나 도구 사용법에 대해 알고 싶은 독자들은 홈페이지를 참고하기 바란다. 애플리케이션 서버의 경우 앞으로의 연재를 고려해 JBoss로 선택했을 뿐, 이번 예제에서는 톰캣만으로 충분하다. 개발 도구의 경우도 생산성 향상 및 디자이너와의 협업을 쉽게 할 수 있는 벨로시티의 장점을 보여주기 위해 드림위버용 벨로시티 플러그인과 이클립스용 벨로시티 플러그인을 사용했다. 자신이 주로 사용하는 IDE가 있다면 굳이 이러한 환경을 똑같이 사용할 필요는 없다.

◆ 자바 : JDK 1.4.2
◆ 애플리케이션 서버 : JBoss 3.0.8(with 톰캣 4.1.24)
◆ 개발 도구 : 드림위버 MX 2004(Velocity Suite v1.2.0), 이클립스 3.0(JBoss IDE 1.3.0, Veloeclipse)
◆ 라이브러리 : 스트럿츠 1.1, 벨로시티 1.4, 벨로시티 툴 1.1

벨로시티를 이용한 Hello, World!
다음은 벨로시티를 이용한 Hello World! 예제이다. 이 예제는 디자인에 해당하는 템플릿 파일과 처리 로직을 담고 있는 자바 코드로 구성된다.

#set( $name = "Seal" )
Hello Velocity World, $name is Here

템플릿 파일을 들여다보면, 일반 텍스트에 #이나, $ 기호가 붙은 이상한 코드들이 포함되어 있다. 이것이 벨로시티 템플릿에서 사용되는 VTL(Velocity Template Language)이다. VTL은 벨로시티에서 템플릿 개발에 사용되는 언어이로 레퍼런스(Reference), 디렉티브(Directive), 그리고 주석(Comment)으로 구성된다.

<표 1> 벨로시티 템플릿 언어 정리

VTL은 <표 1>에서 정리한 것처럼 너무나 단순하기 때문에 흔히 성냥갑 표지에 다 적을 수 있을 만큼 작은 API라고 불려진다. 이는 뷰 작업을 개발자와 디자이너가 함께 진행해 나간다는 점을 감안하면 매우 바람직한 일이라고 볼 수 있다. VTL을 통해 작성된 벨로시티 템플릿(vm 파일)은 다음과 같은 패턴을 통해 처리 된다.

Velocity.init("velocity.properties");  ...................................................... (1)
VelocityContext context = new VelocityContext();.................................... (2)
Template template = null;
template = Velocity.getTemplate("HelloWorld.vm"); ................................. (3)
BufferedWriter writer =
new BufferedWriter(new OutputStreamWriter(System.out));
if ( template != null)
template.merge(context, writer);  ................................................... (4)
writer.flush();
writer.close();

앞의 소스코드는 벨로시티의 처리 과정을 보여줄 수 있는 핵심 코드만을 추출한 것이다. 벨로시티에서는 템플릿을 처리하기 위해 다음과 같은 4단계의 동작을 수행한다.

[1] 벨로시티 템플릿 엔진의 초기화(초기화 설정은 velocity.properties 파일을 사용)
[2] 자바 클래스와 템플릿간의 정보 전달에 사용할 컨텍스트 객체 생성, 컨텍스트 객체는 해시 테이블을 상속받으므로 (키, 값)의 순서쌍 형태로 값을 저장
     예) context.put("members", memberDAO.getMembers());
이렇게 해서 컨텍스트에 저장된 값들은 템플릿에서 레퍼런스를 이용해서 참조. 컨텍스트에 담긴 값이 컬렉션일 경우 #foreach 디렉티브를 통해 하나씩 참조 가능
[1] 로직과 연결되어 사용될 템플릿 파일을 선택
[2] 템플릿과 컨텍스트를 렌더링해서 그 결과를 출력

템플릿 엔진이 동작하는 방식을 정리해 보면, 개발자는 사용자에게 보여 질 디자인을 위해 VTL을 이용한 템플릿 파일을 작성하고, 그 처리를 위한 코드를 개발한다. 자바 코드와 템플릿 간의 필요한 정보 전달은 컨텍스트 객체를 통해 이루어진다. 이러한 2개의 파일을 입력받아 벨로시티는 템플릿을 토대로 렌더링한 결과 페이지를 출력하게 되는 것이다. 템플릿에 어떤 내용이 담겨 있느냐에 따라 결과 페이지는 일반 텍스트가 될 수도 있고, HTML이나 SQL, PostScript, XML 등도 될 수 있다.

<그림 2> 템플릿 엔진의 동작 원리

앞의 예제는 콘솔에 텍스트 결과를 출력하도록 작성되어 있으므로 다음과 같은 실행 결과가 나타나게 될 것이다.

Hello Velocity World, Seal is Here

VelocitySuite를 이용한 로그인 예제 템플릿 개발
스트럿츠와 벨로시티를 연동한 웹 개발에서 사용되는 벨로시티 템플릿은 사실 앞에서 소개한 VTL 문법을 이용해서 스트럿츠 태그 라이브러리를 감싼 것에 지나지 않는다. 그런 이유로 스트럿츠 태그 라이브러리로 작성된 JSP 파일과 스트럿츠 기반의 벨로시티 템플릿은 1:1 대응을 통해 상호 변환이 가능한 경우가 많다. 그럼에도 불구하고 벨로시티를 사용하는 이유는 벨로시티가 지니고 있는 다음과 같은 몇 가지 장점 때문이라고 할 수 있다.

◆ 벨로시티 템플릿은 같은 기능의 JSP에 비해 코드 양이 적고 렌더링 속도도 빠르다.
◆ 템플릿 방식이기 때문에 다양한 출력 양식의 지원이 쉽다.
◆ HTML 편집기를 통해 쉽게 볼 수 있기 때문에 디자이너가 작업하기 편하다.

이러한 벨로시티의 장점을 십분 활용하기 위해 로그인 예제의 템플릿 개발에 드림위버와 VelocitySuite라는 플러그인을 사용해 보도록 하자. VelocitySuite는 매크로미디어에서 제공하는데, 벨로시티 홈페이지에 다운로드할 수 있는 링크가 제공된다. 현재 VelocitySuite는 1.2 버전으로 드림위버 MX 2004 버전에서 제대로 동작한다. 링크를 따라가면 VelocitySuite16.mxp라는 파일이 다운로드되는데, 해당 파일을 더블클릭하면 드림위버의 확장기능 관리자(Extension Manager)가 실행되어 쉽게 설치할 수 있다. 설치가 되고 나면, 벨로시티 템플릿이 생성될 기본 파일 양식에 추가된다. 벨로시티 템플릿을 생성시키면 다음과 같은 툴바가 상단에 나타나는데, 이것이 바로 VTL의 각 요소를 빠르게 입력할 수 있도록 도와주는 툴이다.

<그림 3> 드림위버용 VelocitySuite의 툴바

로그인 예제에서 사용되는 템플릿 파일은 2개뿐이다.

◆ Welcome.vm : 환영 메시지를 담은 초기 화면으로, 로그온/로그오프에 대한 링크 제공
◆ Logon.vm : 아이디와 비밀번호를 입력받는 화면으로, 에러 페이지 기능을 포함

<화면 1>은 드림위버를 이용해서 Welcome.vm 파일을 작성하는 과정을 캡처한 것이다. 보는 바와 같이 비주얼한 환경에서 디자이너에게 친숙한 방식으로 쉽게 템플릿 제작이 가능함을 확인할 수 있다.

<화면 1> 드림위버를 이용한 welcome.vm 파일 제작 과정

벨로시티를 이용하면 VTL 요소와 HTML 요소의 구분이 명확하기 때문에 디자이너와 프로그래머가 실수로 서로의 작업을 해치게 되는 경우를 피할 수 있다. 다음의 코드는 Welcome.vm 파일의 전체 소스코드이다. #if 디렉티브를 이용해서 사용자 정보 여부에 따라 서로 다른 화면이 출력됨을 쉽게 이해할 수 있을 것이다.

<HTML>
<HEAD>
    <TITLE>로그인 예제 : Velocity+Struts 버전 (Welcome Page)</TITLE>
    <META http-equiv="Content-Type" content="text/html;charset=euc-kr">
    <BASE href="$link.baseRef">
</HEAD>
<BODY>
    <p><IMG src="vssh.gif"></p>
    <P>
    #if( $user )
        <font color="blue">$user.username</font>님이 로그인하셨습니다.
    #else
        VSSH 프로젝트에 오신 것을 환영합니다.
    #end
    </P>  
    $!errors.getMsgs()
    <UL>
    #if( $user )
        <LI><A href="$link.setForward('logoff')">로그아웃</A></LI>
    #else
        <LI><A href="$link.setForward('logon')">로그인</A></LI>
    #end
    </UL>
</BODY>
</HTML>

다음의 소스코드는 Logon.vm 파일의 주요 코드를 나타낸 것이다. 아이디와 비밀번호를 입력할 수 있도록 폼이 구성되어 있고, 에러가 있을 경우 그 메시지를 출력하도록 작성되어 있다.

<BASE href="$link.baseRef">
$!errors.getMsgs()
<FORM method="POST" action="$link.setAction('/LogonSubmit')">
<INPUT type="text" name="username" value="$!logonForm.username">
<INPUT type="password" name="password" value="$!logonForm.password">
<INPUT type="submit"><INPUT type="reset">  ## 일부 코드는 생략됨

템플릿에 사용된 VTL 코드는 스트럿츠 태그 라이브러리를 활용한 JSP로도 표현될 수 있다. <표 2>에서 확인할 수 있듯이 벨로시티 템플릿과 태그 라이브러리가 적용된 JSP의 기능성은 똑같다. 하지만 JSP에 비해 상대적으로 템플릿 코드가 더욱 간결하고, 이해하기 쉽게 작성되어 있음을 확인할 수 있을 것이다. 이 점이 벨로시티를 사용하는 또 다른 이유가 된다.

<표 2> 벨로시티와 JSP 비교

벨로시티의 유용한 도구 모음, VelocityTools!
VelocityTools는 벨로시티를 이용한 애플리케이션 개발에 사용되는 유용한 도구들의 모음으로, 현재 1.1 버전까지 나와 있는 상태이다. VelocityTools는 크게 GenericToos, VelocityView, VelocityStruts로 이루어져 있다.

◆ GenericTools : 어떤 형식의 자바 객체에서도 사용될 수 있는 날짜 조작, 숫자 포매팅과 같은 일반적인 도구들로 구성된 유틸리티. DateTool, MathTool, NumberTool, IteratorTool, RenderTool로 구성됨.
◆ VelocityView : 벨로시티를 이용한 빠른 웹 개발에 사용되는 도구 모음. 벨로시티 템플릿의 렌더링을 담당할 VelocityViewServlet이 포함되어 있으며, toobox 설정을 통해 여러 도구들을 템플릿 내에서 사용할 수 있도록 함. VelocityView를 이용하면 세션, 컨텍스트, HTTP 요청 등에 담긴 정보를 템플릿 내에서 이용할 수 있고, 각종 로깅 API를 지원함. AbstractSearchTool, CookieTool, ImportTool, LinkTool, ParameterTool, ViewRenderTool로 구성됨.
◆ VelocityStruts : 벨로시티와 스트럿츠의 프레임워크 통합을 위해 제공되는 도구 모음. 스트럿츠에서 사용되는 JSP와 대응되는 기능을 가진 템플릿을 만들 수 있는 각종 도구들이 포함됨. ActionMessageTool, ErrosTool, FormTool, MessageTool, StrutsLinkTool, SecureLinkTool, TilesTool, ValidatorTool로 구성됨.

<그림 4>는 로그인 예제의 전체 디렉토리 구조도를 표시한 것이다. 스트럿츠와 벨로시티를 통합해 사용하기 위해서는 애플리케이션의 WEB-INF 밑에 있는 lib 디렉토리에 스트럿츠 관련 라이브러리, 벨로시티 관련 라이브러리와 함께 VelocityTools 라이브러리를 함께 넣어둬야 한다.

<그림 4> 로그인 예제의 전체 디렉토리 구조도

필요한 설정 파일
벨로시티와 스트럿츠를 통합해서 사용한 웹 애플리케이션은 3개의 설정 파일을 필요로 한다. WEB-INF 디렉토리 밑에 위치한 web.xml, struts-config.xml, toolbox.xml이 바로 그것이다.

◆ web.xml : J2EE 기반 표준 웹 애플리케이션 설정 파일
◆ struts-config.xml : 스트럿츠 설정 파일
◆ toolbox.xml : 벨로시티 툴 설정 파일

앞에서 살펴본 Hello, World 예제에서와 같이 벨로시티를 사용하기 위해서는 템플릿 파일뿐 아니라 그 처리 과정을 담당할 자바 코드가 필요하다. VelocityTools에는 이러한 코드를 자동화 해놓은 VelocityViewServlet이 포함되어 있는데, 이를 통해 개발자는 자질구레한 렌더링 과정에 대해서는 신경을 쓰지 않을 수 있다. VelocityViewServlet를 이용하려면 이 클래스가 포함된 velocity-tools-view-1.1.jar 파일을 lib 디렉토리에 위치시키고, web.xml 파일에서 서블릿 설정을 추가해 주어야 한다.

<web-app>
  <!-- 벨로시티를 위한 벨로시티 뷰 서블릿 설정 -->
  <servlet>
    <servlet-name>velocity</servlet-name>
    <servlet-class>org.apache.velocity.
      tools.view.servlet.VelocityViewServlet</servlet-class>
    <init-param>
      <param-name>toolbox</param-name>
      <param-value>/WEB-INF/toolbox.xml</param-value>
   </init-param>
   <load-on-startup>10</load-on-startup>
  </servlet>

  <!-- *.vm 파일을 벨로시티 뷰 서블릿과 연결  -->
  <servlet-mapping>
    <servlet-name>velocity</servlet-name>
    <url-pattern>*.vm</url-pattern>
  </servlet-mapping>
</web-app>

이 설정을 통해 vm 확장자가 붙은 모든 파일은 velocity로 이름지어진 VelocityViewServlet을 통해 처리됨을 확인할 수 있다. 서블릿 설정의 초기 파라미터로 toolbox 파라미터가 전달되고 있는데, 이는 툴(tool)이라고 부르는 일련의 미리 정의된 객체들을 통해 스트럿츠의 커스텀 태그에서 지원되는 각종 기능을 이용해서 템플릿을 작성할 수 있도록 도와주는 역할을 수행한다.

<toolbox>
  <tool>
     <key>toolLoader</key>
     <class>org.apache.velocity.tools.tools.ToolLoader</class>
  </tool>
  <tool>
     <key>link</key>
     <class>org.apache.velocity.tools.struts.LinkTool</class>
  </tool>
  <tool>
     <key>msg</key>
     <class>org.apache.velocity.tools.struts.MessageTool</class>
  </tool>
  <tool>
     <key>errors</key>
     <class>org.apache.velocity.tools.struts.ErrorsTool</class>
  </tool>
  <tool>
     <key>form</key>
     <class>org.apache.velocity.tools.struts.FormTool</class>
  </tool>
</toolbox>

이 코드는 로그인 예제에서 사용된 툴 박스 설정의 샘플이다. 각 툴을 로딩하는 ToolLoader가 포함되어 있고, LinkTool, MessageTool, ErrorsTool, FormTool이 사용되고 있음을 확인할 수 있다. StrutsTools가 버전이 바뀌면서, 몇 몇 툴들의 패키지 구조가 변경되었다. 만일 자신의 StrutsTools를 버전업하려면, 벨로시티 홈페이지에서 각 툴의 레퍼런스 문서들을 참고해서 툴 박스 설정을 확인해보는 것이 좋다. 홈페이지에는 그 밖에도 툴의 기능 설명과 VTL에서 참조할 레퍼런스 이름, 지원되는 속성이나 메쏘드 목록 등도 확인할 수 있다.

새로운 툴을 추가적으로 사용하고자 한다면 툴박스 설정을 추가하는 것만으로 간단히 해결된다. Tiles를 연동해서 개발하고 싶다면 다음과 같은 설정 정보가 toolbox.xml에 추가될 것이다.

<tool>
<key>tiles</key>
<scope>request</scope>
<class>org.apache.velocity.tools.struts.TilesTool</class>
</tool>

마지막으로 스트럿츠 설정 파일인 struts-config.xml에 대해 살펴보도록 하자. 로그인 정보 전달을 위한 ViewHelper에 해당하는 폼 빈(LoginForm)에 대한 설정이 하나 추가되어 있고, Welcome, Logon, LogonSubmit, Logoff의 4가지 액션 맵핑이 정의되어 있음을 확인할 수 있다.

<struts-config>
    <!-- 폼 빈의 정의 -->
    <form-beans>
        <form-bean name="logonForm" type="app.LogonForm"/>
    </form-beans>

    <!-- 글로벌 포워드 정보 정의 -->
    <global-forwards>
        <forward name="logoff"  path="/Logoff.do"/>
        <forward name="logon"  path="/Logon.do"/>
        <forward name="welcome"  path="/Welcome.do"/>
    </global-forwards>

    <!-- 스트럿츠 액션 맵핑 -->
    <action-mappings>
        <action path="/Welcome"
            type="org.apache.struts.actions.ForwardAction"
            parameter="/pages/Welcome.vm"/>
        <action path="/Logon"
            type="org.apache.struts.actions.ForwardAction"
            parameter="/pages/Logon.vm"/>
        <action path="/LogonSubmit"
            type="app.LogonAction" name="logonForm"    
            scope="request" validate="true" input="/pages/Logon.vm">
            <forward name="success" path="/pages/Welcome.vm"/>
        </action>
        <action  path="/Logoff" type="app.LogoffAction">
            <forward name="success" path="/pages/Welcome.vm"/>
        </action>
    </action-mappings>
</struts-config>

여기서 주목해야 할 점은 포워드할 대상이 벨로시티 템플릿 파일인 VM 파일로 설정되어 있다는 것이다. 이와 같이 JSP를 VelocityTools에서 지원되는 각종 툴을 이용해서 템플릿으로 변환하고, 필요한 라이브러리를 설치/설정한 다음 JSP로 향한 포워드 정보를 VM 파일로 변경하는 것만으로 간단히 스트럿츠 애플리케이션을 벨로시티와 통합할 수 있다.

로그인 예제의 구현 클래스와 수행 과정
로그인 예제는 단순하면서도 전형적인 스트럿츠 애플리케이션으로 모두 6개의 클래스로 구성되어 있다. 로그인 및 로그오프 동작을 수행할 액션 클래스(LoginAction, LogoffAction)와 user.properties 파일에 기록된 사용자 정보를 처리하는 DAO인 UserDirectory 클래스 및 예외 클래스(UserDirectoryException), 전체적인 환경 정보를 유지하기 위한 Constants 클래스, 마지막으로 계층간의 정보 전달에 사용될 ViewHelper이자 값 객체인 LoginForm 클래스가 그것이다.

<그림 5> 로그인 예제의 클래스 다이어그램

스트럿츠를 알고 있는 개발자라면 누구나 개발할 수 있는 쉬운 예제이기 때문에 구현 로직에 대한 자세한 내용은 생략한다. 전체 소스코드를 다운받고자 한다거나 로그인 구현에 대한 의문점이 있는 경우에는 VSSH 포럼을 이용해주기 바란다.

마지막으로 로그인 예제의 수행 과정을 정리해 보면, <그림 6>에서 표시된 것과 같이 모두 6단계의 과정을 통해 사용자 요청을 처리하게 된다. 스트럿츠가 벨로시티와 통합하게 되면서 달라지는 부분은 5, 6단계에 해당하는 내용이다. 요청에 대한 처리가 끝나면 그 결과를 포워드하게 되는데 struts-config.xml에는 포워드 대상이 벨로시티 템플릿인 VM 파일로 향하도록 설정되어 있다. *.vm이란 확장자를 만나게 되면 web.xml의 서블릿 설정에 의해 VelocityTools에서 제공되는 VelocityViewServlet으로 제어가 이동하게 된다.

VelocityViewServlet은 toolbox.xml에 정의된 각종 툴들을 로드해서 개발자가 정의한 템플릿에 따라 벨로시티 템플릿 엔진에게 렌더링을 요청하게 되고, 그 결과로 생성된 HTML 페이지가 사용자에게 전달됨으로써 사용자는 요청 결과를 보게 되는 것이다.

<그림 6> 로그인 예제의 전체 수행 과정 정리도

VSSH 포럼을 활용하자
지금까지 벨로시티, 스트럿츠, Spring, Hibernate를 통합한 오픈소스 프레임워크인 VSSH를 개발하기 위한 첫 단계로, 벨로시티와 스트럿츠를 통합하는 방법에 대해 살펴보았다. 자카르타 프로젝트에서 제공되는 VelocityTools의 기능을 활용해서 손쉽게 벨로시티와 스트럿츠가 통합되며, 태그 라이브러리가 적용된 JSP 파일의 대안으로 벨로시티가 사용될 수 있음을 살펴보았다.

한 가지 아쉬운 점은 한정된 지면으로 인해 이클립스 3.0을 활용한 오픈소스 기반의 개발 환경 구축에 대한 내용을 소개하지 못한 것이다. 필자의 경우 JBoss를 애플리케이션 서버로 사용하기 위해 Lomboz와 EclipseIDE를 설치하고, 벨로시티 지원을 위해 Veloeclipse를 설치해서 테스트해 보았는데 기대했던 것보다 훨씬 더 훌륭한 개발 환경을 구축할 수 있었다. 그에 관한 내용은 포럼을 통해 정리해 놓을 생각이므로 관심 있는 독자들은 참고하길 바란다.

최근 VSSH 프로젝트가 연재되고 나서부터 포럼의 사용자가 많이 늘어났다. 많은 개발자들이 오픈소스의 가능성을 인정하고, 실무에서 오픈소스 기술들을 자연스럽게 활용할 수 있게 되기 위해서는 우리 모두가 좀 더 많은 경험들을 공유하고 서로가 지닌 노하우를 털어놓을 필요가 있다. 이 연재를 통해 더 많은 개발자들이 오픈소스 기술의 활용에 관심을 가져주기를, 그리고 그 과정을 통해 각자의 기술력을 한 단계 업그레이드 할 수 있기를 진심으로 바란다. @



뷰계층 개발 기술 변화의 흐름

현재 자바 기술은 매일 같이 눈부신 속도로 발전해 가고 있다. 그 중에서도 특히 많은 변화를 겪고 있는 것은 MVC 패턴에 따른 3개의 계층 구조 중에서 사용자 인터페이스를 구성하는 뷰 계층에 해당하는 기술들이다.

모델 2 방식의 JSP 개발이 일반화된 지금, 가장 많이 사용되는 기법은 썬마이크로시스템즈의 설계 가이드라인에 포함된 애완동물 쇼핑몰(PetStore) 예제에서 볼 수 있는 View Helper 패턴과 Composite View 패턴이 결합된 형태의 J2EE 패턴 적용과, 다양한 태그 라이브러리의 활용일 것이다. 하지만 성능, 개발 생산성, 유지보수성, 사용성 등의 향상을 이유로 최근 뷰 계층 기술이 다시 한번 변화할 조짐을 보이고 있는데, <그림>에서 볼 수 있는 플래시 리모팅, 벨로시티, 웹 스타트, JSF가 바로 그것이다.

플래시 리모팅 MX
플래시 리모팅 기술은 2002년  펫 마켓(PetMarket)이라는 예제와 함께 처음 소개되었다. 초기에는 매크로미디어의 콜드퓨전 서버에서 CFML(ColdFusion Markup Language)를 이용해서 개발하던 방식을 사용했는데, 자바 기술과 연동될 수 있는 플래시 리모팅 MX가 발표되면서부터 자바 공동체의 뷰 기술의 한 가지 대안으로 자리매김 하였다. 플래시 리모팅 기술의 장점은 무엇보다 플래시를 이용해서 다이내믹한 사용자 인터페이스를 꾸밀 수 있다는 점과, 하나의 웹 페이지를 효율적으로 분할해서 페이지 이동 없이 한 페이지에서 모든 처리가 이루어지는 원 페이지 모델 기법이 구현 가능하다는 것이다. 플래시 리모팅은 인터넷 예약/예매 시스템과 같은 비교적 단순하면서 사용자의 편의성이 최대한 요구되는 웹 애플리케이션에서 적극적으로 도입되고 있는 추세이다.

X인터넷과 자바 웹 스타트
X인터넷은 2000년 IT 전문 조사기관인 포레스터 리서치에 의해 소개된 개념이다. X인터넷은 실행 가능한 인터넷(eXcutable Internet)과 확장된 인터넷(eXtended Internet)을 뜻하는 용어이다. 본지를 통해 현재 연재되고 있는 Curl이 X인터넷 기술의 대표적인 예다. 실행 가능한 인터넷이란 쉽게 말해 웹을 기반으로 한 C/S 환경의 복귀라고 말할 수 있다. Curl 프로그래밍에서 볼 수 있듯이 X인터넷 기술은 마치 비주얼 베이직이나 델파이를 사용하는 것과 같이 편리한 인터페이스와 다양한 컴포넌트를 통해 높은 개발 생산성을 보장받을 수 있다. 확장 가능한 인터넷은 유비쿼터스 시대의 도래와 밀접한 관계를 지닌다. 그것은 TV, 냉장고, 심지어 시계까지 인터넷 연결이 가능한 칩을 내장한 모든 기기의 상호 연결성을 강화한 개념을 의미하는 말이다. 자바 진영에서도 X인터넷처럼 C/S의 장점을 인터넷과 결합하고자 하는 시도가 있어 왔는데, 자바 웹 스타트 기술이 바로 그 대표적인 예라고 볼 수 있다. X인터넷과 웹 스타트는 이전의 C/S 환경과 같이 복잡한 UI를 필요로 하는 은행이나 증권사와 같은 금융권을 중심으로 활발하게 도입되고 있다.

JSF
JSF(Java Server Faces)는 썬에서 인정한 자바 표준 UI 프레임워크로 J2EE 1.4 SDK에 JSF 1.0이 포함되어 있다. 올해 샌프란시스코에서 개최된 2004 자바원 컨퍼런스에서도 JSF에 대한 개발자들의 관심과 호응은 특히 대단했다고 한다. JSF를 쉽게 이해하려면 닷넷의 웹폼(WebForm)과 비쥬얼 스튜디오를 떠올리면 된다. JSF를 이용하면 다양한 서버사이드 웹 컴포넌트를 활용해서 쉽고 빠르게 애플리케이션을 개발할 수 있고, 비즈니스 로직과의 매개를 자동화함으로써 개발자로 하여금 UI와 비즈니스 로직에 집중할 수 있는 뼈대를 마련해준다. 현재 썬의 자바 스튜디오 크리에이터를 비롯해 IBM의 웹스피어 스튜디오 등이 JSF를 지원하고 있다. JSF는 어떤 의미에서 성공이 보장된 기술이라고 볼 수 있지만, 툴의 안정화나 기술의 확산이 어느 정도 이루어지기까지는 아직 시기상조인 기술로 보인다. 하지만 웹 서비스의 사용이 본격화되는 시점에서는 자바 뷰 기술에서도 가장 확고하게 자리를 잡을 것으로 보이기 때문에 꾸준히 관심을 가져야 할 필요가 있을 것 같다.

벨로시티
벨로시티는 자카르타 프로젝트에서 진행 중인 자바 기반의 템플릿 엔진이다. 템플릿(디자인)과 코드(로직)을 따로 개발한 다음 템플릿 엔진인 벨로시티에 보내게 되면 HTML을 비롯한 다양한 양식의 결과 페이지를 렌더링해서 출력하게 된다. 본 연재에서 함께 개발하게 될 VSSH 프레임워크는 앞서 소개한 다양한 뷰 처리 기법 중 벨로시티를 사용해서 오픈소스 프레임워크를 완성하게 될 것이다. 벨로시티에 대해서는 이미 지난 2003년 1월호부터 2회에 걸쳐 연재된 바 있다.

 

출처 : 마이크로소프트(마소 2004.9월)

 
블로그 이미지

시반

시반(詩伴)이란 함께 시를 짓는 벗이란 뜻을 가지고 있습니다. 함께 나눌수 있는 그런 공간이길 바라며...

카테고리

분류 전체보기 (233)
개발 이야기 (73)
WEB2.0 (57)
DB2 (24)
MySQL (6)
오라클 (26)
기타 (44)
취미 (0)
잡담 (2)