개요
Spring MVC란?
Spring MVC는 클라이언트의 요청을 편리하게 처리해주는 프레임워크이다
Spring MVC는 서블릿 기반으로 동작한다
위키백과에 보면 서블릿(Servlet)이란 웹페이지를 동적으로 생성하는 서버측 프로그램을 말한다.
더 구체적으로 말하자면 서블릿은 웹서버의 성능향상을 위해 사용되는 자바 클래스의 일종이다.
서블릿은 JSP와 유사합니다. 하지만 차이가 있습니다.
서블릿은 자바코드(java파일) 안에 HTML을 포함합니다. 반면에 JSP는 HTML안에(HTML파일) 자바 코드를 포함합니다.
Spring MVC 동작 방식과 구성요소
![](https://blog.kakaocdn.net/dn/dcialL/btsjXTIAQOH/kHKXKYqVKDRGAN4nLJH6u1/img.png)
다음은 클라이언트가 요청을 서버에 보냈을 때 Spring MVC가 내부적으로 어떻게 요청을 처리하는 보여주는 그림이다.
번호의 흐름을 설명하자면 다음과 같다.
- 클라이언트가 요청을 서버에 전송하면, DispatcherServlet이라는 클래스에게 요청이 전달한다
- DispatcherServlet은 클라이언트 요청을 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에게 요청한다
- HandlerMapping은 클라이언트 요청에 해당하는 컨트롤러를 찾고 해당 컨트롤러 정보를 다시 DispatcherServlet에게 응답한다.
- Controller 정보는해당 Controller 안에 있는 Handler 메서드 정보도 가지고 있다.
- Handler 메서드란 Controller 클래스 안에 구현된 요청을 처리해주는 메서드이다.
- 요청을 처리할 Controller를 찾았으니 이제 클라이언트 요청을 처리할 Handler 메서드를 찾아서 호출해야 한다. DispatcherServlet은 Handler 메서드를 직접 호출하지 않고 HandlerAdapter에게 Handler 메서드 호출 책임을 넘긴다.
- HandlerAdapter은 DispatcherServlet의 요청과 더불어 Controller 정보를 가지고 해당 Controller의 Handler 메서드를 호출한다.
- Controller의 Handler 메서드는 비즈니스 로직을 처리한 후 리턴받은 Model 데이터를 HandlerAdapter에게 반환한다.
- HandlerAdapter은 반환받은 Model 데이터와 View 이름을 다시 DispatcherServlet에게 반환한다.
- DispatcherServlet은 반환받은 2개의 데이터 중 View 이름을 가지고 ViewResolver에게 해당 View를 달라고 요청한다.
- ViewResolver는 View 정보에 해당하는 View를 찾아서 DispatcherServlet에게 반환한다.
- DispatcherServlet은 ViewResolver에게 받은 View 객체에게 Model 데이터를 넘겨주면서 클라이언트에게 전달할 응답 데이터 생성을 요청한다.
- View는 응답 데이터를 생성해서 다시 DispatcherServlet에게 반환한다.
- DitpatcherServlet은 View로부터 받은 응답데이터를 마지막으로 클라이언트에게 응답한다.
DispatcherServlet의 역할
- DIspatcherServlet은 감독이 지시하는것처럼 직접적으로 요청을 처리하지 않고 다른 구성요소에게 요청을 위임(Delegate)한다.
- 이처럼 애플리케이션 가장 앞단 배치되어 다른 구성요소들과 상호작용하면서 클라이언트 요청을 처리하는 패턴을 Front Controller Pattern이라고 한다
반응형
'웹 개발 > 🍃 SpringBoot' 카테고리의 다른 글
[springboot] 윈도우 환경에서 jar 배포하는법 (0) | 2023.09.10 |
---|---|
[Spring] @Resource 와 @Autowired 차이 (0) | 2023.06.16 |
SpringBoot | 새로고침없이 페이지 부분변경하기(Ajax) (0) | 2023.05.26 |
SpringBoot | Thymleaf Fragment(공통영역처리) (0) | 2023.05.26 |
SpringBoot | 외부 경로 Resource 접근하기, 이미지 업로드 (0) | 2023.05.25 |