nickjoIT

MVC1, MVC2 패턴의 차이점과 Spring MVC 구조 본문

FRAMEWORK/SPRING

MVC1, MVC2 패턴의 차이점과 Spring MVC 구조

nickjo 2016. 2. 12. 11:21

1. MVC

- Model, View, Controller의 줄임말로써, MVC는 사용자와 상호작용하는 S/W를 디자인함에 있어 세가지 요소로 쪼개어 하는 것을 가르킨다.

1) Model

- 프로그램의 내부 상태, 즉 프로그램의 정보(데이터)를 말하는 것이다.


2) Controller

- 데이터와 비즈니스 로직 간의 상호 작용을 뜻함


3) View

- 사용자 인터페이스 요소를 뜻하는데, 유저에게 보여지는 것을 말한다.


2. MVC1

- JSP로 구현한 기존 웹 어플리케이션은 모델 1 구조로 웹 브라우저의 요청을 JSP 페이지가 받아서 처리 하는 구조이다.

- JSP 페이지에 비지니스 로직을 처리 하기 위한 코드와 웹 브라우저에 결과를 보여주기 위한 출력 관리 코드가 뒤섞여 있는 구조

- JSP 페이지 안에서 모든 정보를 표현(view)하고 저장(model)하고 처리(control)되므로 재사용이 힘들고, 읽기도 힘들어 가독성이 떨어진다.


1) 정리

- 정의: 모든 클라이언트 요청과 응답을 JSP가 담당하는 구조

- 장점: 단순한 페이지 작성으로 쉽개 구현 가능하다. 중소형 프로젝트에 적합

- 단점: 웹 애플리케이션이 복잡해지면 유지보수 문제가 발생된다.


3. MVC2

- MVC1 구조와 달리 웹 브라우저의 요청을 하나의 서블릿이 받게 됨

- 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 JSP 페이지로 포워딩


2) 정리

- 정의: 클라이언트의 요청처리와 응답처리, 비지니스 로직 처리하는 부분을 모듈화시킨 구조

- 장점: 처리작업의 분리로 인해 유지보수와 확장이 용이하다.

- 단점: 구조 설계를 위한 시간이 많이 소요되므로 개발 기간이 증가한다.


4. 스프링 MVC 프레임워크

- 스프링이 제공하는 트랜잭션 처리, DI, AOP를 손쉽게 사용

- 스트럿츠2와 같은 프레임워크와 연동이 쉬움


5. 스프링 MVC 주요 구성 요소 및 처리 흐름

- 다른 MVC 프레임워크와 마찬가지로 컨트롤러를 사용하여 요청을 처리

- 스프링에서는 DispatcherServlet이 MVC에서의 컨트롤러(Controller)부분을 처리


 구성 요소

 설명 

 DispatcherServlet

 클라이언트의 요청을 전달받아 요청에 맞는 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성 

 HandlerMapping

 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정 

 Controller

 클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet에게 리턴 

 ModelAndView

 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음 

 ViewResolver

 컨트롤러의 처리 결과를 생성할 뷰를 결정 

 View

 컨트롤러의 처리 결과 화면을 생성, JSP 또는 Velocity 템플릿 파일 등을 뷰로 사용 




6. 스프링 MVC 개발
- 클라이언트에 요청을 받을 DispatcherServlet을 web.xml 파일에 설정
- 클라이언트의 요청을 처리할 컨트롤러 작성
- ViewResolver 설정(컨트롤러가 전달한 값을 이용해서 응답 화면을 생성할 뷰를 결정)
- JSP나 Velocity 등을 이용하여 뷰영역의 코드를 작성


[참고사이트]

http://arihong218.tistory.com/entry/MVC1-vs-MVC2

http://gangzzang.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81Spring-MVC-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%ACModel-View-Controller-Framework-1


'FRAMEWORK > SPRING' 카테고리의 다른 글

@Controller VS, @RestController, ResponseEntity  (0) 2018.02.05
Spring interceptore, Spring filter 차이점  (0) 2016.02.12
AOP  (0) 2016.02.06
Comments