[Spring]Spring MVC 요청 흐름

Jihun·2022년 4월 18일
0

Spring

목록 보기
2/2
post-thumbnail

[Spring]Spring MVC 요청 흐름

Spring 의 특징 중 하나는 POJO이다. 이전에 Java로 웹 어플리케이션을 만들기 위해서는 Servlet 클래스를 상속받아 구현하는 방식으로 직접 작성했으나 Spring을 이용하면 POJO만으로 웹 어플리케이션 작성이 가능하다.

Servlet에 대한 작업은 Spring Framework가 알아서 처리해주고 개발자는 비즈니스 로직의 구현에 집중하게끔 한 것이다.

1) DispatcherServlet

  • HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)
  • 스프링 프레임워크의 중심이 되는 서블릿으로 클라이언트의 모든 요청을 받아 흐름을 제어
  • web.xml에 정의되어 있으며, 보통 servlet-context.xml 설정 파일을 읽어 컨테이너를 구동
  • DispatcherServlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링해주고 공통 작업을 처리
  • 컨트롤러를 구현해두기만 하면 디스패처 서블릿가 알아서 적합한 컨트롤러로 위임

기존의 방식은 요청 url당 servlet을 생성하고 그에 맞은 Controller에게 요청을 보내주는 코드를 각각 따로 작성해야 했지만,

Front Controller 패턴을 적용하면 하나의 Servlet에게 모든 요청을 받아들여 적절한 Controller로 요청을 위임

2) HandlerMapping

  • 클라이언트의 요청 URL을 처리할 컨트롤러를 결정해 DispatcherServlet에 반환
  • @Controller 어노테이션이 적용된 객체의 @RequestMapping 값을 이용해 요청을 처리할 컨트롤러 탐색

3) HandlerAdapter

  • DispatcherServlet의 처리 요청을 변환해서 컨트롤러에게 전달
  • 컨트롤러의 응답 결과를 DispatcherServlet이 요구하는 형식으로 변환

4) Contoller

  • 실제 클라이언트의 요청을 처리한 뒤, 처리 결과를 void, String, ModelAndView 형태로 반환
  • GET, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리

5) ViewResolver

  • 컨트롤러의 처리 결과를 보여줄 뷰를 결정
profile
slow and steady

0개의 댓글