-
MVC 한계
- 포워드 중복, 사용하지 않는 코드, 공통 처리가 어렵다
MVC 프레임워크 생성
- FrontController 생성
- ViewDispatcher 메서드 생성
- 서블릿을 사용하지 않고 컨트롤러 생성, 논리 뷰 이름만으로 물리뷰 호출,
- HTTP 요청 -> FrontController에서 컨트롤러를 조회해서 매핑 -> 컨트롤러 호출 -> ModelView 반환(논리 뷰 이름 반환)
- viewResolver에서 논리 뷰를 물리 뷰로 반환
- MyView에서 request.getAttribute()로 데이터를 조회하고 모델의 데이터를 꺼내서 request.setAttribute()에 담아둔뒤
- JSP로 포워드해서 JSP를 렌더링한다.
FrontController 패턴 특징
- 프론트 컨트롤러 서블릿 하나로 클라이언트 요청을 받음,
- 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출
- 입구를 하나로!
- 공통 처리 가능
- 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도됨.
서블릿 종속성 제거
- controller에서는 서블릿 기능이 꼭 필요하지 않다. 따라서, Map으로 파라미터 정보를 대신 넘기도록 설정할 수 있다.
- request 객체를 model로 만들어서 반환할 수 있다.
- 서블릿 종속성을 제거함으로써 테스트 코드 작성이 수월해진다.
궁금한점
- ModelView process(Map<String, String>) -> 왜 String이 두번 들어가는가?
- 입력되는 파라미터 값의 타입이 모두 String이기 때문,
- Map<String, Object>의 경우 View 내에서 사용될 객체를 받기 위한 타입
- 즉, member를 저장하기 위한 model 선언인 request.setAttribute("member", member);와 같다
Tip
- 기존 코드를 수정해야할 상황에는 구조를 먼저 바꾸고 이상이 없을 시, 내용을 바꾸는 식으로 단계에 맞게 수정을 해야한다.