MVC 프레임워크 만들기 - 프론트 컨트롤러 패턴 소개, 도입

2021. 7. 5. 20:47·교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

인프런 김영한 님의 스프링 강의이며, 섹션 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
'교육 및 인강/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
  • MVC 프레임워크 만들기 - 실용적인 컨트롤러 (v4), 유연한 컨트롤러 (v5)
  • MVC 프레임워크 만들기 - View 분리(v2), Model 추가(v3)
  • MVC 패턴 - 개요, 적용, 한계
  • 서블릿, JSP - 회원 관리 요구사항, 서블릿으로 만들기, JSP로 만들기
loop-study
loop-study
오늘도 공부하자
  • loop-study
    개발 공부할래?
    loop-study
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • 목표 및 회고 (26)
      • 세미나 & 워크샵 (1)
      • 교육 및 인강 (67)
        • TDD, Clean Code with Java (5)
        • ATDD, 클린 코드 with Spring (6)
        • DDD 세레나데 (3)
        • 인프라 공방 (6)
        • 이규원의 현실 세상의 TDD (19)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
        • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
        • 스프링 시큐리티 완전정복 6.x (1)
      • 서적 (62)
        • 객체지향의 사실과 오해 (1)
        • 객체지향과 디자인패턴 (7)
        • 만들면서 배우는 클린 아키텍처 (3)
        • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
        • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
        • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
        • 토비의 스프링 (3)
        • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
        • 개발자의 글쓰기 (1)
        • 소프트웨어 장인 (17)
        • Real MySQL 8.0 (2)
        • JVM 밑바닥까지 파헤치기 (0)
      • 개발 & 방법론 (29)
        • Java (13)
        • TDD (5)
        • ATDD (3)
        • DDD (6)
        • 인프라 (2)
        • SQL (0)
      • 개인이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 백엔드 로드맵
  • 인기 글

  • 태그

    김영한
    오브젝트
    fastcampus
    장인정신
    스프링
    nextstep
    테스트 주도 개발
    자바
    엔터프라이즈 애플리케이션 아키텍처 패턴
    Test Driven Development
    넥스트스탭
    백기선
    Patterns of Enterprise Application Architecture
    인프라공방
    스터디
    객체지향
    소프트웨어 장인
    인프런
    조영호
    이규원
    추상화
    현실세상의 TDD
    모든 개발자를 위한 HTTP 웹 기본 지식
    마틴 파울러
    java
    TDD
    ATDD
    study
    DDD 세레나데
    JUnit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
loop-study
MVC 프레임워크 만들기 - 프론트 컨트롤러 패턴 소개, 도입
상단으로

티스토리툴바