본문 바로가기

[Spring] 내가 만든 MVC 와 Spring MVC 차이

@xuv22025. 6. 23. 16:46

직접 구현한 MVC vs Spring MVC 구조

이전 포스팅까지 우리가 직접 구현했던 MVC 구조는 다음과 같다.

요약하면, 핸들러(컨트롤러)와 핸들러 어댑터를 찾아와서, 해당 핸들러의 비즈니스 로직을 수행하고 값을 모델에 담은 후, 해당 논리뷰 경로를 절대 뷰 경로로 변경하여 뷰로 포워딩하는 형태로 작성하였다.

스프링이 제공하는 MVC 패턴은 어떨까? 다음 그림을 보자

구조는 똑같다. 다만 표현 방식이 약간 다르다.

표현 방식은 다음 표와 같다.

직접 구현한 MVC 스프링 MVC
FrontController DispatcherServlet
handlerMappingMap HandlerMapping
MyHandlerAdapter HandlerAdapter
ModelView ModelAndView
viewResolver ViewResolver
MyView View

Dispatcher Servlet

우리가 만들었던 프론트 컨트롤러 패턴에서 프론트 컨트롤러의 역할을 하던것이 바로 디스패처 서블릿이다.

디스패처 서블릿은 HttpServlet을 상속받아 사용하기 때문에 서블릿으로 동작한다.

그래서 service() 메서드를 시작으로 여러 메서드가 호출 되고 마지막에 doDispatch() 메서드를 통해 우리가 구현했던 모든 작업들이 이루어진다.


Spring MVC 의 동작 순서

동작 순서를 정리 해보자. 이전에 구현한 것과 큰 차이는 없.

1. 핸들러 조회 : 매핑된 핸들러 (컨트롤러) 찾기

2. 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터 조회

3. 어댑터 실행 : 핸들러 어댑터를 실행한다

4. 핸들러 실행 : 어댑터가 실제 핸들러(컨트롤러)를 실행한다.

5. ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView 로 변환해서 반환한다.

6. viewResolver 호출 : 뷰 리졸버를 찾고 실행한다.

7. View 반환 : 뷰 리졸버를 통해 논리 이름을 절대 이름(경로)로 바꾸고 렌더링을 담당하는 뷰 객체를 생성

8. 뷰렌더링 : 뷰를 통해 뷰를 렌더링 한다.

 

xuv2
@xuv2 :: xuvlog

폭싹 늙었수다

목차