인프런 김영한 님의 스프링 강의이며, 섹션 4 - MVC 프레임워크 만들기를 정리한다.
자세한 설명이 궁금하면 수강을 권장한다.
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의
웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원
www.inflearn.com
프론트 컨트롤러 패턴이란?
이전까지 클라이언트 호출이 오면 공통 로직을 포함한 모든 것이 컨트롤러마다 만들어야 했다.

프론트 컨트롤러는 이런 공통 로직을 하나로 모은 서블릿이다.

프론트 컨트롤러 특징
- 서블릿 하나로 클라이언트의 요청을 받음
- 프론트 컨트롤로가 요청에 맞는 컨트롤러를 찾아서 호출
- 공통 처리 가능
- 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿 없어도 됨
프론트 컨트롤러 도입 - v1

프론트 컨트롤러를 만들고 매핑 정보를 담아보자, 컨트롤러 정보는 이전 예제의 서블릿을 그대로 옮겼다.
@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {
private Map<String, ControllerV1> controllerMap = new HashMap<>();
public FrontControllerServletV1() {
controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1());
controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1());
controllerMap.put("/front-controller/v1/members", new MemberListControllerV1());
}
...
}
public interface ControllerV1 {
void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}
public MemberFormControllerV1 implements ControllerV1 {
...
}
public MemberSaveControllerV1 implements ControllerV1 {
...
}
public MemberListControllerV1 implements ControllerV1 {
...
}
생성자를 통해 url 정보에 맞게 컨트롤러를 담아줬다.
이제 호출하는 코드를 작성하자
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("FrontControllerServletV1.service");
String requestURI = request.getRequestURI();
ControllerV1 controller = controllerMap.get(requestURI);
if (controller == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
controller.process(request, response);
}
getRequestURI()를 이용해서 클라이언트의 경로 호출을 그대로 map에 넘겨 해당되는 컨트롤러를 가져와 사용한다.
이제 브라우저에서 아래와 같이 입력해보자
http://localhost:8080/servlet-mvc/members/new-form
http://localhost:8080/servlet-mvc/members/
이전과 다르게 하나의 서블릿으로 처리가 되었다.
하지만 하나의 과정이 추가되면서 중복되는 코드들이 보인다.
다음 시간에는 뷰와 모델로 분리하면서 중복되는 코드를 없애보자.
'교육 및 인강 > 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
MVC 프레임워크 만들기 - 실용적인 컨트롤러 (v4), 유연한 컨트롤러 (v5) (0) | 2021.07.13 |
---|---|
MVC 프레임워크 만들기 - View 분리(v2), Model 추가(v3) (0) | 2021.07.05 |
MVC 패턴 - 개요, 적용, 한계 (0) | 2021.06.29 |
서블릿, JSP - 회원 관리 요구사항, 서블릿으로 만들기, JSP로 만들기 (0) | 2021.06.29 |
서블릿(Servlet) - HttpservletResponse 기본 사용법, HTTP 응답 데이터 단순 텍스트 & HTML & API JSON (0) | 2021.06.28 |