Apache Struts
Apache Struts 는 Java EE 기반의 웹 어플리케이션을 개발하기 위한 최초의 MVC 기반 오픈 소스 웹 프레임워크로 Servlet/JSP 기술을 기반으로 하고 있다. Craig McClanahan 에 의해 최초로 만들어졌으며 2000년 5월에 Apache 재단에 맡겨져 Apache Jakarta Project 로 성장해오다 별개의 Apache Struts Project 로 분리되었다. 2008년 5월 Struts 1.3.X 버전, Struts 2.0.11.X 이 릴리즈 되었으며 방대한 참고 자료와 커뮤니티를 보유하며 많은 사용자 층을 거느리고 있다.
특징
Struts의 대표적인 특징은 다음과 같다.
- Model-And-View의 디자인 패턴 즉, Model2의 아키텍처를 지원한다.
- ActionForm, Java Bean 같은 폼 관리 기능을 제공한다.
- 폼 입력값의 검증을 위해 validation을 이용할 수 있다.
- 화면 레이아웃 구현을 위한 Tiles를 제공한다.
- JSP 태그 라이브러리를 제공하여 View 레이어를 보다 쉽게 개발할 수 있다.
구성요소
Struts의 구성요소는 MVC 아키텍처에 따라 Model, View, Controller 컴포넌트로 구성된다.
Anyframe Web Architecture (Struts Base)
Model Component를 만드는 다양한 방법을 직접 제공하지 않는다. 대신 EJB (Enterprise Java Beans), JDO (Java Data Objects), JavaBeans, ORM (Object to Relational Mapping framework ) 등 여러 기술들을 이용해 구현된 어떤 Model Component 에도 접근 가능하다. 이러한 Model Component의 attribute들은 JSP의 폼 입력값들과 매핑될수 있다.
View Component는 실제 화면에 출력될 페이지를 작성하는 부분이다.
표준 JSP 나 Struts에서 제공하는 tag library 를 사용하여 View Component를 제작 한다. Component의 재사용, 관리 노력의 절감, 에러 감소를 위해 Application-Specific Custom tag, Page Composition (etc Tiles), Image Rendering Component 등 다른 기술의 채택을 고려할 수 있다.
ActionServlet과 RequestProcessor 가 Controller 역할을 담당하고 있으며 Request의 Flow를 제어한다.
주요 기능
Struts에서는 많은 기능을 제공한다. 아래의 내용은 개략적인 Struts 기능에 대한 설명이다. 자세한 설명은 Anyframe 매뉴얼 페이지를 참고한다.
Web Application 배포 지시자인 web.xml 에는 Front Controller 인 ActionServlet을 등록하고 struts-config.xml 의 위치를 지정한다.
struts-config.xml 는 Struts-enabled 웹 어플리케이션을 위한 배포 지시자로 Model, View, Controller를 함께 엮는 주된 설정 파일이다. 주요 설정 요소로는 action-mapping, global-fowards, global-exceptions, message-resources, form-beans 등의 element가 있다.
View 는 클라이언트가 모델의 상태를 보기 위해 사용하는 창(window)이다. 하나의 모델은 여러 뷰를 포함할 수 있으며 클라이언트가 어떤 뷰를 통해 모델을 보느냐에 따라 화면이 달라진다. 주로 자바 코드와 태그로 뷰를 구성하며 JSP를 기반으로 클라이언트에 동적인 컨텐츠를 제공하게 된다. 이러한 View는 JSP관련 기술, ActionForm, Custom Tags, Message Resources등으로 구성되며 사용자 입력 수용 및 데이터를 표시하고 입력데이터 검증, 에러처리, 국제화 등의 역할을 수행한다.
Model과 View의 중개자이다. Model과 View를 분리함으로써 Single domain model 기반의 다양한 프리젠테이션을 만들 수 있게 되고, 모든 클라이언트의 request가 Controller를 통하게 되므로 보안, 로깅 등 여러 공통 기능들을 제고할 수 있다. ActionsServlet, RequestProcessor를 통해 요청을 해당 Action과 매핑시키며 Action에서 비즈니스 로직을 호출해 작업을 수행 후 도출된 결과를 바탕으로 뷰를 결정하여 클라이어트에 보여준다.
Struts와 통합되어 부가적으로 활용할 수 있는 여러 컴포넌트가 있다. 그중 대표적인 것으로 레이아웃 정의를 위해 사용되는 Tiles, 폼 유효성체크를 위한 Validator, 메시지 출력이나, JSP단의 로직 구현을 위한 Tag Library등이 있다.

