Spring Web MVC 구조

DoooongDong·2023년 2월 15일
0

스프링

목록 보기
1/1
post-thumbnail

프론트 컨트롤러(FrontController)

프론트 컨트롤러는 도입하기 전과 도입 후를 비교해서 보면 이해가 쉽습니다.

프론트 컨트롤러 도입 전

프론트 컨트롤러 도입 후

프론트 컨트롤러를 도입하기 전에는 클라이언트들이 ControllerA, ControllerB, ControllerC 를 각각 호출하기 위해서 각각에 대한 Servlet을 사용해야했습니다.

프론트 컨트롤러를 도입 후에는 프론트 컨트롤러 하나로 클라이언트의 요청들을 받고 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출하도록 변화하였습니다.

즉, 입구를 하나로 만들어서 공통 처리가 가능하도록 하였고 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됩니다.

스프링 웹 MVC의 핵심이 바로 FrontController 입니다. 스프링 웹 MVC의 DispatcherServlet이 FrontController 패턴으로 구현되어 있습니다.

DispatcherServlet 구조

  • DispatcherServletHttpServlet을 상속 받아서 사용하고 서블릿으로 동작합니다.

  • 스프링 부트는 DispatcherServlet을 서블릿으로 자동으로 등록하면서 모든 경로 (urlPatterns="/")에 대해서 매핑합니다.

DispatcherServlet 요청 처리 과정

DispatcherServlet으로 요청이 HTTP 요청이 들어옵니다.

  1. 핸들러(controller) 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러 즉, 컨트롤러를 조회합니다.

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

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

  4. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행합니다.

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

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

  7. View 반환: 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환합니다.

  8. View 렌더링: 뷰를 통해서 뷰를 렌더링 합니다.

[Reference]
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

profile
꺾이지 말자 :)

0개의 댓글