1. v2의 한계
- 컨트롤러가 여전히 HttpServletRequest에 직접 접근해야 함.
- 뷰 경로에 /WEB-INF/views/ 같은 물리 경로를 매번 적어야 함.
2. 개선 아이디어
- Servlet 종속성 제거: 요청 파라미터를 Map<String, String>으로 전달.
- Model 객체 분리: 데이터 전달을 위한 Map<String, Object>를 사용.
- 뷰 이름 논리화: 컨트롤러는 "new-form"처럼 논리 이름만 반환 → 실제 경로는 프론트 컨트롤러가 처리.
3. 핵심 구조
public interface ControllerV3 {
ModelView process(Map<String, String> paramMap);
}
public class ModelView {
private String viewName;
private Map<String, Object> model = new HashMap<>();
// getter, setter
}
4. 동작 흐름
- 프론트 컨트롤러가 request에서 파라미터를 꺼내 paramMap 생성.
- 컨트롤러 실행 → ModelView 반환 (논리 뷰 이름 + model 데이터).
- 뷰 리졸버(viewResolver)가 논리 이름 → 물리 경로 변환.
- MyView로 렌더링.
5. 쉽게 이해하기
- v2까지: 컨트롤러 ↔ 서블릿 객체 직접 연결
- v3부터: 컨트롤러 ↔ 단순 Java 객체(Map, ModelView) 연결 → 테스트 코드 작성 쉬워짐.
- 비유: “서블릿 전용 콘센트”에서 “범용 멀티탭”으로 변경.
6. 회고
이 버전이 되면서, 프레임워크와 구현 코드가 명확히 분리되는 걸 체감했다.
예전에 프로젝트 테스트할 때 HttpServletRequest를 흉내 내느라 고생했는데, 이제 단순 Map만 넘기면 돼서 단위 테스트가 훨씬 쉬워진다.
'Spring' 카테고리의 다른 글
[Spring] MVC 9편 - 프론트 컨트롤러 v5 (0) | 2025.08.12 |
---|---|
[Spring] MVC 8편 - 프론트 컨트롤러 v4 (0) | 2025.08.12 |
[Spring] MVC 6편 - 프론트 컨트롤러 v2 (0) | 2025.08.12 |
[Spring] MVC 5편 - 프론트 컨트롤러 v1 (0) | 2025.08.12 |
[Spring 완전 정복 시리즈 - MVC편] 4편 - 서블릿에서 JSP, 그리고 MVC로 (4) | 2025.08.11 |