인프런 김영한 님의 스프링 강의이며, 섹션 4 - MVC 프레임워크 만들기를 정리한다.
자세한 설명이 궁금하면 수강을 권장한다.
프론트 컨트롤러 패턴이란?
이전까지 클라이언트 호출이 오면 공통 로직을 포함한 모든 것이 컨트롤러마다 만들어야 했다.
프론트 컨트롤러는 이런 공통 로직을 하나로 모은 서블릿이다.
프론트 컨트롤러 특징
- 서블릿 하나로 클라이언트의 요청을 받음
- 프론트 컨트롤로가 요청에 맞는 컨트롤러를 찾아서 호출
- 공통 처리 가능
- 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿 없어도 됨
프론트 컨트롤러 도입 - 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 |