Spring

Spring MVC 구조 정리

꾸준함. 2021. 6. 9. 23:26

복습

기존에 작성한 Front Controller 패턴 게시물을 보고 오면 이해하는데 도움이 될 것입니다!
(https://jaimemin.tistory.com/1817)

 

Spring MVC 구조

  • Front Controller 패턴과 동일한 구조
  • Front Controller 역할을 Spring MVC 구조에서는 Dispatcher Servlet이 맡음
  • 전체적인 플로우는 아래와 같음
    • HTTP 요청
    • Handler 조회
    • Handler를 처리할 수 있는 HandlerAdapter 조회
    • Handler 어댑터에서 Handler 호출
    • ModelAndView 반환
    • ViewResolver 호출 (JSP의 경우 InternalResourceViewResolver, 타임리프의 경우 ThymeleafViewResolver)
    • View 반환
    • View 렌더링
    • HTML 응답

 

Front Controller 패턴 그림과 동일


* 스프링 MVC의 강점 중 하나는 위 그림의 기능들이 대부분 인터페이스로 제공되기 때문에 DispatcherServlet의 코드를 변경하지 않더라도 기능 변경 및 확장이 가능하다는 점

 

DispatcherServlet 클래스 코드

  • 코드 흐름을 보시면 위 그림의 흐름과 동일하게 진행되는 것을 확인할 수 있습니다.
  • 한글로 작성된 주석 참고


 

비고

DispatcherServlet 추가 내용

  • 부모 클래스에서 HttpServlet 클래스를 상속 받아서 사용하고, 서블릿으로 동작
  • Spring Boot는 DispatcherServlet를 서블릿으로 자동으로 등록하면서 모든 경로에 대해서 매핑 즉, urlPatterns="/"에 대해 매핑
  • 별도 Controller가 선언이 되어있고 자세한 경로가 있을 경우 해당 Controller들이 우선순위 더 높음

 

Controller가 호출되기 위한 2가지 조건

  • 핸들러 매핑에서 해당 컨트롤러를 찾을 수 있어야하고
  • 핸들러 매핑을 통해서 찾은 핸들러를 실행할 수 있는 핸들러 어댑터가 필요
  • 실무에서는 대부분 RequestMappingHandlerMapping, RequestMappingHandlerAdapter를 사용


* 스프링은 이미 필요한 핸들러 매핑과 핸들러 어댑터가 대부분 구현되어있으므로 직접 개발할 확률은 희박함
* 핸들러 매핑에 대한 추가 내용 (https://www.baeldung.com/spring-handler-mappings)
* 핸들러 어댑터에 대한 추가 내용 (https://www.baeldung.com/spring-mvc-handler-adapters)

 

출처

인프런 스프링 MVC 1편 (김영한 강사님)

반응형