by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

MVC 패턴의 이해




MVC 패턴의 이해

1. MVC(Model-View-Controller) 패턴 이란

  • MVC 의 핵심은 비즈니스 로직과 프리젠테이션 로직의 분리이다.
  • 레이어별 역할이 뚜렷하기 때문에 협업이 용이하고, 디자인과 코딩의 분리가 자연스럽다.
  • 비즈니스 로직은 재사용 가능하도록 자바 클래스로 독립적으로 존재하며, 뷰는 어떤 것(JSP, Velocity, Freemarker)이든 상관 없어야 한다.
  • JSP 페이지에 비즈니스 로직이 제외되므로 가독성이 증가하고 유지보수가 용이하다.

1.1 Model

  • MVC 모델의 각 계층 사이에서 정보를 전송하는데 사용한다.
  • 객체지향 분석화 모델링의 결과로 나오는 모델을 오브젝트 모델로 활용한다.
  • Model을 사용하면 코드가 이해하기 쉽고, 로직 작성이 수월해지고, 코드 재사용성이 높아진다.
  • DAO 레벨에서 모든 필드를 채워보내는 것이 성능상의 낭비일 수 있고, 모델 객체를 설계하는 것이 모호하다.

1.2 View

  • 사용자 뷰(프리젠테이션) 부분이다.
  • 사용자가 입력한 정보를 컨트롤에게 넘겨주거나, 컨트롤러부터 처리 정보를 반환 받는다.
  • 뷰는 컨트롤러와 비즈니스 로직에 독립적이어야 한다.

1.3 Controller

  • 사용자 Request를 받아 Business Logic에 처리를 요청하는 제어를 담당한다.
  • 제어를 어느 Business Login에 넘길 것인가를 결정하고, 처리 결과를 받아 뷰로 Response하는 역할을 담당한다.

2. Front Controller Pattern

2.1 Front Controller Pattern 이란

  • Clinet요청을 Dispatcher한 곳에서 처리 하여 Controller를 실행하는 구조를 Front Controller Pattern이라 한다.
  • Front Controller는 MVC 패턴의 Controller 역할을 효율적으로 할 수 있도록 각 Framework(Struts2, Spring MVC)에서 구현되어 있다.
  • 아래는 Webwork Framework와 Spring MVC Framework의 Front Controller 설정 예이다.
web.xml
 
<!-- webwork framework 의 front controller -->
<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>


<!-- Spring MVC framework 의 front controller 설정 -->
<servlet>
  <servlet-name>mvc-dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet> 

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

3. Page Controller Pattern

3.1 Page Controller Pattern 이란

  • 수행 될 Controller를 Dispatcher에서 찾지 않고 View를 직접 호출하면, View가 렌더링되기 전에 controller를 직접 호출하는 구조이다.
  • Page Controller는 X,Y,Z 작업을 분리하여 좀 더 모듈화가 된 것으로 보인다.
  • Struts2에서는 <s:action> 커스텀 태그를 이용해 Page Controller를 지원한다.
  • Struts에 익숙하다면 Front Controller 패턴이 매우 익숙하지만, 몇 몇 프레임워크는 캡슐화가 용이하기 때문에 Page Controller를 수용한다.
Struts2에서 Page Controller 예
<%@ taglib prefix="s"   uri="/struts-tags" %>
<s:action name="topBanner" executeResult="true" />

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.