MVC 패턴은 하나의 서블릿이나, JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)라는 영역으로 서로 역할을 나눈 것을 말한다.
HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다.
그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다.
뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다.
모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다.
스프링 웹 MVC의 DispatcherServlet이 FrontController패턴으로 구현되어 있다.
스프링 MVC도 프론트 컨트롤러 패턴으로 구현되어 있으며, 스프링 MVC의 프론트 컨트롤러가 바로 디스패처 서블릿(DispatcherServlet)이다.
핸들러 매핑과 어댑터를 더 잘 이해하기 위해서 HttpRequestHandler 핸들러(컨트롤러)는 서블릿과 가장 유사한 형태의 핸들러인데 이 핸들러를 알아보며 이해해 보자.
@Component("/springmvc/request-handler")
public class MyHttpRequestHandler implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
System.out.println("MyHttpRequestHandler.handleRequest");
}
}
/springmvc/request-handler 경로로 접근
1. 핸들러 매핑으로 핸들러 조회
HandlerMapping
을 순서대로 실행해서, 핸들러를 찾는다.BeanNameUrlHandlerMapping
이 실행에 성공하고 핸들러인 MyHttpRequestHandler
를 반환한다.2. 핸들러 어댑터 조회
HandlerAdapter
의 supports()
를 순서대로 호출한다.HttpRequestHandlerAdapter
가 HttpRequestHandler
인터페이스를 지원하므로 대상이 된다.3. 핸들러 어댑터 실행
HttpRequestHandlerAdapter
를 실행하면서 핸들러 정보도 함께 넘겨준다.HttpRequestHandlerAdapter
는 핸들러인 MyHttpRequestHandler
를 내부에서 실행하고, 그 결과를 반환한다.@Controller
는 반환 값이 String이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 렌더링된다.@ResponseBody
와 관련이 있는데, 뒤에서 더 자세히https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
김영한님의 스프링 MVC 강의를 수강하면서 작성한 글입니다.
틀린 부분 등 다양한 피드백 환영합니다.