[Spring MVC] 프론트 컨트롤러 패턴

Hoon·2022년 11월 15일

Spring

목록 보기
14/18

MVC 패턴의 문제점

MVC 패턴은 다음과 같은 문제가 있다.

  • 하나의 View마다 하나의 컨트롤러가 매핑되어서 컨트롤러마다 일일이 서블릿이 JSP에 forward하는 코드가 중복이 된다.

  • 뷰 템플릿을 다른 뷰 템플릿으로 변경한다면 전체 viewPath 코드를 다 변경해야 한다.

  • response 요청이 필요하지 않은 경우에는 response 코드가 사용되지 않는다.

  • HttpServletRequest, HttpServletResponse를 사용하는 테스트 코드를 작성하기 쉽지 않다.

문제 코드

// 컨트롤러
@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save")
public class MvcMemberSaveServlet extends HttpServlet {
    
    
    private MemberRepository memberRepository = MemberRepository.getInstance();
    
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) // response 사용 안함
            throws ServletException, IOException {
        
        ... 비즈니스 로직
        
        // JSP에 forward하는 코드
        String viewPath = "/WEB-INF/views/save-result.jsp"; // 뷰 템플릿을 변경할때 일일이 바꿔야 함.
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request, response);
    }
}

프론트 컨트롤러 패턴 (Front Controller Pattern)

이러한 문제점을 해결하기위해 프론트 컨트롤러라는 패턴이 있다.

프론트 컨트롤러는 프론트 컨트롤러만 서블릿으로 요청을 받아서 일일이 입력하는 중복코드를 없애고 요청마다 알맞은 컨트롤러를 호출하게 됨으로써 컨트롤러가 서블릿 코드를 신경쓰지 않아도 되게 된다.

스프링 MVC는 이러한 프론트 컨트롤러 패턴을 띠고 있다.

Reference

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (김영한님)

profile
개발이 즐거워

0개의 댓글