프런트 컨트롤러 패턴#
특징
- 서블릿 하나로 요청을 받음
- 프런트 컨트롤러가 요청에 맞는 컨트롤러 호출 (입구 하나)
- 나머지 컨트롤러는 서블릿 사용 ❌

v1#
기본 구조는 그대도되, Front Controller 추가
v2#
View 분리
V3#
서블릿 종속성 제거
- 요청 파라미터 정보는 자바 Map으로 대신 넘김
- request 객체를 Model로 쓰지 않고 별도의 Model 객체 반환
View 이름 중복 제거
- 컨트롤러는 논리이름만 반환, 물리 위치는 프론트 컨트롤러에서 처리

V4#
- 기본적인 구조는 V3과 같지만, 컨트롤러가 viewname만 반환
- 모델객체는 파라미터로 전달, 뷰 이름만 return
개발자 입장에서 군더더기 없는 코드

V5 (유연한 컨트롤러)#
지금까지는 한가지 컨트롤러 인터페이스만 사용했는데
A는 v3, B는v4 방식으로 개발하고 싶다면?
어뎁터 패턴을 사용
핸들러 어댑터 : 중간에 어댑터 역활을 하는 어댑터
핸들러 : 해당하는 어댑터만 있으면 다 처리할 수 있기 때문에 컨트롤러의 이름을 더 넓은 핸들러로 변경
Instanceof를 통해 bool 반환

스프링 MVC는 이 과정과 거의 같은 구조를 가지고 있다