MVC 패턴의 단점 (컨트롤러 단에서 중복이 많고 필요하지 않은 코드들 존재)
단점 1 : 포워드 중복
- View로 이동하는 코드가 항상 중복 호출되어야 한다. 물론 이 부분을 메서드로 공통화해도 되지만, 해당 메서드도 항상 직접 호출해야 된다.
단점 2 : ViewPath 중복
- 이런식으로 ViewPath를 설정해두는데 만일 폴더를 바꾼다면? 거기에 따른 코드를 전체적으로 수정을 해야하는 번거로움이 존재
- 또한 .jsp가 아니라 thymeleaf 같은 다른 뷰로 변경한다면 전체 코드를 다 변경해야 하는 단점 존재
단점 3 : 사용하지 않는 코드
- 위 코드를 사용할 때가 있고 사용하지 않을 때가 있다는 단점.
단점 4 : 공통 처리가 어렵다
- 기능이 복잡해질 수록 컨트롤러에서 공통으로 처리해야 하는 부분이 점점 더 많이 증가하는데 결과적으로 해당 메서드를 항상 호출하고 실수로 호출하지 않으면 문제가 된다. 그리고 호출하는 것도 중복!
총평 : 공통 처리가 어렵다는 문제가 있다.
- 이 문제를 해결하려면 컨트롤러 호출 전에 먼저 공통 기능을 처리해야 한다. 즉, 프론트 컨트롤러(Front Controller)를 도입하면 이런 문제 해결 가능 이것이 스프링 MVC의 핵심.
프론트 컨트롤러
프론트 컨트롤러 도입전
프론트 컨트롤러 도입후
간단하게 보면 서블릿 하나를 앞에 하나 추가한 것으로 보면 된다.
- 프론트 컨트롤러 서블릿 하나로 클라이언트 요청을 받는다.
- 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출
- 공통 처리 가능
- 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다.
스프링 MVC의 핵심이 바로 Front Controller이고 DispatcherServlet이 FrontController 패턴으로 구현되어 있다!