[Spring] MVC1 vs MVC2

MVC1 패턴과 MVC2 패턴 차이 및 Spring MVC 처리 방식

Posted by Wonyong Jang on March 16, 2020 · 3 mins read

MVC 란?

MVC 란 Model, View, Controller을 가르키며, 사용자 인터페이스와 비즈니스 로직을 분리하여 웹 개발하는 아키텍쳐

1) Model

프로그램의 정보(데이터)를 말한다. JSP 를 통해 예시를 들면 Bean 안에 있는 정보를 model 에 해당한다고 할수 있다.

2) Controller

데이터와 비즈니스 로직간의 상호 작용을 뜻한다.

3) View

사용자 인터페이스 요소를 뜻한다(유저에게 보여지는 것)


1. MVC1 패턴


스크린샷 2020-03-16 오후 10 17 24

JSP 단에서 View와 Controller의 역할을 같이 수행한다.(모든 클라이언트 요청과 응답을 JSP 가 담당)

Bean Model의 역할을 가지고 있다.

- 장점

단순한 페이지 작성으로 쉽게 구현 가능하다(개발 쉬움), 구조가 간단하다

- 단점

애플리케이션이 복잡해지면 개발과 유지보수가 어려워지고 개발자와 디자이너간 역할 분담이 어려워진다.


2. MVC2 패턴


스크린샷 2020-03-16 오후 10 17 29

들어오는 요청을 다루는 서블릿 단이 있고, 이 서블릿 단이 Controller 역할을 수행한다.

Controller는 다음 작업을 결정하고 모든 작업 후 JSP 단에 어떻게 뿌려질지를 결정 한다.

- 장점

어플리케이션이 복잡하여도 controller와 view 의 분리로 개발과 유지보수, 확장이 용이하다.

- 단점

개발이 어렵다(구조 설계를 위한 충분한 시간이 필요하며 높은 수준의 이해가 필요하다)

스프링 MVC 처리 순서

스크린샷 2020-03-16 오후 10 45 11

1) client 가 서버에 어떤 요청을 한다면 스프링에서 제공하는 dispatcherServlet이라는 클래스가 요청을 가로챈다

(web.xml 에 살펴보면 모든 url( / ) 에 서블릿 매핑을 하여 모든 요청을 dispatcherServlet이 가로채게 해둠)

2) 그 후 dispatcherServlet은 handlerMapping에게 어떤 컨트롤러에게 요청을 위임하면 좋을지 물어본다.

(servlet-context.xml 에서 @Controller로 등록한 것들을 스캔해서 찾아줌)

3) 요청에 매핑된 컨트롤러가 있다면 @RequestMapping을 통하여 요청을 처리할 메서드에 도달한다.

4) 컨트롤러에서는 해당 요청을 처리할 Service를 주입(DI)받아 비즈니스 로직을 Service에게 위임한다.

(예를들면 로그인에 필요한 서비스인 LoginService를 @Inject 라는 어노테이션을 통해 주입)

5) Service에서는 요청에 필요한 작업 대부분(코딩)을 담당하며 DB에 접근이 필요하면 DAO를 주입받아 DB처리를 DAO에게 위임한다.

6) DAO 는 sql 쿼리를 날려 DB의 정보를 받아 서비스에게 다시 돌려줌

(이때 보통 VO(dto)를 컨트롤러에서 부터 내려받아 쿼리의 결과를 VO에 담는다) 사용 이유는 효율적인 커넥션 관리와 보안성 때문이다.

7) 모든 로직을 끝낸 서비스가 결과를 컨트롤러에게 넘긴다.

8) 결과를 받은 컨트롤러는 model 객체에 결과물을 어떤 View(jsp) 파일로 보여줄 것인지 등의 정보를 담아 dispatcherServlet에게 보낸다.

9) DispatcherServlet은 viewResolver에게 받은 뷰의 대한 정보를 넘긴다.

10) 여기서 viewResolver는 해당 jsp 를 찾아서(응답할 view를 찾음) DispatcherServlet에게 알려준다.

(servlet-context.xml 에서 suffix, prefix를 통해 /WEB-INF/views/index.jsp 이렇게 만들어주는 것도 ViewResolver)

11) DispatcherServlet은 응답할 View 에게 Render를 지시하고 View는 응답 로직을 처리