클라이언트가 요청을 하면 항상 [공통 로직 + 컨트롤러 로직]을 모두 호출해야 함
(클라이언트의 요청이 오면 서블릿 매핑으로 해당 로직을 직접 호출)
공통 로직을 처리하는 서블릿 하나를 두고 그 서블릿을 통해 필요한 컨트롤러 로직을 호출하도록 함
( 공통 로직을 처리하는 서블릿 = 프론트 컨트롤러 )
서블릿 -> 클라이언트에서 요청이 오면 WAS에서 처음으로 요청이 들어가는 곳
-> 프론트 컨트롤러만 서블릿으로 만들면됨, 나머지 컨트롤러는 서블릿 사용안해도 됨
➡️ 프론트 컨트롤러 서블릿 하나가 클라이언트의 요청을 모두 받음
➡️ 프론트 컨트롤러가 클라이언트의 요청에 맞는 컨트롤러를 찾아 호출
➡️ 프론트 컨트롤러를 통해 요청이 들어가는 입구를 하나로 & 공통 처리
❗ FrontController는 스프링 웹 MVC의 핵심, DispatcherServlet -> FrontController 패턴으로 구현
Adapter는 변환기라 할 수 있고 변환기는 서로 다른 두 인터페이스 사이에 통신이 가능하도록 해준다.
JDBC가 어댑터 패턴을 이용해 다양한 데이터베이스 시스템을 단일한 인터페이스로 조작할 수 있게 해주는 예이다.
Adapter Pattern은 객체를 속성으로 만들어서 참조하는 디자인 패턴
➡️ 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 Adapter를 통해 호출
이러한 어댑터 패턴을 활용하여 프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할 수 있도록 한다.
- 핸들러 어댑터 : 프론트 컨트롤러와 핸들러 중간에서 어댑터 역할을 하는 것
프론트 컨트롤러에서 핸들러(컨트롤러)를 바로 호출하지 않고
프론트 컨트롤러는 핸들러 어댑터를 통해서 핸들러(컨트롤러)를 호출하도록 함
- 핸들러 : 컨트롤러보다 더 넓은 범위, 핸들러 어댑터를 통해서 컨트롤러만이 아니라 해당하는 어댑터만 존재한다면 어떠한 종류든 호출할 수 있음
인프런 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (김영한) 참조