스프링 MVC 동작 과정 🍃

pgmjun·2023년 10월 3일

SpringBoot

목록 보기
3/4


Spring MVC 동작 과정 🍃


0. HTTP 요청 💭

Client로부터 요청이 들어오면 Front ControllerDispatcher Sevlet이 요청을 받는다.

Dispatcher Sevlet은 받은 요청을 처리할 수 있는 Handler객체를 가져온다.



1. 핸들러 조회 💭

핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.

1번 과정 전 / 후Filter의 동작 시점이다.


✅ RequestMappingHandlerMapping

SpringBoot를 사용하면 0순위@RequestMapping 애노테이션 기반 Handler를 찾아 반환한다.

URI에 입력된 Endpoint
@RequestMapping 애노테이션에 설정된 Endpoint를 비교하여
요청을 담당하는 Handler를 조회하는 것이다.

✅ BeanNameUrlHandlerMapping

0순위가 실패하면 1순위로는 요청한 URI와 일치하는 스프링 빈 이름의 Handler를 찾아 반환한다.



2. 핸들러 어댑터 조회 💭

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


✅ RequestMappingHandlerAdpater

SpringBoot를 사용하면 0순위로 @RequestMapping 애노테이션 기반 Handler의 Adapter를 찾아 반환한다.

✅ HttpRequestHandlerAdapter

HttpRequestHandler를 implements하여 구현한 Handler를 처리하는 일을 수행하며 1순위로 동작한다.

✅ SimpleControllerHandlerAdpater

Controller를 implements하여 구현한 Handler를 처리하는 일을 수행하며 2순위로 동작한다.



3. 핸들러 어댑터 실행 💭

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



4. 핸들러 실행 💭

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

4번 과정 전/후Intercepter의 동작 시점이다.



5. ModelAndView 반환 💭

HandlerAdapterHandler가 반환하는 정보를 ModelAndView 객체로 변환해서 반환한다.



6. viewResolver 호출 💭

5번 과정에서 얻은 ModelAndView 객체를 통해 view의 이름을 뷰 리졸버에 전달한다.

JSP의 경우 InternalResourceViewResolver가 자동 등록되고, 사용된다.



7. View 반환 💭

뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 view 객체를 반환한다.



8. 뷰 렌더링 💭

View Resolver를 통해 얻은 view 객체에 5번 과정에서 얻은 ModelAndViewModel을 파라미터로 넘겨주고 render() 메서드를 실행하여 페이지 렌더링을 수행한다.



9. 페이지 반환 💭

최종적으로 렌더링된 페이지를 Client에게 response한다.



알아두자!🔥

Spring은 이미 대부분의 Handler MappingHandler Adpater를 구현해 두었기 때문에 직접 구현할 일은 거의 없다.

profile
하나씩 천천히 깊이있게 쌓아가는 백엔드 개발자 최승준입니다.

0개의 댓글