이 글은 Velog에서 이전한 글입니다. Velog 원문 보기
⭐️ Front Controller 패턴?
MVC 패턴은 공통 처리가 어렵다는 문제가 있다. 이 문제를 해결하기 위해서는 Controller 호출 전에 먼저 공통 기능을 처리해야 한다.Front Controller 패턴은 이 문제를 해결한다.
📌 Front Controller 패턴 도입 전, 후
✔︎ Front Controller 도입 전

Front Controller 도입 전에는 요청 경로마다 View로 이동하는 forward 코드, ViewPath 설정 코드 등 중복 되는 코드가 생긴다. 또한, Controller의 테스트 코드를 작성할 때 Servlet에 의존하여 순수한 자바 코드 단위 테스트가 불가능한 문제가 있다.Front Controller 패턴은 이 문제를 해결해준다.
✔︎ 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 패턴은 유연하지 못하다.
📌 단점을 해결하는 Adapter 패턴

📌 동작 순서
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
틀린 내용에 대한 지적은 언제나 환영합니다!
'Backend > Spring MVC' 카테고리의 다른 글
| ✏️ 요청 매핑 (0) | 2026.07.18 |
|---|---|
| ✏️ Logging (0) | 2026.07.18 |
| ✏️ Spring MVC 시작하기 (0) | 2026.07.18 |
| ✏️ MVC 패턴 (0) | 2026.07.18 |
| ✏️ HttpServlet 요청과 응답 (0) | 2026.07.18 |