Definition of Wiki
위키피디아에서 설명하는 프론트 컨트롤러는 다음과 같습니다.
Front Controller는 웹 애플리케이션 Workflow를 구현하는데 자주 사용되는 방식입니다.
꼭 필요한 것은 아니지만, 각 페이지에서 탐색 책임을 지는 것보다 Front Controller에서 페이지 탐색의 책임을 지는 것이 좋습니다.
그림으로 알아보는 Front Controller
Front Controller 패턴 적용 전
다음 그림과 같이 클라이언트가 각각 다른 요청을 한다고 가정해보겠습니다.
각각의 요청에 대해서 공통되는 로직이 있을 것입니다.
- 로그인 여부 조회
- 권한 검증
- 화면 이동
- 그 외 필요한 검증 및 수행 기능
이러한 공통된 기능들을 각 Controller에서 매번 구현하는 것은 매우 귀찮은 일이며 최대한 코드의 중복은 피해야 합니다.
추가적으로 Controller는 최소한의 책임만을 가지는 것이 좋습니다.
Spring을 사용하지 않고 개발을 하는 경우 화면의 이동이 필요할 경우 개발자가 직접 코드로 작성해주어야 합니다.
(즉 Controller가 가지는 책임이 늘어나게 됩니다.)
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String viewPath = "/WEB-INF/views/new-form.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}
이런 문제를 해결하고자 나타난 패턴이 Front Controller 패턴입니다.
Front Controller 패턴 적용 후
Front Controller 패턴을 적용한 후에는 공통된 로직들은 Front Controller가 담당하게 되었습니다.
각 Controller들은 자신이 맡은 역할들만 처리하면 됩니다.
[Front Controller 패턴의 특징]
- Front Controller 서블릿으로 Client의 요청을 받는다.
- Front Controller가 요청에 맞는 컨트롤러를 찾아서 호출
- 공통 처리 가능
Front Controller의 사용 예시
Java 개발자라면 한 번쯤은 들어봤을 Dispathcer Servlet이 Front Controller 기능을 담당합니다.
참고자료 :
- 김영한 선생님의 스프링 웹 MVC 1편
- Wikipedia
'Spring' 카테고리의 다른 글
NamedParameterJdbcTemplate (0) | 2023.07.01 |
---|---|
JdbcTemplate 사용 방법에 대해서 (0) | 2023.07.01 |
[스프링] 빈 생명주기 콜백에 관하여 (0) | 2023.05.25 |
Spring의 핵심 Concept는 무엇인가 (0) | 2023.05.23 |
Enum Validation (0) | 2023.04.24 |