CS

[Spring]Front Controller, Dispatcher Servlet, Spring MVC 처리 Flow

KJihun 2025. 4. 3. 15:46
728x90

Front Controller

 

MVC 구조에서 함께 사용되는 디자인 패턴 중 하나로, 애플리케이션의 진입점(entry point) 역할을 수행하는 컨트롤러.

클라이언트가 보내는 모든 요청을 자신이 먼저 받게 되고, 이러한 요청들을 세부 컨트롤러에게 전달하는 역할을 수행한다.

Dispatcher Servlet은 spring에서 Front Controller 패턴을 구현한 것이다

 


Spring MVC 처리 Flow

 

0. 서블릿 초기화 (WAS 기동 시)

  • Spring Boot나 Spring Web MVC 프로젝트가 시작될 때
  • DispatcherServlet은 Servlet으로 등록되어 있고, web.xml 또는 Spring Boot의 자동 구성을 통해 초기화됨
  • 초기화 시점에 HandlerMapping, HandlerAdapter, ViewResolver 등 필요한 컴포넌트들을 미리 로딩

 

1. 요청 수신

클라이언트로부터 HTTP 요청이 들어오면 요청은 WAS(Web Application Server, 예: Tomcat)로 전달되며,

URL 패턴이 DispatcherServlet에 매핑되어 있을 경우, WAS는 해당 요청을 DispatcherServlet에게 전달한다.

DispatcherServlet은 URL을 처리할 핸들러를 찾기위해 IOC container 안에서 HandlerMapping 탐색한다

 

 

2. Handler Mapping

Dispatcher Servlet는 Handler Mapping을 통해 해당 요청을 처리할 컨트롤러(Controller)를 찾음

DispatcherServlet  핸들러를 실행할 수 있는 HandlerAdapter를 찾고, 실행을 위임

2-1 핸들러 어댑터(Handler Adapter)

DispatcherServlet으로 부터 실행위임을 받은 HandlerAdapter는 요청에 알맞은 컨트롤러를 실행한다

  • 다양한 형태의 컨트롤러(@Controller, @RestController 등)를 호출할 수 있도록 어댑터 패턴을 사용

 

4. Controller → Service → Repository

컨트롤러는 요청을 건네받은 후, 서비스(Service)와 DB 등을 활용하여 데이터를 생성 및 가공한다.

이후 처리 결과를 담은 Model 객체와 뷰 이름을 반환하며, ModelAndView 형태로 DispatcherServlet에 전달된다.

ModelAndView에는 논리적인 뷰 이름(예: "home", "user/detail")이 포함되어 있다.

DispatcherServlet은 이 논리적 이름을 실제 파일 경로로 변환하기 위해 ViewResolver에게 위임한다.

 

 

5. View Resolver

DispatcherServlet은 ViewResolver를 통해 View 를 결정한다.

DispatcherServlet은 ModelAndView 에서 논리적 View 이름(예: "hello")을 받아,

이 논리 이름을 prefix + suffix 조합으로 실제 경로로 변환한 후, 물리적인 View 객체(예: JSP, ThymeleafView, 등)를 얻는다.

이후 DispatcherServlet은 view 객체에 Model 데이터를 반환한다

 

예시

// 자바코드
mav.setViewName("hello"); 
// 정식 위치 : WEB-INF/views/hello.jsp >> ViewResolver가 hello 만으로 찾아줌

// xml 코드
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
</bean>

 

 

 

 

6. View

View는 전달받은 Model을 기반으로 최종 화면(HTML, JSON 등)을 생성한 후, 직접 HTTPServletResponse에 출력한다

 

Spring MVC View 종류

  • JSP (Java Server Pages): 가장 기본적인 템플릿 기술. EL, JSTL 등을 활용해 Model 데이터를 표시.
  • Thymeleaf: HTML을 그대로 브라우저에서도 열 수 있는 자연스러운 템플릿 엔진

 

 

✅ 장점

  1. 중앙 집중화된 요청 처리
    → 애플리케이션 흐름을 한 곳에서 제어할 수 있어 체계적
  2. 공통 기능의 통합 처리
    → 인증, 로깅, 예외처리 등의 중복을 줄이고 유지보수가 쉬움
  3. 관심사 분리
    → 비즈니스 로직과 UI(View)를 명확히 분리 가능
  4. 일관된 예외 처리
    → 전역 예외 처리로 코드 일관성과 재사용성 향상

 

 

⚠️ 단점

  1. Single Point of Failure
    → DispatcherServlet이 실패하면 전체 시스템 영향
  2. 성능 저하 가능성
    → 모든 요청을 처리하므로, 고부하 상황에서는 병목이 생길 수 있음
  3. 불필요한 오버헤드
    → 단순 정적 리소스 요청에도 DispatcherServlet이 관여할 수 있음
  4. 유연성 감소
    → 모든 흐름이 한 지점으로 몰리면서 다양한 요청 처리에 제약 가능성

'CS' 카테고리의 다른 글

Filter, Spring Security  (0) 2025.04.23
[security] JWT와 Session의 차이  (0) 2025.04.23
[Backend] JSP  (0) 2025.04.02
RestTemplate, WebClient, RestClient, FeignClient  (0) 2025.02.15
[CS]cache: Redis VS Memcached  (0) 2024.09.25