Dispatcher Servlet

·2024년 4월 18일

💡Spring MVC의 숨겨진 내부를 파악해보자

그 동안 Spring Boot를 이용하다보니 mvc 구조를 Model, Controller, View로만 이루어져있다고 생각을 했습니다. 그래서 내부적인 구조는 생각을 하지 않았는데 이번에 동작구조를 처음으로 알게 되었고 무작정 개발을 하기보다는 정확한 사용법이 필요하다고 느꼈습니다.

Spring MVC 구조

  • 그동안 생각했던 구조

  • Spring MVC 내부 구조

  1. web.xml를 통해 웹 어플리케이션을 실행시킬 때 함께 들어가야할 설정들의 정의가 되어 있습니다.
  2. 처음 클라이언트에서 요청이 오면 디스패처 서블릿이 해당 요청을 받습니다.
  3. Handler Mapping을 통해 요청에 알맞은 컨트롤러를 찾아냅니다.
  4. 찾아낸 컨트롤러를 Handler Adapter를 통해 해당 컨트롤러의 메서드를 실행시킵니다.
  5. 컨트롤러는 요청을 처리한 뒤 처리한 결과와 해당 뷰 정보(ModelAndView)를 다시 디스패처 서블릿에게 전달합니다.
  6. 받은 정보로 디스패처 서블릿은 View Resolver를 통해 View 파일을 찾습니다.

Dispatcher Servlet이란

  • 클라이언트로부터 들어오는 HTTP 요청을 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러입니다.

1. 요청에 알맞는 Controller에 찾을 수 있는가?

개발을 하다보면 클라이언트에서의 요청이 당연하게 Controller에 들어간다고 생각했지만 어떤 방법을 통해 Controller로 가는지는 모릅니다.

이를 파악하기 위해 우선 Dispatcher Servlet를 필요합니다.
Dispatcher Servlet(servlet-context.xml)에서는 해당 빨간 블록 안에 있는 클래스들을(controller) xml에 다 담습니다.

그 후 요청에 알맞은 컨트롤러를 Dispatcher Servlet안에서 찾아내 컨트롤러를 실행 시킵니다.(Handler Mapping)

2. Controller에서 view를 찾는 방법??

Controller를 보면 아래와 같이 return으로 끝이 나지만 해당 파일을 찾아 보여줍니다.

리턴으로 끝이 나지만 어떤 내부적인 동작으로 파일을 찾아 보여주는 걸까?
해당 방법도 Dispatcher Servlet(servlet-context.xml)에서 어느 경로의 파일로 접근 할 것인지 경로를 지정해줍니.

"/WEB-INF/views/" 경로 안의 ".jsp"파일을 찾아 dispatcher Servlet에게 리턴하는 방법입니다.(/WEB-INF/views/BookWriter.jsp파일 리턴)
-> 클라이언트에게 보여질 view를 찾는 일(ViewResolver)

0개의 댓글