Spring MVC흐름에 대해서 설명해주세요 #50
Replies: 5 comments
-
조금 더 디테일한 답변Spring MVC의 요청 처리 흐름은 DispatcherServlet을 중심으로 여러 객체가 역할을 나눠 협력하는 구조입니다. 그다음 DispatcherServlet은 HandlerMapping을 통해 현재 요청 URL과 HTTP 메서드에 매핑되는 컨트롤러 메서드를 찾습니다. 컨트롤러가 호출되기 전에는 Interceptor의 preHandle이 실행될 수 있습니다. 이후 HandlerAdapter는 컨트롤러 메서드를 호출하기 위해 필요한 파라미터들을 준비합니다. 파라미터 준비가 끝나면 실제 컨트롤러 메서드가 실행됩니다. 컨트롤러 실행 이후에는 Interceptor의 postHandle, afterCompletion이 이어서 호출됩니다. Spring MVC는 요청을 받은 뒤 DispatcherServlet → HandlerMapping → HandlerAdapter → ArgumentResolver/HttpMessageConverter → Controller → HttpMessageConverter 또는 ViewResolver → Interceptor/ExceptionResolver 흐름으로 처리합니다. DispatcherServlet이 모든 요청의 입구가 되는 Front Controller 역할을 하고, 나머지 객체들이 매핑, 파라미터 해석, 메시지 변환, 예외 처리, 뷰 렌더링 같은 책임을 나눠 맡는다는 점이 스프링 MVC의 핵심입니다. 그래서 Spring MVC는 잘 분리된 객체들이 협력해 웹 요청과 응답을 처리하는 구조를 만들기 위해 OOP의 추상화와 다형성을 아주 잘 적용한 프로젝트로서 |
Beta Was this translation helpful? Give feedback.
-
|
디버깅으로 여러 요청들을 보내보며 과정을 확인해 보았습니다. `GET /reservations` 요청을 보냈을 때 과정
→ ReservationController#getReservations()가 실행됨 1. Spring의 형 변환직접 date 문자열을 LocalDate로 바꾼 적이 없는데 Spring이 알아서 변환해주었습니다.
Spring MVC는 단순히 Controller만 호출하는 게 아니라, 요청 파라미터를 읽고, 타입 변환까지 해서 메서드 인자로 넣어줍니다. 2. Spring의 프록시 사용
이건 실제 최종 요청 흐름: 신기하네요! |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
// DispatcherServlet.doDispatch(); 요약
HandlerExecutionChain mappedHandler = getHandler(request) // 핸들러 가져오기.
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler()); // 어댑터 가져오기
mappedHandler.applyPreHandle(request, response); // Interceptor의 preHandle() 수행
mv = ha.handle(); // 1. ArgumentResolver 2. 본문수행 3. returnValueHandler
mappedHandler.applyPostHandle(request, response, mv) // Interceptor의 postHandle() 수행
triggerAfterCompletion(processedRequest, response, mappedHandler, ex); // 예외 O, 여기서 Interceptor의 afterCompletion() 수행
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException); // 예외 X, 여기서 Interceptor의 afterCompletion() 수행 |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.








Uh oh!
There was an error while loading. Please reload this page.
-
Spring MVC흐름에 대해서 설명해주세요
최근에 디버깅 찍어보면서 흐름을 본 적이 있습니다.
10-20분정도면 충분하니까 디버깅 해보면서 든 본인의 생각을 적어주세요.
거창하지않아도됩니다.
"그냥 신기합니다"여도 충분합니다
Beta Was this translation helpful? Give feedback.
All reactions