Spring MVC - 스프링MVC

YUNU·2023년 9월 16일
0

스프링

목록 보기
27/33
post-thumbnail

🪴 Spring MVC


🌱 스프링 MVC

🟦 스프링 MVC 구조

🟦 DispatcherServlet

org.springframework.web.servlet.DispatcherServlet

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

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

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

- 요청 흐름
DispatcherServletHttpServlet을 상속 받아서 사용하고 서블릿으로 동작함
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개의 댓글