- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=26740980&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
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" />
![]() |
문서정보
- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=26740980&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.