본문 바로가기

TIL

[Spring MVC] [Spring API계층]

728x90

학습 목표

  • Spring MVC
    • Spring MVC란 무엇인지 이해할 수 있다.

Spring의 모듈 중에는 웹 계층을 담당하는 몇 가지 모듈이 있는데 특히 서블릿 API를 기반으로 클라이언트의 요청을 처리하는 모듈을 Spring-WebMVC(Spring MVC)이다

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

 

서블릿(Servlet)이란?

서블릿은 클라이언트의 요청을 처리하도록 특정 규약에 맞춰 Java코드로 작성하는 클래스 파일이다

그리고 아파치 톰캣(Apache Tomcat)은 이러한 서블릿들이 웹 애플리케이션으로 실행이 되도록 해주는 서블릿 컨테이너 중 하나이다.

 

  • Model : 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라고한다.
    클라이언트의 요청사항을 구체적으로 처리하는 영역을 서비스계층 이라고 하며, 실제로 요청 사항을 처리하기 위해 Java 코드로 구현한 것을 비즈니스 로직 이라고 한다.
  • View : Model 데이터를 이용해서 웹브라우저 같은 클라이언트 애플리케이션의 화면에 보여지는 리소스를 제공하며 JSON포멧 데이터를 생성한다.
  • Controller : 클라이언트 측의 요청을 전달받아 Model과 View의 중간에서 상호작용을 해주는 역할을 담당한다.
  • SpringMVC 흐름 : Client가 요청 데이터 전송 > Controller가 요청 데이터 수신 > 비즈니스 로직 처리 > Model데이터 생성 > Controller에게 Model데이터 전달 > Controller가 View에게 Model데이터 전달 > View가 응답 데이터 생성
  • Spring MVC의 동작방식과 구성요소를 이해할 수 있다.
Spring MVC의 동작 방식 및 구성요소

흐름

  1. 클라이언트가 요청을 전송하면 DispatcherServlet 이라는 클래스에 요청이 전달된다
  2. DispatcherServlet은 클라이언트의 요청을 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에게 요청한다
  3. HandlerMapping은 클라이언트 요청과 매핑되는 핸들러 객체를 다시 DispatcherServlet에게 리턴해준다                                       (핸들러 객체는 해당 핸들러의 핸들러메서드 정보를 포함하고 있고 핸들러메서드는 컨트롤러 클래스 안에 구현된 요청 처리 메서드를 의미한다.)
  4.  요청을 처리할 Controller 클래스를 찾았으니 이제 실제로 클라이언트 요청을 처리할 Handler메서드를 찾아서 호출해야한다(DispatcherServlet은 Handler 메서드를 직접 호출하지 않고, HandlerAdpater에게 Handler메서드 호출을 위임한다)
  5. HandlerAdapter는 DispatcherServlet으로부터 전달 받은 Controller 정보를 기반으로 해당 Controller의 Handler메서드를 호출한다 (이제 전체적인 흐름 반환점을 돌았고 반대로 되돌아가면됨)
  6. Controller의 Handler 메서드는 비즈니스 로직 처리 후 리턴 받은 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의 역할

Spring MVC 요청 처리 흐름을 살펴보면 DispatcherServlet이 굉장히 많은 일을 하는 것처럼 보인다. 클라이언트로부터 요청을 전달받으면 핸들러 매핑 핸들러 어댑터 뷰 리졸버 뷰 등 대부분의 SpringMVC 구성요소들과 상호작용을 하고 있다 하지만 실제로 요청에 대한 처리를 다른 구성 요소들에게 위임하고 있다. 마치 “HandlerMapping(핸들러 매핑)아 Handler Controller 좀 찾아줄래? → ViewResolver(뷰 리졸버)야 View 좀 찾아줄래? → View야 Model 데이터를 합쳐서 콘텐츠 좀 만들어 줄래?”라고 하는 것과 같다 

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

 

Point

  • Spring MVC의 요청 처리 흐름
    • 클라이언트의 요청을 제일 먼저 전달 받는 구성요소는 DispatcherServlet이다.
    • DispatcherServlet은 HandlerMapping 인터페이스에게 Controller의 검색을 위임한다.
    • DispatcherServlet은 검색된 Controller 정보를 토대로 HandlerAdapter 인터페이스에게 Controller 클래스내에 있는 Handler 메서드의 호출을 위임한다.
    • HandlerAdapter 인터페이스는 Controller 클래스의 Handler 메서드를 호출한다.
    • DispatcherServlet은 ViewResolver에게 View의 검색을 위임한다.
    • DispatcherServlet은 View에게 Model 데이터를 포함한 응답 데이터 생성을 위임한다.
    • DispatcherServlet은 최종 응답 데이터를 클라이언트에게 전달한다.
  • DispatcherServlet이 애플리케이션의 가장 앞단에 배치되어 다른 구성요소들과 상호작용하면서 클라이언트의 요청을 처리하는 패턴을 Front Controller Pattern이라고 한다.

 

728x90

'TIL' 카테고리의 다른 글

[SpringFramework][PSA]  (0) 2022.10.22
[Spring][SpringMVC][Controller][패키지구조]  (0) 2022.10.21
[SpringFramework][AOP]  (0) 2022.10.15
[SpringFramework][IoC/DI기초]  (0) 2022.10.15
[SpringFramework][POJO]  (0) 2022.10.14