이번 시간에는 프론트 컨트롤러 이야기를 해볼 것. 우리는 앞에서 코드로 Servlet 컨테이너를 띄우고 Servlet 을 등록해 우리가 처음 만들었던 Hello 컨트롤러와 거의 유사한 방식으로 동작하는 코드를 만들어보았다. 그런데 Servlet 은 요청마다 직접 다 매핑해야 했다. 만약 /hello 는 이를 담당하는 Servlet 을 따로 만들어 처리했는데 유저를 등록하는 기능이 추가적으로 필요하다면 /user 는 User 를 등록하는 Servlet 을 하나 Object 로 만들어야 하고, 여러 개의 Servlet 을 각각 URL 에 매핑하는 방식으로 구성할 수 있다. 그렇다면 이렇게 서블릿만으로 웹 개발이 다 되는 거라고 생각할 수 있다.
But 사실 꽤 초기부터 이러한 서블릿 접근 방식을 개선할 필요가 있었다.
→ 이를 개선하기 위한 첫 번째 시도가 이번 시간에 다룰 FrontController 의 등장이다.

FrontController 란 원래는 Servlet 을 각 URL 에 맞게 매핑을 해 각기 다른 Servlet 이 다른 URL 로 들어오는 요청을 맡아 처리하는 방식으로 동작해야 하는데, 그렇게 하지 말고 우리가 모든 Servlet 에 공통적으로 등장하는 처리 코드를 어떠한 중앙화된 제일 앞단에 존재하는 Controller라 이름을 붙인 Object 에서 이 공통적인 작업을 다 처리하고 요청의 종류에 따라 이 로직을 처리하는 다른 Object한테 요청을 다시 위임해 전달하는 방식으로 전체 애플리케이션이 돌아가게 만드는 것.
→ 공통적인 부분을 제일 앞단에서 먼저 처리하게 하는 것. 물론 꼭 앞단 뿐만 아니라 그 뒤에서 각 로직을 처리한 후 또 후처리 작업을 하는데에도 공통적으로 등장하는 코드가 있다면 이것도 프론트 컨트롤러가 맡아서 처리 : 서블릿을 이용해 FrontController 를 만드는 그런 방식의 개발 방법이 많이 사용되어지기 시작했고, 이 FrontController 를 내장한 유명한 웹 프레임워크들이 등장하기 시작.
그렇다면 FrontController 가 처리해주는 공통적인 작업은 어떤 게 있을까?
대표적으로 인증이나 보안, 다국어처리 모든 웹 요청에 대해 공통적으로 리턴해줘야 하는 내용이 있다거나 하는 등의 작업들을 FrontController 에서 처리하는 방식으로 구조를 짜는 게 굉장히 일반화 됐다. Java Enterprise 개발을 하는데 대표적인 패턴으로 자리 잡기 시작. → 다음 장에서는 우리가 만든 코드를 FrontController 로 만들어볼 예정.