2023.02.04 - [🐢 Study/Spring boot] - 1. Spring Web MVC(1) - Servlet
MVC 패턴
- Model, View, Controller 역할에 따라 크게 세 가지로 분류하고 각 역할을 수행하도록 패턴으로 만든 것.
Controller
사용자의 요청을 받아 어떻게 처리할지 결정하는 역할로 요청을 분석하는 역할을 담당한다.
데이터를 처리하는데 필요한 HTTP 쿼리스트링이나 헤더, 바디 같은 정보를 HTTP메시지에서 파싱하여 추출한다.
적절한 Model이나 요청에 적합한 View에 전달하는 역할을 한다.
Model
컨트롤러에서 전달받은 사용자 요청 데이터를 가공하거나 데이터 저장소에서 데이터를 처리하는 작업을 담당.
웹 애플리케이션의 비즈니스 로직을 처리하는 역할을 한다.
View
사용자에게 응답하는 화면을 담당한다.
웹 애플리케이션은 직접 화면을 보여주는 역할은 하지 않고 사용자가 요청한 Accept헤더에 적합한 MIME문서를 전달한다.
그러면 클라이언트는 MIME문서를 파싱하여 적합한 화면으로 렌더링한다. 그러므로 View는 사용자에게 응답하는 메시지 포맷을 결정하거나 Model 데이터를 HTML, XML, JSON 메시지로 만든다.
DispatcherServlet
DispatcherServlet 은 프론트 컨트롤러 패턴으로 디자인 되어있다.
프론트 컨트롤러는 모든 사용자의 요청을 받고 이 요청을 분석한 후 적절한 컴포넌트로 전달하는 오케스트레이션 역할을 한다. 또한 웹 애플리케이션의 전체 흐름을 조정하는 역할도 한다.
Handler Mapping
- o.s.web.servlet.HandlerMapping 인터페이스를 구현한 컴포넌트다.
- 사용자의 HTTP 요청 메시지를 추상화한 HttpServletRequest 객체를 받아사용자 요청을 처리하는 핸들러 객체를 조회할 수 있는 getHandler() 메서드를 제공한다.
- 스프링 부트 프레임워크의 기본 설정으로 실행시 애너테이션 기반으로 동작하는o.s.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 구현체가 실행된다.
- 이 구현체는 @RequestMapping 애너테이션의 속성정보를 로딩할 수 있다.
HandlerAdapter
- o.s.web.servlet.HandlerAdapter 인터페이스를 구현한 컴포넌트다.
- 사용자의 요청과 응답을 추상화한 HttpServletRequest, HttpServletResponse 객체를 컨트롤러 클래스의 메서드에 전달하는 오브젝터 어댑터 역할을 한다.
- ModelAndView 객체를 리턴하는 handle() 메서드 제공.
- @RequestMapping 애너테이션을 처리하는 RequestMappingHandlerMapping 구현체와 한쌍으로 ReqeustMappingHandlerAdapter 구현체를 많이 사용한다.
ModelAndView
- 컨트롤러 클래스에서 처리한 결과를 어떤 뷰에서 처리할지 결정하고 뷰에 전달할 데이터를 포함하는 클래스
ViewResolver
문자열 기반의 View 이름을 실제 View구현체로 변경한다.
다양한 템플릿 뷰 엔진이 있으며, 각각에 적합한 ViewResolver 구현체는 스프링 프레임워크에서 제공한다.
ex_) JSP : InternalResourceViewResolver, Velocity : VelocityViewResolver, Freemarker: FreemarkerViewResolver
이 구현체를 이용하여 스프링 빈으로 정의한다.