FrontController 패턴에 대해서 알아보자

2022. 6. 11. 16:18BackEnd(Java)/Spring Boot

Spring을 통하여 개발을 할 때 MVC 패턴을 적용하여 layer를 나누어서 개발을 진행한다.(그림 1 참고)

그러나, MVC 패턴에서의 컨트롤러의 단점이 존재한다. 

 

그림 1 - Front Controller Pattern 도입 전

 

단점

 1. 포워드 중복

 : View layer로 이동하는 코드가 항상 중복 호출된다. 클래스를 만들어 공통화해도 되지만, 결국 호출하는 코드가 각각 들어가게 된다.

RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);

 

 2. ViewPath 중복

 : jsp 경로가 변경되면 전체 코드를 다 변경해줘야 한다.

String viewPath = "/WEB-INF/views/new-form.jsp";

 

3. 테스트 코드 작성 어려움

 : HttpServletRequest, HttpServeltResponse를 사용하는 코드는 TC를 작성하기 어렵다.

HttpServletRequest request, HttpServletResponse response

 

4. 공통 처리 어려움

 : 기능이 복잡해질수록 컨트롤러 layer에서 공통으로 처리해야 하는 부분이 많아질 것이다. 그에 따른 코드가 중복으로 사용하게 되고 변경에 따른 유지보수 비용이 늘어나게 될 것이다.

 

이러한 문제를 해결하기 위해선 각각의 컨트롤러를 호출하기 전에 먼저 공통 기능을 처리해야 한다.

프론트 컨트롤러(Front Controller) 패턴을 도입하여 공통기능을 처리하여 해결할 수 있다!(그림 2 참고)

 

그림 2 - Front Controller Pattern 도입 후

 

FrontController 패턴 특징

  • 스프링 웹 MVC에서 DispatcherServlet이 FronController 역할을 함(FrontController 패턴으로 구현되어 있음)
  • 공통처리 가능
  • 프론트 컨트롤러 서블릿 하나로 모든 Client 요청을 받음
  • 프론트 컨트롤러가 요청에 맞는 컨트롤러 찾아서 호출
  • 스프링 웹 MVC의 핵심이 바로 FrontController 패턴

 

반응형