프론트 컨트롤러 패턴 소개


이전 챕터(서블릿, JSP, MVC패턴) 에서 사용한 MVC 패턴 의 한계점인 공통 처리가 힘들다는 부분을 해결하기 위해서 프론트 컨트롤러 패턴을 사용한다고 했다. 이 프론트 컨트롤러 패턴은 서블릿 하나로 클라이언트의 요청을 받아 이 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출해주는 역할을 함으로써 공통 영역을 한군데 몰아넣을 수 있다. 그렇게 함으로써 여러 컨트롤러에 산재되있던 공통 코드를 프론트 컨트롤러 하나로 모을 수 있고, 더하여 프론트 컨트롤러를 제외하면 서블릿을 상속해서 구현해줄 필요도 없다. 현재 스프링 웹 MVCDispatcherServlet도 이 FrontController 패턴으로 구현되어 있다.

프론트 컨트롤러 도입 - v1


이제 실제로 코드를 작성하며 프론트 컨트롤러 패턴을 적용해 보자.

핵심은 기존 코드의 변경은 최소화 하며 프론트 컨트롤러를 도입하는것으로 한다.

V1 구조

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/13271bdb-caae-4015-9682-67647e33b519/Untitled.png

코드

1. ControllverV1

서블릿과 유사한 인터페이스를 구현해 각 컨트롤러는 해당 인터페이스를 구현함으로써 프론트 컨트롤러에서는 해당 인터페이스를 호출해서 다형성으로써 각각의 구현 컨트롤러와의 의존관계를 끊을 수 있다.

package hello.servlet.web.frontcontroller.v1;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public interface ControllerV1 {

    void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}