1. Front Controller 패턴이란?
정의
모든 요청을 단일 진입점(Controller) 으로 받아서, 적절한 처리 로직(Controller, Service, DAO 등)에 분기(dispatch) 하는 아키텍처 패턴
주요 역할
- 요청 URI 분석
- 어떤 컨트롤러나 커맨드로 보낼지 결정
- 응답 방식(Forward, Redirect) 결정
- 예외 및 404 처리
2. FrontController 아키텍처
[Client]
↓ 요청
[FrontControllerServlet (Front Controller)]
↓ URI 분기
[Command 구현체 (Controller 역할)]
↓
[Service → DAO → DB]
↑
[View(JSP)] ← Forward/Redirect ← FrontController
핵심 구성 요소
| 구성 요소 |
역할 |
| FrontControllerServlet |
모든 요청의 진입점 (@WebServlet("/")) |
| Command 인터페이스 |
각각의 요청 처리 방식 정의 (execute()) |
| Map<String, Command> |
URI에 따라 알맞은 로직 연결 |
| /WEB-INF/views/*.jsp |
실제 사용자에게 보여지는 화면 (View) |
| "redirect:/경로" |
리다이렉트 요청 처리 |
3. DispatcherServlet이란?
- DispatcherServlet 은 공통 기능을 제공하는 부모 클래스
- FrontControllerServlet 이 그걸 상속해서 앱별로 기능 확장
아키텍처
[ Client ]
↓
┌────────────────────────┐
│ DispatcherServlet │ (Front Controller)
└────────────────────────┘
↓ 분석
getMap / postMap
↓
┌───────────────┐
│ Command 구현체 │ ex) TodoController#getList
└───────────────┘
↓
Service → DAO → DB
↑
Forward / Redirect View (JSP)
4. Spring MVC와 비교
| Java Servlet 기반 (직접 구현) |
Spring MVC |
| FrontControllerServlet 직접 구현 |
DispatcherServlet 자동 제공 |
| Command 인터페이스 |
@Controller, @RequestMapping, @GetMapping, ... |
| Map<String, Command> 수동 관리 |
URL → 메서드 매핑 자동 관리 (핸들러 매핑) |
| View 이름 → 직접 prefix/suffix 조립 |
ViewResolver 자동 처리 |
| request/response 수동 처리 |
파라미터 자동 바인딩, 모델 관리 지원 |
| JSP만 지원 |
JSP, Thymeleaf, JSON 등 다양한 View 지원 |
5. Spring MVC 동작 순서
[사용자 요청] → DispatcherServlet →
1. HandlerMapping: 어떤 컨트롤러의 어떤 메서드가 이 요청을 처리할지 결정
2. HandlerAdapter: 해당 메서드 실행
3. Controller: 비즈니스 로직 처리 후 viewName 반환
4. ViewResolver: viewName으로 실제 뷰(JSP, Thymeleaf 등) 선택
5. View: 사용자에게 화면 응답
6. 비교
| 기능 |
직접 구현 (Servlet) |
Spring MVC |
| 요청 처리 |
FrontControllerServlet |
DispatcherServlet |
| 라우팅 |
Map + URI 수동 분기 |
어노테이션 자동 처리 |
| 요청 핸들러 |
Command 객체 |
@Controller, @RequestMapping |
| View 처리 |
forward/redirect 수동 처리 |
자동 ViewResolver |
| 개발자 편의성 |
낮음 (직접 다 구현) |
높음 (자동 바인딩, 검증 등 포함) |
Front Controller vs DispatcherServlet
| 항목 |
설명 |
| Front Controller (패턴) |
하나의 진입점에서 모든 요청을 받아 처리하는 아키텍처 패턴 이름입니다. 디자인 패턴의 개념 |
| DispatcherServlet (Spring) |
Spring에서 Front Controller 패턴을 구현한 클래스입니다. 즉, Front Controller 패턴의 구현체 |
정리: DispatcherServlet은 Front Controller 패턴의 대표적인 구현체 (Spring MVC에서 사용).