Dispatcher Servlet
: Http protocol로 들어오는 모든 요청을 가장 먼저 받아 적합한 Controller에 위임해주는 Front Controller(또는 Central Controller)이다.
특징
- HttpServlet을 상속한다.
- DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet 상속구조
- 정적자원, 동적 자원을 분할 처리한다.
- DispatcherServlet은 요청 처리할 컨트롤러를 우선적으로 찾고 컨트롤러가 없을 경우 정적 자원을 탐색한다.
=> 효율적 리소스 관리 가능
- 요청을 처리하기 위해 스페셜 빈(위임 컴포넌트)에 실제 작업을 위임한다.
스페셜 빈
: 스프링 MVC에서 제공하는 주요 빈으로 사용자가 재정의할 수 있다.
1. handlerMapping: 요청 처리할 컨트롤러 찾는 역할
- @RequestMapping, @GetMapping 등...
2. handlerAdapter: 요청을 컨트롤러로 전달하고 반환값을 처리하는 역할
- ResponseEntity, String, ModelAndView 등의 반환값에 따라 다르게 처리
3. handlerExceptionResolver: 요청에 대해 컨트롤러 실행 전, 중, 후에 예외 발생 시 이를 잡아내어 처리해주는 역할
- @ExceptionHandler, @ControllerAdvice 등...
- Dispatcher Servlet 내부에서 발생한 예외만 처리 가능(Filter, Interceptor, ServletContainer 수준에서의 예외는 처리 불)
4. viewResolver: 컨트롤러가 반환한 View 이름을 View 객체로 변환하는 역할
- String으로 반환받은 경우 이름에 매핑된 view 객체로 변환
- example.html, example.jsp 등...
5. LocaleResolver: Locale를 결정하는 역할
- Locale: 유저의 언어, 지역, 출력 형식 등을 정의하는 문자열
- message_en.properties, message_ko.properties 등...
- url 파라미터 기반 로케일 변경하게 재정의 가능(?lang=ko)
처리과정
// Spring boot 구동 시 Dispatcher Servlet을 자동 등록, 모든 경로 '/'에 대해 매핑
1. Client Request: Client Request를 Dispatcher Servlet이 수신한다.
2. Handler Mapping: Dispatcher Servlet이 Handler Mapping 목록을 조회하여 요청 URI 에 해당하는 Controller를 찾는다.
3. Handler Adapter: 찾아낸 Controller를 적절한 Handler Adapter를 통해 호출한다.
4. Controller: Controller가 Service를 호출하고 Service 계층에서 비즈니스 로직을 처리한다.
5. Controller가 Response Entity를 반환한다.
6. Handler Adapter가 반환값을 클라이언트가 받을 수 있는 형태로 변환(JSON 등...) 후 Dispatcher Servlet으로 전달한다.
7. Dispatcher Servlet Client에게 응답을 반환한다.
'Spring' 카테고리의 다른 글
JPA findById(), getReferenceById()데이터 조회에는 뭘 쓰는게 좋을까? (0) | 2025.05.16 |
---|---|
JPA 데이터베이스 컬럼명을 카멜케이스로 작성하니까 에러가 발생한다? (2) | 2025.05.15 |
JPA 데이터베이스의 데이터가 계속 사라진다면? (0) | 2025.05.15 |