본문 바로가기

백엔드 기술/Spring

Spring MVC 프레임워크 요청 처리 과정

Spring MVC 요청 처리 과정을 알아보기 전, Spring MVC란 무엇인지 먼저 알아보자.

 

[ Spring MVC 란 ? ]

Spring의 모듈 중에는 웹 계층을 담당하는 몇 가지 모듈이 있다.

그 중 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈Spring-webmvc 이다.
이는 웹 프레임워크의 한 종류이기 때문에 Spring MVC 프레임워크 라고도 부른다.

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

 

** 모듈 (Module) **

더보기

Java에서 일반적으로 지원되는 여러 가지 기능들을 목적에 맞게 그룹화하여 묶어 놓은 것.
모듈들은 Java의 패키지 단위로 묶여 있으며, 패키지 안에는 관련 기능을 제공하기 위한 클래스들이 포함. 일반적으로 재사용 가능하도록 라이브러리 형태로 제공된다.

**서블릿(Servlet)**

더보기

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

**서블릿 컨테이너**

더보기

Spring Boot에 내장된 웹 서버 Tomcat처럼 서블릿들이 웹 애플리케이션으로 실행 되도록 해주는 것


[Spring M(Model)VC]

Model은 Spring MVC 기반의 웹 애플리케이션이
클라이언트의 요청을 받고 이 요청에 대한 작업 결과 데이터를 나타내는 말이다.

[Spring MV(View)C]

View는 Model 데이터를 이용해서
웹 브라우저 같은 클라이언트 애플리케이션의 화면에 보이는 리소스를 제공하는 역할.

[View의 형태]
#1. HTML 페이지의 출력
: HTML 페이지에 Model 데이터를 채운 뒤 최종 HTML을 클라이언트 측으로 전송하는 방식.

#2. PDF, Excel 등의 문서 형태로 출력
: Model 데이터를 가공하여 PDF나 Excel 문서로 만들어 클라이언트 측에 전송하는 방식.

#3. XML, JSON 등 특정 형식의 포맷으로 변환
: Model 데이터를 특정 프로토콜 형태로 변환해서 변환된 데이터를 클라이언트 측에 전송하는 방식.

[Spring MVC(Controller)]

클라이언트 측의 요청을 직접적으로 전달받는 엔드포인트로써, Model과 View의 중간에서 상호작용 역할.

즉, 클라이언트 측의 요청을 받아 '비즈니스 로직'을 거친 후 Model 데이터가 생성되면 View로 전달하는 역할

 

 

[Spring MVC 동작 방식] 6가지

#1. DispatcherServlet
클라이언트에 요청 받음.
#HandlerMapping에게 요청을 처리할 수 있는 Controller에 대한 검색을 요청함.
적합한 Controller를 찾았으니 #HandlerAdapter에게 해당 Controller의 호출을 요청함.
넘겨받은 View 정보를 토대로 #ViewResolver에게 View 검색 요청함.
넘겨받은 View 정보와 Model 데이터를 가지고 #View에게 응답 데이터 생성 요청함.
넘겨받은 응답 데이터를 #클라이언트에게 전달함.

#2. HandlerMapping
클라이언트의 요청을 처리할 수 있는 Controller를 찾는 역할.

#3. HandlerAdapter
넘겨받은 적합한 Controller를 호출하여 처리를 위한 Handler 메서드를 호출함.
생성된 Model 데이터와 View 정보를 #DispatcherServlet에게 전달.

#4. Controller
적합한 Handler 메서드를 사용해 클라이언트 요청을 처리하고 Model 데이터 및 View 정보 생성.
**View 정보는 @RestController 애너테이션이 JSON으로 결과를 생성함**

#5. ViewResolver
넘겨받은 View 정보를 토대로 View를 찾아줌.

#6. View

Model 데이터와 View를 가지고 응답 데이터를 생성함.

[정리]

Spring MVC : Spring 모듈 중, 서블릿 API를 기반으로 클라이언트 요청을 처리하는 모듈.

요청 처리 순서
1. 클라이언트 -> DispatcherServlet : 요청 전달
2. DispatcherServlet -> HandlerMapping : 요청 처리할 Controller 검색 요청
3. HandlerMapping -> DispatcherServlet : 요청 처리할 Controller 정보 전달
4. DispatcherServlet -> HandlerAdapter : 전달받은 Controller 호출 요청
5. HanderAdapter -> Controller : 해당 Controller 호출하여 처리 요청.
6. Controller -> HanderAdapter : 요청 처리한 뒤 Model 데이터 생성 및 View 정보 전달.
7. HandlerAdapter -> DispatcherServlet : Model 데이터, View 정보 전달
8. DispatcherServlet -> ViewResolver : View 정보를 토대로 View 검색 요청
9. ViewResolver -> DispatcherServlet : 요청한 정보의 View 전달
10. DispatcherServlet -> View : Model 데이터와 View를 전달하며 응답 데이터 생성 요청.
11. View -> DispatcherServlet : 응답 데이터 완성하여 전달.
12. DispatcherServlet -> 클라이언트 : 응답 데이터 전달.

MVC 장점
Model, View를 분리함으로써, 서로의 의존성을 낮추고 각 계층들이 독립적인 개발을 가능하게 한다.

'백엔드 기술 > Spring' 카테고리의 다른 글

Spring MVC - 트랜잭션  (0) 2023.06.12
JDBC, Spring Data JDBC, JPA, Spring JPA  (0) 2023.04.25
DTO  (0) 2023.04.23
Spring MVC에서 제공하는 CSR, SSR 방식  (0) 2023.04.21
Spring (POJO) VS Spring Boot  (0) 2023.04.21