JSP + Servlet을 공부하고 Spring으로 넘어가는 과정에서 FrontController 라는 패턴에 대해서 공부하게 되었다. FrontController가 뭘까?
우선 FrontController
는 말 그대로 Front(앞단의) + Controller(관리자) 라는 말이다.
FrontControlle는 웹 앱으로 들어오는 모든 리소스 요청을 처리해주는 하나의 진입점의 역할을 하게 된다.
사실 이렇게만 해서는 FrontController라는게 이해가 잘 가지 않는다. 좀더 이해가 갈수있도록 MVC패턴에 대해서 먼저 이야기해보도록 하자
MVC 패턴이란 디자인패턴 중 하나로 간단히 말해서 상황에 따라 간편하게 적용해서 사용할 수 있는 개발하는 틀 중 하나이다. 그중 MVC는 Model, View, Controller의 약자로 하나의 애플리케이션을 구성할때 가장 큰 구성요소 세가지를 의미한다.
간단히 처리 순서를 정리하자면
Client
로부터 들어온 요청이 해당하는 Controller로 전해진다.Controller
에서는 비즈니스로직을 처리하기위해 Model을 사용한다.Model
에서 비즈니스 로직을 처리하고(보통 DB, 네트워크 등등 사용) 처리 결과를 다시 Controller에 반환한다.Controller
는 반환 결과를 Session이나 request에 추가한다.View
를 찾고 forward 및 redirect를 하게 된다.View
는 request나 session에 들어있는 데이터를 Client에게 보여준다.전체적인 흐름은 위와 같다. 그렇다면 왜 FrontController라는 새로운 시스템이 등장하게 된것일까?
1
번 상황에서 Client의 요청에 해당하는 Controller가 호출되게 되는데 만약 기능이 많은 애플리케이션이라면 상당히 많은 Controller가 생성되고 그것을 관리하는 것은 굉장히 어려워진다. 또, Controller 중 인증이나 보안과 같은 공통적으로 처리하는 부분은 코드 중복으로 애플리케이션만 무겁게 만드는 상황을 만들게 된다.
이러한 문제를 해결하기위해 등장한 것이 FrontController
이다.
FrontController는 위에서 설명했다시피 Controller의 앞단에 위치한 Controller이다. 앞단에 위치하기때문에 기존 MVC 패턴에서 일어날수있는 코드 중복이나 컨트롤러 관리 측면에서 굉장히 큰 이점이 있다.
전체적인 흐름은 MVC 패턴과 동일하지만 FrontController가 중심에 위치해서 요청에 따른 컨트롤러를 매핑하고 리턴값에 맞는 View로 forward / redirect 해주는 작업을 처리하게 된다.
이러한 FrontController와 유사한 작업을 Spring에서는 DispatcherServlet
이 처리하게 된다.
지금은 간단하게 DispatcherServlet이 FrontController의 역할을 한다는 것만 알아두고 자세한 사항(HandlerMapping, viewResolver)들은 추후 알아보도록 하자!
Spring 너 딱기다려.