메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

Struts 1.1의 새로운 기능: 제 1부

한빛미디어

|

2002-11-29

|

by HANBIT

10,495

저자: 수 스피엘만(Sue Spielman), 역 김대곤

편집자 주: 이 글은 Jakarta Struts 1.1에 대해 쓴 두 파트로 구성된 기사 중 첫 번째 기사이다. 본 기사의 일부는 수 스피엘만이 집필한 『The Struts Framework: Practical Guide for Java Programmers』 (Morgan-Kaufmann)을 많이 참고하였다. (이 책은 Struts1.1에 대해 가장 먼저, 상세하게 다루고 있는 책 중에 하나이다.) 본 기사와 관련된 문의 사항을 메일을 통해(sspielman@switchbacksoftware.com) 수 스피엘만과 연락할 수 있다.

지난 한 해 동안, Jakarta 오픈 소스 프로젝트의 하나인 Jakarta Struts 프레임워크는 웹 애플리케이션 개발에 있어 실제적인 표준으로 자리잡았다. MVC 아키텍쳐에 기반한 Struts는 시스템의 크기에 관계없이 사용될 수 있는 견고한 프레임워크이라는 것이 증명되었기 때문이다. 사실 필자는 각 개발자나 개발팀이 하나의 프로젝트를 위해 새로운 MVC 프레임워크를 개발해야 하는 이유를 만들어내라는 요구에 시달리고 있다. 그러나 이것은 넌센스다.

현재 Struts v1.1은 최신 버전이다. 이 글을 쓰는 시점에 v2의 베타 버전이 있으며, 곧 정식버전으로 출시될 것이다. 그렇다고 해서 Strut 1.1를 사용하지 않고 새로운 버전이 출시될 때까지 기다릴 만한 이유는 없다. 실제로는 지금 당장 사용해야 할 이유가 더 많을 것이다.

필자는 지금 Strut 1.1에 대한 기사를 쓰고 있다(이 기사는 두 부분으로 구성되어 있다). 그리고 이번 기사에서는 Jakarta Common 라이브러리와 통합 및 다중 애플리케이션 지원에 대해 다룰 것이다. 다음 기사에서는 Nested Tag 라이브러리, 플러그인 API, 유연한 에러 처리를 다룰 것이다. Strut 1.1은 이전 버전에 비해 많은 향상이 이루어 졌기 때문에 아마 독자들은 Strut 1.1를 사용하여 새로운 애플리케이션을 만들어 보고싶을 것이다. 사실, 필자는 독자들에게 새로운 애플리케이션을 시작해보라고 강력하게 권하고 싶다. 이전 버전과의 호환성은 Strut를 만드는 사람들의 변함없는 목표였으며, 그들은 실제로 v1.1에서 이러한 목표를 훌륭히 수행하였다. 기사의 마지막 부분에서는 v1.0.2 어플리케이션을 v1.1로 업그레이드할 때 고려해야 할 사항들에 대해 다룰 것이다.

이 기사는 Strut를 소개하는 글이 아니다. 이 글은 독자들이 이미 아키텍쳐 내의 다양한 구성 요소들에 익숙하다는 가정 하에 진행하고 있다. 만약 Strut를 처음 접해서 입문 성격의 정보가 필요하다면 필자가 쓴 세 개의 기사를 참조하기 바란다.

새로운 기능

Strut 1.1를 개발하면서 몇 가지 흥미로운 기능과 향상이 있었다. 물론 각 기능에 대해 차례차례 살펴볼 것이지만 일단 리스트를 살펴보기로 하겠다.
  • BeanUtil, Logging과 같은 Jakarta Common 라이브러리의 사용
  • 어떠한 코딩도 요구하지 않는 동적 Action 폼 생성을 위한 DynaActionForm
  • 여러 개의 struts-config.xml를 정의함으로서 다중 애플리케이션 지원
  • Nested 객체 계층에 JSP 페이지가 쉽게 접근할 수 있도록 하는 Nested 태그 라이브러리
  • 고급 탬플릿 기능과 폼 유효성 검사의 제공
  • ActionServlet 강화를 위한 플러그인 API
  • Action에서 모든 예외(Exception)를 처리하지 않아도 되는 유연한 예외(Exception) 처리
그럼 이제부터 각 기능들을 하나씩 살펴보자.

Jakarta Common 라이브러리와의 통합

Struts 유틸리티 패키지는 웹 애플리케이션을 작성할 때마다 발생하는 문제들을 해결하는데 도움을 준다. 이 패키지에 속한 대부분의 클래스들은 컨트롤러 서블릿 프레임워크 및 커스텀 태그 라이브러리에 종속되지 않기 때문에 일반 자바 프로그램에서도 사용할 수 있다. Struts 1.1의 유틸리티 패키지에 속했던 많은 클래스들이 Jakarta Commons 프로젝트로 옮겨졌다. Bean Utilities, Collection, Digester 패키지가 여기에 속한다. Struts가 제공하는 Logging 기능은 Commons 프로젝트의 패키지를 사용한 것이다.

org.apache.commons.beanutils 컴포넌트는 자바 Reflection 및 Introspection API에 대한 Wrapper클래스를 지원한다. Beanutils 패키지의 클래스를 사용하면 컴파일할 때 메소드명에 대한 정보를 제공하지 않고서도 실행시 getter 및 setter 메소드를 동적으로 사용할 수 있다. Beanutils 패키지의 클래스들은 커스텀 태그 라이브러리와 함께 사용되며, 그래서 개별 애플리케이션을 위한 추가 커스텀 태그를 만들고자 한다면, 일단 이 패키지에서 사용할 수 있는 것이 무엇인지부터 알아보는 것이 좋다. [표 1]은 이러한 정보를 제공하고 있다.

[표 1] Struts 1.1에 사용된 Commons 패키지
BeanUtils JavaBeans 속성을 생성한다
ConvertUtils String값을 클래스의 객체로 변환한다
MappedPropertyDescriptor 하나의 매핑된 속성을 표시한다
MethodUtils 특정한 속성보다 일반적인 메소드을 다룬다
PropertyUtils 자바 Reflection API를 사용하여 속성 getter 및 setter 메소드의 동적 생성을 지원한다


Digester 패키지는 규칙 기반의 XML 문서 처리를 지원한다. 이것은 객체를 정확하게 초기화하기 위해 설정 파일을 읽을 때 위력을 발휘한다. 이 패키지의 장점은 DOM이나 SAX에 대한 깊은 지식 없이도 XML과 관련된 많은 작업들을 손쉽게 할 수 있다는데 있다. 특히 이러한 기능은 XML 문서에서 특정한 패턴을 만났을 때 수행할 내용을 규정하는 규칙을 생성할 수 있는 자바 Object-Mapping 모듈을 통해 가능하다. Digester의 수많은 고급 기능들이 있으며, 여기에는 사용자가 직접 패턴 인식 엔진을 만들 수 있는 기능, 네임스페이스의 처리, 다중 애플리케이션에서 사용할 수 있도록 해주는 Rules을 추상화 하는 RuleSets의 생성이 포함되어 있다. Digester는 XML 문서를 읽어 그 정보를 애플리케이션에서 객체로 생성할 때 매우 유용하다.

DynaActionForms

DynaActionFormActionForms를 생성하기 위해 어떠한 코딩도 필요하지 않도록 하는 편리한 매커니즘을 제공한다. 폼의 속성을 동적으로 생성할 수 있도록 해주기 때문이다. 즉, 속성은 struts-config.xml 파일에 정의하고, 폼 타입은 org.apache.struts.action.DynaActionForm으로 설정할 수 있다는 것을 의미한다. 더 이상의 어떠한 작업도 필요하지 않다. DynaActionForm은 Jakarta Commons의 DynaBean을 사용하여 이러한 매커니즘을 수행한다. 이러한 동적 작동은 reflection과 Hashmaps을 통해 제공된다.

DynaActionForm라는 Element를 사용하여 아래와 같이 struts-config.xml에 정의된다.

    
    
    

동적 폼의 attribute는 표준 ActionForm의 attribute와 비슷하다. Name은 Action에서 폼 빈을 참조하기 위해 사용되며, Type은 생성되어야 할 클래스를 지정한다. DynaActionForm을 사용하면 Dynamic attribute는 자동적으로 true로 지정된다. 폼의 모든 속성은 을 사용하여 지정한다. Name attribute는 속성 이름을 나타나고, Type attribute는 빈의 속성의 자바 클래스을 나타낸다. 속성 Array를 사용하기 위해서는 type 설정 끝에 대괄호([])를 사용한다. 마지막 에서는 빈 속성만 생성하고 초기값으로 "Dance"를 지정하였다. 이 값은 DynaActionFormreset() 메소드가 호출되었을 때도 사용되며, 폼에 기본값을 지정할 수 있도록 한다. 기본값이 지정되지 않는 경우, 모든 primitive 타입의 변수는 0, 객체는 null이 할당된다.

DynaActionForm은 매우 편리하다. DynaActionForm의 주요한 장점은 코딩을 적게 할 수 있다는 것이다. 다른 폼들과 똑같이 insertDynaForm를 사용하기 위한 작업은 위의 예제 코드에 나와 있는 대로만 해주면 된다. 염두에 두어야 할 사항 중 하나는 유효성 검사이다. DynaActionForm를 사용할 때 유효성 검사는 ActionForm이 아닌 다른 곳에서 처리되고 있다고 가정한다. Action 자체에서 유효성 검사를 수행하도록 구현할 수도 있지만 더 나은 방법이 있다.

유효성 검사를 위해 org.apache.struts.validator 패키지 안에 있는 DynaValidatorForm 또는 DynaValidatorActionForm을 사용할 수 있다. DynaActionForm을 확장하여 XML파일에 근거한 기본 필드에 대한 유효성 검사를 실시할 수 있다. 유효성 검사는 validator에 넘겨진 Key값에 근거하여 실시되며, 이 Key값은 struts-config.xml에 정의된 name attribute이다. 이 값이 validation.xml 파일에 있는 폼 Element의 name attribute와 일치해야 한다.

다중 애플리케이션 지원

Struts 1.1에서는 다중 하위 애플리케이션으로의 지정 및 지원이 가능하다. 즉, 성능 향상을 위해 하나의 애플리케이션을 여러 개의 하위 애플리케이션으로 쪼갤 수 있다. 이제는 여러 개의 struts-config.xml 파일을 만들어 사용할 수 있게 되었다.

하위 애플리케이션을 사용하는 또다른 이유는 사용자별로 다른 처리 흐름 때문이다. 특정 애플리케이션을 작성할 때, 개발자들은 표준 페이지를 만들지만 로그인 하는 사용자에 따라 다른 처리 흐름이 필요한 경우이다. 다양한 struts-config.xml 파일과 함께 각 사용자별 처리 흐름에 대한 메타데이터를 데이터베이스에 저장하여 동적으로 web.xml을 생성하여 사용할 수 있다.

만약 Struts 1.x 버전을 사용해 본 사용자라면, 이전에는 web.xml에 정의되었던 많은 부분이 struts 1.1 버전에서는 struts-config.xml로 옮겨진 것을 발견하게 될 것이다. 이는 struts 1.1 버전에서는 애플리케이션별로 지정되도록 속성이 바뀌었기 때문이다. 다중 하위 애플리케이션은 Context 종속적인 요청 URI의 맨 처음에 접두어로 지정된다. 일치되는 접두어가 없을 경우에는 기본 설정으로 선택된다. 기본 설정은 스트링의 길이가 0인 접두어를 가진 하위 애플리케이션이다. 이러한 기본 하위 애플리케이션 선택 방식은 하나의 애플리케이션만 지원했던 Struts 1.0.x와의 호환성을 지원할 수 있도록 한다.

서로 다른 기능을 제공하는 큰 규모의 애플리케이션 또한 다중 하위 애플리케이션 기능을 유용하게 사용할 수 있는 부분이다. 아래의 web.xml 파일은 하위 애플리케이션이 어떻게 지정되는지 보여주고 있다.


   config
   /WEB-INF/struts-config.xml




   
   config/catalog
   /WEB-INF/struts-config-catalog.xml




   
   config/sorter
   /WEB-INF/struts-config-sorter.xml

하위 애플리케이션을 사용할 때 사용할 애플리케이션을 설정하기 위해 Context 지정하는 요청 URI를 사용한다. 예를 들면 폼의 액션에서는 다음과 같이 나타난다.

기본 하위 어플리케이션을 지정하는 방법과

catalog 하위 애플리케이션을 지정하는 방법이다. 실제로는 이렇게까지 해 줄 필요는 없다. catalog 하위 애플리케이션안에서 /listCds 형태로 사용할 수 있기 때문이다. 기본 규칙은 이렇다. 1.0 버전에서는 Context 종속적이었던 struts-config.xml의 모든 파라메타들이 현재 버전 1.1에서는 하위 애플리케이션 접두어 종속적이다. 이러한 방식은 과거의 싱글 애플리케이션을 아무런 변경없이 기본 하위 애플리케이션이나 접두어를 가진 하위 애플리케이션으로 바로 사용될 수 있도록 한다.
수 스피엘만(Sue Spielman)은 OnJava.com에서 JSP와 서블릿 파트의 부편집장을 역임하고 있다. 그녀는 Switchback Software LLC의 사장이며, 자바 전문 엔지니어이다. Switchback Software은 자바 엔터프라이즈, 웹, 무선 애플리케이션의 컨설팅 및 개발을 전문으로 하는 회사이다.
TAG :

이전 글 : SVG의 현재 위치

다음 글 : 귀여운 나의 MySQL

댓글 입력
자료실

최근 본 상품0