본문 바로가기
Develop/Spring

Spring MVC 요청 및 응답 동작 과정

by jaeyoungb 2022. 10. 21.

Spring MVC

서블릿 API를 기반으로 클라이언트의 요청을 처리하는 모듈을 spring-webmvc라 하고, 이를 줄여서 Spring MVC라고 부른다.

( 서블릿이란 클라이언트의 요청을 처리하도록 특정 규약에 맞춰 Java 코드로 작성하는 클래스 파일로, 아파치 톰캣이 서블릿들을 웹 애플리케이션으로 실행되도록 해주는 서블릿 컨테이너 중 하나이다 ) 

* Spring MVC는 클라이언트의 요청을 편리하게 처리해주는 프레임워크이다.

 

Model

  • Spring MVC의 'M'
  • Spring MVC 기반의 웹 애플리케이션이 클라이언트의 요청을 받으면, 요청 사항을 처리하기 위한 작업을 하고, 클라이언트에게 처리한 작업의 결과 데이터를 Model이라 한다.

View

  • Spring MVC의 'V'
  • Model 데이터를 이용해, 웹 브라우저 같은 클라이언트 애플리케이션의 화면에 보여지는 리소스를 제공하는 역할

Controller

  • Spring MVC의 'C'
  • 클라이언트의 요청을 직접적으로 전달받는 엔드포인트(endpoint)로, Model과 View 사이에서 상호작용 역할
    ( 쉽게 말해, Model 데이터를 View로 전달하는 역할 )

 

 

Spring MVC 요청 및 응답 동작 과정 / 출처 : https://galid1.tistory.com/503

 

  1. 클라이언트가 요청을 전송하면 DispatcherServlet 클래스에 요청이 전달
  2. DispatcherServlet은 클라이언트의 요청을 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에게 요청
  3. HandlerMapping은 클라이언트 요청과 매핑되는 핸들러 객체를 다시 DispatcherServlet에게 리턴
    ( 핸들러 객체는 해당 핸들러의 핸들러 메서드 정보를 포함. 핸들러 메서드는 Controller 클래스 안에 구현된 요청 처리 메서드를 의미 )
  4. DispatcherServlet은 핸들러 메서드를 직접 호출하지 않고, HandlerAdpater에게 핸들러 메서드의 호출을 위임
  5. HandlerAdapter는 DispatcherServlet으로부터 전달받은 Controller 정보를 기반으로 해당 Controller의 핸들러 메서드를 호출
  6. Controller의 핸들러 메서드는 비즈니스 로직 처리 후, 리턴 받은 Model 데이터를 HandlerAdapter에게 전달
  7. HandlerAdapter는 전달받은 Model 데이터와 View 정보를 다시 DispatcherServlet에게 전달
  8. DispatcherServlet은 전달받은 View 정보를 다시 ViewResolver에게 전달해서 View 검색을 요청
  9. ViewResolver는 View 정보에 해당하는 View를 찾아서 View를 다시 리턴
  10. DispatcherServlet은 ViewResolver로부터 전달받은 View 객체를 통해, Model 데이터를 넘겨주면서 클라이언트에게 전달할 응답 데이터 생성을 요청
  11. View는 응답 데이터를 생성해서 다시 DispatcherServlet에게 전달
  12. DispatcherServlet은 View로부터 전달받은 응답 데이터를 최종적으로 클라이언트에게 전달

 

 

* DispatcherServlet은 실제로 요청에 대한 처리를 다른 구성 요소들(HandlerMapping, HandlerAdapter, ViewResolver, View 등)에게 위임(Delegate)하고 있다.

* DispatcherServlet이 애플리케이션의 가장 앞단에 배치되어, 다른 구성 요소들과 상호작용하면서 클라이언트의 요청을 처리하는 패턴을 Front Controller Pattern이라 한다.

 

 

Ref)

https://itvillage.tistory.com/

'Develop > Spring' 카테고리의 다른 글

Spring MVC - API 계층  (0) 2022.10.30
GET, POST 메서드 요청 시, DTO 객체에는 setter가 필요한가?  (0) 2022.10.23
Assert.assertTrue(); 안됨 해결  (0) 2022.07.28
@Autowired 란?  (0) 2022.07.27
Repository 란?  (0) 2022.07.27