1.1 Why MVC is important

1.1.1 Classic MVC becomes outdated

  • MVC 3개의 레이어로 구성되어 레이어별 역할이 뚜렷하기 때문에 협업이 용이하고, 디자인과 코딩의 분리가 자연스럽다.
  • JSP 페이지에 비즈니스 로직이 제외되므로 가독성이 증가하고 유지보수가 용이하다.
  • M(Model) : BO (Business Object), DO(Domain Object), VO (Value Object) ...
  • V(View) : HTML(정적인 컨텐츠) , JSP(동적인 컨텐츠)..
  • C(Controller) : (ex) Servlet

  • View에 있는 Buttons을 클릭하면, Controller는 View로부터 이벤트를 받아 Model에서 로직을 수행하고
    View는 Model로부터 전달된 model-change 이벤트를 받아 데이터를 갱신한다.

1.1.2 Classic MVC gets an update: the Front Controller


  • 웹 버전의 MVC는 Front Controller 패턴을 구현한다.
  • 웹 버전의 MVC에서 View는 Controller를 직접 호출하지 않고, web request기반의 URL 매핑을 이용하여 호출한다.
  • request URL을 수행될 command instance로 보내기 위해 dispatcher를 사용한다.
  • 모든 request는 dispatcher를 통해 Controller에 전달된다.
  • Model에서 View에 직접 model-change 를 notify할 수 없고, Controller를 통해서 View에 오직 최종 요청의 결과를 보내준다.

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>


<servlet>
    <servlet-name>webwork</servlet-name>
    <servlet-class>
        com.opensymphony.webwork.dispatcher.ServletDispatcher
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>webwork</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

1.1.3 MVC evolves: the Page Controller

  • 수행 될 controller를 dispatcher를 이용하여 찾지 않고 view를 직접 호출하면, view가 렌더링되기 전에 controller를 직접 호출한다.
  • Page Controller는 X,Y,Z 작업을 분리하여 좀 더 모듈화가 된 것으로 보인다.
  • WebWork에서는<webwork:action> 커스텀 태그를 이용해 Page Controller를 지원한다.
  • Struts에 익숙하다면 Front Controller 패턴이 매우 익숙하지만, 몇 몇 프레임워크는 캡슐화가 용이하기 때문에 Page Controller를 수용한다.

문서에 대하여

  • 이 문서의 내용은 Webwork In Action 교재를 스터디 하면서 정리한 내용 입니다.
  • 최초작성자 : 김정식
  • 최초작성일 : 2007년 9월 11일
  • 이 문서는 오라클클럽 자바 웹개발자 스터디 모임에서 작성하였습니다.
  • 이 문서를 다른 블로그나 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^