1. Dispatcher-Servlet(디스패처 서블릿)이란?
: HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 Controller에 위임
= Front Controller
클라이언트 : 요청 > Tomcat(톰캣)과 같은 Servlet Container가 요청을 받음
> Dispatcher-Servlet이 가장 먼저 받아 공통적인 작업을 먼저 처리
> 해당 요청을 처리해야 하는 Controller를 찾아서 작업을 위임
Front Controller : Servlet Container 제일 앞에서 서버로 들어오는 모든 요청을 받아서 처리
Servlet : 자바 언어를 기반으로 하는 서버 측 웹 애플리케이션 컴포넌트
동적인 웹 페이지를 생성하고 관리하는 데 사용
Servlet Container : Servlet을 관리하고 실행하는 환경을 제공하는 소프트웨어 컴포넌트
Servlet을 실행하기 위한 런타임 환경을 제공
Servlet의 생명 주기를 관리
클라이언트 요청에 대한 응답을 생성
2. 주요 기능
- URL 매핑과 핸들러 매핑:
URL 매핑을 통해 들어온 요청을 적절한 핸들러(컨트롤러)에게 매핑
HandlerMapping이라는 빈(Bean)에 의해 수행
- 핸들러 어댑터:
다양한 핸들러 종류(컨트롤러 메서드, 커맨드 객체 등)에 대한 호출을 표준화
다양한 리턴 타입을 처리하기 위해 핸들러 어댑터를 사용
- 뷰 리졸버:
핸들러가 처리한 결과를 어떤 뷰로 보여줄지 결정하는 역할
ViewResolver 라는 빈을 통해 등록
주로 JSP, Thymeleaf, FreeMarker 등의 뷰 템플릿 엔진과의 통합을 담당
- 인터셉터 (Interceptor)
핸들러의 실행 전, 후 또는 응답 전에 인터셉터를 실행할 수 있음
특정 로직을 삽입하여 요청 처리를 보조하거나 수정 가능
- 데이터 바인딩과 포매터 (Data Binding and Formatters)
데이터 바인딩 : 사용자의 요청 파라미터를 자바 객체로 변환하거나,
자바 객체를 응답으로 변환하는 작업
스프링은 이를 지원하며, 포매터를 사용하여 특정한 형식으로 데이터를 변환 가능
- 뷰 리졸버 체인과 핸들러 어댑터 체인
여러 개의 뷰 리졸버나 핸들러 어댑터가 등록될 수 있으며, 체인 형태로 동작
이를 통해 여러 리졸버나 어댑터 간의 협력이 가능
- Multipart 요청 처리
파일 업로드와 같은 멀티파트 요청을 처리하기 위한 기능을 제공
- 에러 처리
예외가 발생했을 때 적절한 에러 페이지로 리다이렉트하거나 처리하기 위한 기능을 제공
- Flash 속성
리다이렉트 이후에도 데이터를 유지할 수 있도록 Flash 속성을 지원
- 동시성 처리
비동기적인 처리를 지원하고, 서블릿 3.0+에서 제공되는 비동기 서블릿 기능 활용 가능
3. 장점
- web.xml의 역할을 상당히 축소
과거) 모든 Servlet 을 URL 매핑을 위해 web.xml에 모두 등록!
dispatcher-servlet) 들어오는 모든 요청을 Handling해주고
공통 작업을 처리면서 상당히 편리하게 이용
⇒ Controller를 구현하면
dispatcher-servlet이 알아서 적합한 Controller로 위임
핸들링(Handling) : 요청을 받아서 적절한 처리를 하는 것
Spring MVC(모델-뷰-컨트롤러)
: 자바 기반의 웹 애플리케이션을 개발하기 위한 프레임워크 중 하나
Spring Framework의 일부
웹 애플리케이션에서 모델, 뷰, 컨트롤러 컴포넌트를 사용하여 구조화된 개발을 도와줌
유연성, 확장성 및 테스트 용이성 강조
대규모 웹 애플리케이션의 개발에 매우 효과적
모델(Model) : 애플리케이션의 데이터와 비즈니스 로직을 담당
애플리케이션의 상태와 동작을 표현
컨트롤러와 뷰 사이에서 데이터를 전달하는 역할
뷰(View) : 사용자에게 보여지는 부분
모델의 데이터를 기반으로 화면을 생성
일반적으로 템플릿 엔진을 사용하여 동적인 웹 페이지를 생성
컨트롤러(Controller) : 사용자의 요청을 처리
모델을 업데이트
적절한 뷰를 선택하여 응답을 생성
웹 요청과 모델 간의 중개자 역할을 수행
특정한 인터페이스를 구현할 필요 없음
어댑터가 컨트롤러의 메서드를 호출할 수 있도록 컨트롤러와의 통신을 중개
각각의 컨트롤러는 핸들러 어댑터와의 호환성을 유지하기 특정 메서드들을 가짐
<대표적인 어댑터의 종류>
- SimpleControllerHandlerAdapter
: Controller 인터페이스를 구현한 컨트롤러를 처리
- HttpRequestHandlerAdapter
: HttpRequestHandler 인터페이스를 구현한 컨트롤러를 처리
- AnnotationMethodHandlerAdapter
: 주로 @RequestMapping을 사용하여 매핑된 메서드를 처리
- RequestMappingHandlerAdapter
: @RequestMapping을 사용하는 데 추가로 HandlerMapping과 HandlerMethodReturnValueHandler 등을 사용하여 메서드를 처리
Interceptor(인터셉터) : Spring MVC에서 클라이언트의 요청을 가로채거나, 컨트롤러의 실행 전후에 특정한 로직을 수행할 수 있도록 하는 기능
Proxy ServerShare article