순수 스프링 프레임워크의 일부로, 웹 애플리케이션 개발을 위한 MVC(Model-View-Controller) 패턴을 스프링 프레임워크를 통한 개발에 적용하기 위해 구현된 모듈입니다.
스프링 웹 MVC는 웹 애플리케이션에서 사용자 요청 처리 및 응답 생성을 담당하며, DispatcherServlet
을 이용한 프론트 컨트롤러 패턴을 통해 중앙 집중식으로 웹 요청을 관리합니다.
DispatcherServlet: 스프링 웹 MVC의 핵심 컴포넌트로, 이는 내장 서블릿 컨테이너인 톰캣에서 기본 서블릿으로 지정되어 프론트 컨트롤러 역할을 담당합니다. 모든 웹 요청을 받아 적절한 컨트롤러에게 전달하고, 컨트롤러에서 처리된 결과를 받아 응답을 생성합니다.
Handler Mapping: 클라이언트 요청을 실제 처리하는 컨트롤러 메소드에 매핑하는 역할을 수행합니다. 요청의 URL, HTTP 메소드, 요청 파라미터 등을 기반으로 적절한 컨트롤러를 선택합니다.
Controller(Handler): 웹 요청을 처리하는 로직을 구현하는 클래스입니다. 컨트롤러는 주로 비즈니스 로직과 데이터 처리를 담당하는 서비스 계층과 상호 작용하며 클라이언트의 요청을 처리하고 Model에 저장합니다. 또한 요청에 따라 View Name을 지정하기도 하고(뷰 리졸버 사용 -> 서버사이드 렌더링), 직접 View를 반환하기도 합니다(정적 html 등 반환). 만약 렌더링 없이, REST API 설계를 위해 RESTController를 사용한다면 당연하게도 뷰 리졸버는 사용되지 않습니다.
컨트롤러에서 return 값으로
문자열
을 반환하면 뷰 리졸버(ViewResolver)가 화면을 찾아서 처리합니다.
- 스프링부트 템플릿 엔진 기본 viewName 매핑
- resources:templates/ + {viewName} + .html
ViewResolver: 컨트롤러가 반환한 View Name과 모델에 저장된 데이터를 사용하여 실제 View 객체로 해석하는 역할을 담당합니다. View는 클라이언트에게 전달될 응답으로, JSP, Thymeleaf, FreeMarker 등 다양한 템플릿 엔진을 사용하여 생성할 수 있습니다.
Model: 컨트롤러와 뷰 사이에서 데이터를 전달하는 역할을 담당합니다. 컨트롤러는 처리 결과를 Model 객체에 저장하고, View Resolver는 Model 객체에 저장된 데이터를 사용하여 View 객체를 생성합니다.