티스토리 뷰

Spring

[Spring Webflux] DispatcherHandler

hyuuny 2024. 5. 6. 18:02


DispatcherHandler

DispatcherHandler는 WebHandler를 구현하고 있고, handlerMappings, handlerAdapters, resultHandlers로 구성되어 있다.


DispatcherHandler의 요청 처리 흐름

DispatcherHandler에서 요청을 처리하는 흐름을 도식화하면 아래와 같이 나타낼 수 있다.

  1. Netty로부터 요청(request)이 들어온다.
  2. DispatcherHandler는 HandlerMapping List를 순회하면서 요청을 처리할 수 있는 Handler를 찾아 반환한다.
  3. Handler의 호출을 위임하기 위해 HandlerAdapter List로 가서 이 요청을 처리할 수 있는 HandlerAdapter를 조회한다.
  4. 반환받은 HandlerAdapter의 handle을 실행하고, HandlerResult(Servlet에서는 ModelAndView)를 반환받는다.
  5. 반환받은 HandlerResult를 처리하기 위해 HandlerResultHandler List에서 HandlerResultHandler를 조회한다.
  6. HandlerResultHandler에서 처리한 응답을 반환한다.

HandlerMapping

HandlerMapping은 요청과 Handler를 연결하게 되는데, HandlerMapping의 구현에 따라 다양한 기준으로 연결된다.


  • getHandle: ServerWebExchange가 주어지면 handler를 Mono로 반환하고, 만약 지원하는 handler가 없다면, Mono.empty를 반환한다.

대표적인 HandlerMapping의 구현체는 아래 이미지와 같다.



HandlerAdapter

HandlerAdapter는 Handler가 실제로 호출되는 방식과 관계없이 DispatcherHandler가 요청에 매핑된 핸들러를 호출하도록 도와준다.


  • support: handlerMapping를 통해서 받은 handler를 지원하는지에 대한 여부를 체크한다.
  • handle: ServerWebExchange와 handler를 받아서 요청을 처리하고 HandlerResult를 Mono로 반환한다.

대표적인 HandlerAdapter의 구현체는 아래 이미지와 같다.



HandlerResultHandler

HandlerResultHandler는 Handler 호출의 결과를 처리하고, 응답을 마무리한다.


  • support: handlerAdapter를 통해서 받은 handlerResult를 지원하는지 여부를 체크한다.
  • handlerResult: ServerWebExchange와 result를 받아서 응답 작업을 수행하고, 작업이 완료된 시점을 Mono로 반환한다.

대표적인 HandlerResultHandler의 구현체는 아래 이미지와 같다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함