MVC 패턴
은 공통 처리가 어렵다는 문제가 있다. 이 문제를 해결하기 위해서는 Controller
호출 전에 먼저 공통 기능
을 처리해야 한다.
Front Controller
패턴은 이 문제를 해결한다.
Front Controller
도입 전에는 요청 경로마다 View
로 이동하는 forward
코드, ViewPath
설정 코드 등 중복 되는 코드가 생긴다. 또한, Controller
의 테스트 코드를 작성할 때 Servlet
에 의존하여 순수한 자바 코드 단위 테스트가 불가능한 문제가 있다.
Front Controller 패턴은 이 문제를 해결해준다.
Front Conroller
패턴은 공통된 로직을 하나의 Servlet
인 Front Controller
로 처리함으로써 이 문제를 해결한다. Front Controller
패턴을 도입함으로 인해서 개발자는 공통된 로직을 매번 작성하지 않고 핵심 로직
에만 집중할 수 있게 된다.
Front Controller 패턴 특징
Front Controller Servlet
하나로 클라이언트의 요청을 받는다.Front Controller
가 요청에 맞는Controller
를 찾아서 호출한다.Front Controller
를 제외한 나머지Controller
는Servlet
을 사용하지 않아도 된다.공통 로직
처리가 가능하다.
즉,Front Controller
는 공통 코드를 처리하고 요청에 맞는 컨트롤러를 Mapping하는 역할을 한다.
기존 Servlet, JSP, MVC 패턴의 단점을 해결한다
Spring Web MVC의 핵심도 바로 Front Controller이다. Spring Web MVC의 핵심인 DispatcherServlet이 Front Controller 패턴으로 구현되어 있다.
그러나 Front Controller에도 단점이 존재한다.
바로, Front Controller는 한 가지 타입의 Controller만 호출이 가능하다는 것이다.
즉, Front Controller 패턴은 유연하지 못하다.
📌 동작 순서
1. 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(Controller)를 조회한다.
2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
3. 핸들러 어탭터 실행: 핸들러 어탭터를 실행한다.
4. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다.
5. ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
6. viewResolver 호출: 뷰 리졸버를 찾고 실행한다.
7. View반환:뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다.
8. 뷰 렌더링: 뷰를 통해서 뷰를 렌더링한다.
Adapter
패턴은 Front Controller
의 유연하지 못한 단점을 해결한다. Adapter
패턴은 여러 Controller interface
와 호환 가능하도록 Front Controller
와 Controller
사이에 Adapter
를 배치하는 것이다.
이는 돼지코로 비유할 수 있다. Controller A, B interface가 있을 때 각각을 110V, 220V 전기 콘센트로 생각하자. A, B interface를 모두 수용하기 이해서는 110V에 220V 돼지코(Adapter)를 추가해야 한다. 이때 220V 돼지코가 Adapter의 역할을 한다.
출처
김영한님의 Spring MVC 강의
https://jaimemin.tistory.com/1817
틀린 내용에 대한 지적은 언제나 환영합니다!