Spring MVC - 스프링MVC

YUNU·2023년 9월 16일

스프링

목록 보기
27/33
post-thumbnail

🪴 Spring MVC


🌱 스프링 MVC

🟦 스프링 MVC 구조

🟦 DispatcherServlet

org.springframework.web.servlet.DispatcherServlet

스프링 MVC ➡️ 프론트 컨트롤러 패턴으로 구현

스프링 MVC의 프론트 컨트롤러 ➡️ DispatcherServlet

SpringBoot는 DispatcherServlet을 서블릿으로 자동 등록 + 모든 경로에 대해서 매핑

- 요청 흐름
DispatcherServlet도 HttpServlet을 상속 받아서 사용하고 서블릿으로 동작함
DispatcherServlet의 부모는 FrameworkServlet, FrameworkServlet에서 service()를 오버라이드 해둠

서블릿이 호출되면 HttpServlet이 제공하는 service()가 호출됨
FrameworkServlet.service()를 시작으로 여러 메서드가 호출되면서 DispatcherServlet.doDispatch()가 호출됨
DispatcherServlet.doDispatch(HttpServletRequest request, HttpServletResponse response)
{
  1. 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러를 조회
  2. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터 조회
  3. 핸들러 어댑터 실행 
  4. (핸들러 어댑터를 통해)핸들러 실행 : 핸들러 어댑터가 실제 핸들러 실행
  5. ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환
  6. viewResolver를 통해 뷰 찾음 
  7. View 반환 : viewResolver는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환
  8. View 렌더링 : 뷰를 통해 뷰를 렌더링
}

🟦 Handler Mapping & Handler Adapter

특정 컨트롤러가 호출되려면 HandlerMapping과 HandlerAdapter가 필요

🔹 HandlerMapping

  • Handler Mapping에서 컨트롤러를 찾을 수 있어야 함
    ex) SpringBean의 이름으로 Handler를 찾을 수 있는 Handler Mapping 필요

🔹 HandlerAdapter

  • Handler Mapping을 통해서 찾은 Handler를 실행할 수 있는 Handelr Adapter 필요
    ex) 해당 인터페이스를 실행할 수 있는 Handler Adapter를 찾고 실행

🔹 SpringBoot가 자동 등록하는 HandlerMapping & HandlerAdapter

  • HandlerMapping
    0순위 : RequestMappingHandlerMapping
    -> 어노테이션 기반의 컨트롤러인 @RequestMapping에서 사용

    1순위 : BeanNameUrlHandlerMapping
    -> 스프링 빈의 이름으로 핸들러를 찾음

  • HandlerAdapter
    0순위 : RequestMappingHandlerAdapter
    -> 어노테이션 기반의 컨트롤러인 @RequestMapping에서 사용

    1순위 : HttpRequestHandlerAdapter
    -> HttpRequestHandler 처리

    2순위 : SimpleControllerHandlerAdapter
    -> Controller 인터페이스 처리(@Controller X)

🔹 Controller 호출 순서

  1. Handler Mapping으로 Handler 조회
  2. Handler Adapter 조회
  3. Handler Adapter 실행

🟦 View Resolver

View를 어떤 것을 사용할지 설정하는 역할을 하는 것

SpringBoot는 InternalResourceViewResolver라는 View Resolver를 자동으로 등록

application.properties에 등록된 spring.mvc.view.prfix, spring.mvc.view.suffix 설정 정보를 사용해서 등록

🔹 SpringBoot가 자동으로 등록하는 View Resolver

   1순위 : BeanNameViewResolver
   ->Spring Bean 이름으로 View를 찾아서 반환

   2순위 : InternalResourceViewResolver
   -> JSP를 처리할 수 있는 View 반환

🔹 View Resolver 동작 방식

  1. Handler Adapter 호출
    핸들러 어댑터 통해 논리 뷰 이름을 획득
  2. ViewResolver 호출
  3. 해당 ViewResolver를 통해 View 반환
  4. view.render() 호출 -> JSP 호출
    ( Thymeleaf 뷰 템플릿을 사용하려면 ThymeleafViewResolver 등록해야
      -> 라이브러리만 추가하면 스프링부트가 자동화해줌 )


인프런 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (김영한) 참조

profile
DDeo99

0개의 댓글