[Spring] MVC 모델 개념정리

2021. 1. 20. 00:49💻 개발/Spring

1. Spring MVC 구조 이해하기

Spring의 MVC모델은 무엇인지, 주요 클래스들은 어떤 역할을 하는지 정리해보자 

 

먼저, 위의 그림에서 주요 클래스들의 역할을 간단히 정리한 것이다.

클래스 기능
DispatcherServlet 유일한 서블릿 클래스로서 모든 클라이언트의 요청을 가장 먼저 처리하는 FrontController 
HandlerMapping 클라이언트의 요청을 처리할 Controller 매핑
Controller 실질적인 클라이언트의 요청 처리
ViewResolver Controller가 리턴한 View 이름으로 실행될 JSP경로 완성

그림에 나와있는 번호 순서대로 정리해보면,

 

1. DispatcherServlet이 클라이언트(web 브라우저)로부터 들어오는 모든 요청을 받는다.

2. DispatcherServlet은 HandlerMapping Bean객체에게 어떤 컨트롤러에게 요청을 위임하면 좋을지 물어본다.
(이때 HandlerMapping은 xml에서 @Controller로 등록한 것들을 스캔해서 찾아놨기 때문에 어느 컨트롤러를 사용해야하는지 알고있다.)

3. DispatcherServlet은 검색된 Controller를 실행하여 클라이언트의 요청을 처리한다.

4. Controller에서는 해당 요청을 처리할 service를 주입(DI)받아 비즈니스 로직을 service에 위임한다. 수행 결과로 얻어낸 Model 정보와 Model을 보여줄 View정보(jsp파일)를 ModelAndView 객체에 저장하여 DispatcherServlet에게 보낸다.

5. DispatcherServlet은 전달받은 결과를 보여줄 view를 찾기위해 ViewResolver Bean객체를 사용한다. ViewResolver는 ModelAndView 객체 내부에 있는 view를 찾아서 jsp를 만드는 등 결과물을 구현해서 DispatcherServlet에게 다시 리턴한다.

6. 최종적으로, DispatcherServlet은 클라이언트에게 렌더링된 view를 응답한다.

 

2. 기존의 서블릿과 DispatcherServlet의 차이점은?

기존의 서블릿 방식은 요청 url마다 서블릿을 생성하고, 그에 맞는 Controller에게 요청을 보내주는 코드를 각각 따로 작성해야했다.
하지만 위의 그림처럼 DispatcherServlet 서블릿은 자신이 모든 요청을 다 받고, 적절한 Controller로 요청을 위임시킨다.
이때 DispatcherServlet가 가장 앞단에 온다하여 FrontControllerServlet이라고 부른다. (spring에서 정의한 용어이다)
이렇게 한곳에서 사용자의 요청을 컨트롤할 수 있는것에는 어떤 장점이 있을까?
기본적으로는 사용자의 모든 요청에 대해 인코딩처리, 에러페이지 처리, 공지사항 등 처리를 한곳에서 일괄적으로 할 수 있게된다.
모든 요청을 담당해주기 때문에 효율적으로 요청을 처리할 수 있다.