TIL(Today I Learned)

TIL 37th day(2021.11.27)

keepgoing 2021. 11. 27. 20:40

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

  • 기존 코드를 수정해야할 상황에는 구조를 먼저 바꾸고 이상이 없을 시, 내용을 바꾸는 식으로 단계에 맞게 수정을 해야한다.
    • 점진적 리팩토링