[Spring] Dispatcher Servlet이란??

2024. 6. 8. 04:53·Backend/spring
목차
  1. 1. Dispatcher Servlet이란?
  2. 2.Dispatcher Servlet 동작 과정
  3. 3. 총정리
반응형

1. Dispatcher Servlet이란?

디스패처 서블릿은 Spring Framework에서  HTTP 프로토콜로 들어오는 요청을 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러입니다.

 

프론트 컨트롤러란 무엇일까?

프론트 컨트롤러(Front Controller)는 서블릿 컨테이너 제일 앞에서 서버로 들어오는 클라이언트 요청을 받아서 처리해주는 컨트롤러로 공통된 처리 과정을 거친 후 적절한 컨트롤러나 서비스로 요청을 전달하는 역할을 합니다.

프론트 컨트롤러가 어플리케이션의 요청을 핸들링 해주고, 공통 작업을 처리해주어 중복 코드를 제거할 수 있다는 장점이 있습니다.

 

2.Dispatcher Servlet 동작 과정

동작 전체 흐름

 

1. 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 맞는 Handler(Controller)를 찾는다.

 

HandlerMapping은 들어오는 요청을 적절한 Handler에 매핑하는 역할을 합니다. 클라이언트의 요청 URL, HTTP 메서드, 요청 파라미터 등을 바탕으로 어떤 Handler가 요청을 처리해야 할지를 결정하게 됩니다.

  • ex) 클라이언트가 /home으로 요청을 보냈다면, HandlerMapping은 /home 요청을 처리할 수 있는 Handler를 찾음

 

2. 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회

 

HandlerAdapter는 HandlerMapping이 반환한 Handler를 실제로 실행하는 역할을 합니다. HandlerAdapter는 다양한 종류의 Handler를 실행할 수 있도록 어댑터 패턴으로 구성되어 있습니다.

  • ex) HandlerAdapter는 @Controller 메서드뿐만 아니라, 다른 형태의 Handler (예: HttpRequestHandler, SimpleControllerHandler)도 실행할 수 있다.
  • RequestMappingHandlerAdapter: @RequestMapping 어노테이션을 사용하는 핸들러 메서드를 실행
  • HttpRequestHandlerAdapter: HttpRequestHandler 인터페이스를 구현하는 핸들러를 실행
  • SimpleControllerHandlerAdapter: Controller 인터페이스를 구현하는 핸들러를 실행

 

3. 핸들러 어댑터가 실제 핸들러를 실행한다. 

 

파라미터를 읽고 변환해 메서드 인자로 전달합니다. 그 후 비즈니스 로직을 실행하고 결과를 반환합니다. 

  • HandlerAdapter가 Handler를 실행하여 요청을 처리하고 ModelAndView 객체를 반환
  • 이 과정에서 요청 데이터를(@RequestParam,@ResponseBody) 읽고 변환하며, Handler 메서드를 호출하고, 반환값을 반환함

 

처리된 비즈니스 로직의 결과가 ResponseEntity를 반환한다면 ModelAndView는 사용되지 않고, HttpMessageConverter가 응답 객체를 직렬화하고 HTTP응답으로 반환한다.

 

 

4. ViewResolver를 통해 뷰를 찾고 해당 view를 반환한다.

 

5. 뷰를 렌더링한다.

 

 

3. 총정리

1. 핸들러 조회: HandlerMapping을 통해 요청 URL에 맞는 Handler(Controller)를 찾는다.

2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 HandlerAdapter를 조회한다.

3.핸들러 어댑터 실행:

  • 비즈니스 로직을 실행하고 결과를 반환한다.
  • 응답 데이터 반환 시: ResponseEntity 또는 @ResponseBody를 반환하는 경우, HttpMessageConverter가 응답 객체를 직렬화하고 HTTP 응답으로 반환한다.
  • 뷰 이름 반환 시: ModelAndView를 반환한다.   

4.뷰 찾기 및 반환: ViewResolver를 통해 뷰를 찾고 해당 뷰를 반환한다.

5. 뷰 렌더링: 최종 응답 결과를 클라이언트에게 반환한다.

 

참고

https://velog.io/@ejung803/Spring-Web-MVC%EC%9D%98-Dispatcher-Servlet%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC

https://studyandwrite.tistory.com/463

 

반응형

'Backend > spring' 카테고리의 다른 글

[Spring] OpenFeign란?  (2) 2024.09.11
[Spring]스프링 이벤트를 이용한 도메인 의존성 분리 및 고려할 점  (2) 2024.09.09
[Spring] 서블릿 필터(Filter), 인터셉터(Interceptor) 개념과 차이점  (0) 2024.08.05
[Spring] 의존성 주입의 3가지 방법  (0) 2024.05.28
[Spring] Rest Docs으로 API 문서화하기  (2) 2023.06.30
  1. 1. Dispatcher Servlet이란?
  2. 2.Dispatcher Servlet 동작 과정
  3. 3. 총정리
'Backend/spring' 카테고리의 다른 글
  • [Spring]스프링 이벤트를 이용한 도메인 의존성 분리 및 고려할 점
  • [Spring] 서블릿 필터(Filter), 인터셉터(Interceptor) 개념과 차이점
  • [Spring] 의존성 주입의 3가지 방법
  • [Spring] Rest Docs으로 API 문서화하기
여포개발자
여포개발자
어제보다 오늘 더여포개발자 님의 블로그입니다.
여포개발자
어제보다 오늘 더
여포개발자
전체
오늘
어제
  • 분류 전체보기 (141)
    • Backend (41)
      • 프로젝트 (18)
      • MSA 전환 (10)
      • spring (6)
      • JPA (7)
    • JAVA (11)
    • Kotlin 정리 (11)
    • 알고리즘 (59)
      • 프로그래머스 LV0 (5)
      • 프로그래머스 LV1 (12)
      • 프로그래머스 LV2 (17)
      • 프로그래머스 LV3 (8)
      • 백준 (14)
      • 소프티어 (3)
    • 네트워크 (3)
    • Docker (3)
    • SQL (5)
    • Kafka (6)
    • 일상 (1)
    • .NET (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • MSA
  • TroubleShooting #JPA
  • 프로그래머스LV1
  • JAVA #프로그래머스 #LV0
  • Spring
  • 자바 #백준
  • 백준
  • 프로젝트
  • 네트워크
  • #프로그래머스
  • #JAVA #프로그래머스 #LV1 #모두화이팅
  • JPA
  • 오블완
  • Kotiln
  • 모니터링
  • #프로그래머스 #자바
  • docker #MySQL
  • Kotlin
  • #JAVA #프로그래머스
  • 티스토리챌린지
  • #JPA #JAVA
  • HTTP
  • java
  • docker
  • 프로그래머스
  • #JAVA #프로그래머스 #LV1

최근 댓글

최근 글

반응형
hELLO· Designed By정상우.v4.5.2
여포개발자
[Spring] Dispatcher Servlet이란??
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.