2012년 1월 11일

Struts 2 란 ?


Struts2 2001년 공개된 이후 자바 영역에서 웹 어플리케이션 개발을 위한 표준 프레임워크로 널리 사용되었던 Struts1 과는 사실상 다른 프레임워크이다. (Struts2공개 소프트웨어 WebWork 2.2를 계승하는 프로젝트로 Struts1 보다는 WebWork 2.2 와 유사하다)

그림-1 Front Controller MVC Model

초기 대부분의 웹 어플리케이션들은 Page Controller 패턴을 사용하였다. Page Controller 패턴은 요청이 많을 경우 부하가 걸린다는 것이고 하나의 페이지마다 하나씩의 Page Controller 가 존재한다는 문제와 강한상속에 따른 유연성 문제를 가지고 있다


Struts 1 Struts 2 Page Controller 패턴의 문제점을 해결한 Front Controller 디자인 패턴[1]을 이용한 MVC 모델이라는 공통점을 가지고 있다


Struts 1 Struts 2 MVC 모델의 차이는 Push Model & Pull Model 방식으로 설명할 수 있다. Struts1 에 적용된 Push Model 은 초기 MVC 모델에 주로 채택되었던 방법으로 사용자의 요청에 의해 처리된 결과를 View 에 밀어 넣는 (Push) 방식이고, Struts 2 에 적용된 Pull 방식은 View 에서 다수의 Controller 로 부터 필요에 따라 처리 결과를 가져오는 (Pull) 방식이다. Pull Model 은 필요한 컴포넌트를 호출하여 처리하는 방식이 가능하기 때문에 이를 Component MVC 라고도 부르며, 최근에는 많은 웹 어플리케이션 프레임워크들이 이 방식을 사용하고 있다.



[1] Page Controller 패턴은 Controller를 사용자의 요청을 다루기 위한 최초 진입점(initial Point)로 정의하고, 사용하는 패턴. 최초 진입점이 되는 Controller FrontController라 하며 이 컨트롤러는 authentication, authorization, buisiness delegating, managing view 등의 작업을 통합해서 제공하는 책임을 갖는다. Controller가 모든 클라이언트 요청의 진입점이 되면서 얻을 수 있는 장점은 요청 관리에 대한 표준화(a standard framework for handling request)이다. 요청을 분산되서 받을 경우에는 중복된 코드가 생산이 되기 때문에 비효율적이다. 진입점을 한 곳으로 모음으로서 클라이언트의 요청을 일관된 방법으로 관리할 수 있게 된다.


그림-2 Push Model


그림-3 Pull Model


 다음 그림은  Struts 2 프레임워크의 아키텍처를 보여준다.

그림-4 Struts 2 아키텍처

FilterDispatcher
표준 필터 FilterDispatcher ActionMapper 를 사용하여 Acton 을 불러낼 것인가를 결정한다. 만일 불러내야 한다면 ActionProxy 에게 제어를 위임한다.

ActionProxy
ActionProxy Struts.xml 파일을 사용하여 초기화되는 ConfigurationManager 는 참조하여 명령 패턴을 구현하는 ActionInvocation 을 생성한다. ActionInvocation (설정된 경우) Inteceptor들을 호출 하고 Action 을 호출한다. ActionInvocation Action 호출 결과에 해당하는 Result 를 찾는다.  랜더링될 JSP 또는 Freemarker 같은 템플릿을 포함하는 Result 를 실행한다. 이제 반대 순서로 Inteceptor 들을 호출한다.




참고자료


  1. Core J2EE Pattern Catalog - Front Controller. (날짜 정보 없음). Oracle: http://java.sun.com/blueprints/corej2eepatterns/Patterns/FrontController.html에서 검색됨
  2. GearyDavid. (날짜 정보 없음). Is Struts Dead? Part III: I can't kill Struts (Struts is Deprecated).http://www.jroller.com/RickHigh/entry/is_struts_dead_part_iii에서 검색됨
  3. ISO 639 Language Codes. (n.d.). Retrieved from W3C: http://www.w3.org/WAI/ER/IG/ert/iso639.htm
  4. RutenbergGuy. (날짜 정보 없음). Pull vs. Push MVC Architecture.Guy Rutenberg: http://www.guyrutenberg.com/2008/04/26/pull-vs-push-mvc-architecture/에서 검색됨
  5. Struts 2 Architecture - Detail information on Struts 2 Architecture. (날짜 정보 없음). http://www.roseindia.net/: http://www.roseindia.net/struts/struts2/struts-2-architecture.shtml에서 검색됨


댓글 없음:

댓글 쓰기