일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 백엔드
- 코딩테스트
- github
- 후기
- backend
- error
- 로드밸런서
- AWS
- 플러터
- 자바
- java
- Flutter
- FLAB
- 도커
- 멘토링
- grafana
- 자바백엔드
- 트러블슈팅
- 레디스
- EC2
- MySQL
- redis
- 알고리즘
- 부트캠프
- F-Lab
- nGrinder
- 데이터구조
- Spring
- 성능테스트
- 에프랩
- Today
- Total
민스씨의 일취일장
LogT | Java Spring의 DispatcherServlet에 대해 알게된 모든 내용과 고민들 본문
LogT | Java Spring의 DispatcherServlet에 대해 알게된 모든 내용과 고민들
읻민스 2023. 1. 19. 18:24Java Spring의 DispatcherServlet에 대해서 알게된 모든 내용과 고민들을 시간 순으로 기록하는 페이지이다.
2023년 1월 16일
Dispatch, Dispatcher
영어 단어 뜻부터 살펴보려고 한다. 네이버 영어사전에 의하면 dispatch와 dispatcher의 뜻은 다음과 같다.
dispatch | 보내다 처리하다 |
dispatcher | 배치 담당자 |
단어들의 의미로 볼때 DispatcherServlet은 어떤가를 배치하는 업무를 담당한다는 느낌이 온다.
Servlet에서 DispatcherServlet
기존에 Java에서는 각가의 서블릿이 입력, 처리, 출력이라는 일련의 과정을 각각 수행했다. 이를 Spring으로 발전시키면서 MVC 패턴을 도입했고 입력부분은 DispatcherServlet으로 공통분리하고 각각의 서블릿에서는 처리와 출력을 담당하도록 구조를 바꾸었다.
DispatcherServlet의 요청 처리과정
1. request - HandlerMapping
Client의 요청을 DispatcherServlet이 HandlerMapping으로 전달한다. 그럼 HandlerMapping의 URL-메서드 맵에서 어떤 메서드가 해당 URL을 처리하는지 찾아서 DispatcherServlet으로 반환한다.
2. HandlertAdapter - Controller
HandlerMapping으로부터 받은 메서드를 기반으로 HandlerAdaptor가 해당 메서드를 처리할 Controller를 찾아서 request를 전달해준다. request를 받은 Controller는 처리한 결과를 데이터를 담은 Model과 어떤 View로 출력할지 HandlerAdaptor를 통해 다시 DispatcherServlet으로 보낸다.
3. ViewReolver
DispatcherServlet은 위에서 전달 받은 View를 어떤 View 파일과 어떤 방식으로 매핑할지 ViewResolver에서 찾는다.
4. JstlView - response
어떤 view파일을 이용해서 출력할 지 정보를 받은 DispatcherServlet은 모든 출력해야할 정보를 JstlView로 보낸다. 여기서 최종적으로 전달할 정보를 정리한 뒤 response의 형태로 Client에게 전송된다.
DoDispatch
DoDispatch는 DispatcherServlet에 포함된 메서드이다. DoDispatcher 메서드가 위에서 설명한 일련의 과정을 처리한다. HandlerMapping에서 메서드를 찾아오고, HandlerAdaptor를 통해 Controller의 메서드를 호출해서 결과를 Model and View에 담아서 processDispatchResult 객체로 전달한다. 그럼 processDispatchResult객체는 render 함수를 이용해 최종 결과를 response에 담아낸다.