[Spring MVC] #3 스프링 MVC 구조 (2) 핸들러 매핑, 핸들러 어댑터

Jaeyoo (유재형)·2022년 2월 10일
0

SpringMVC

목록 보기
8/12
post-thumbnail
post-custom-banner

Spring MVC 구조에서 핸들러 매핑과 핸들러 어댑터를 좀더 자세히 살펴보자


핸들러 매핑과 핸들러 어댑터


과거버전의 스프링 컨트롤러를 이용해 핸들러 어댑터와 매핑을 이해해보자

Controller 인터페이스

public interface Controller {
    ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse
  response) throws Exception;
}

OldController

@Component("/springmvc/old-controller")
    public class OldController implements Controller {
@Override
        public ModelAndView handleRequest(HttpServletRequest request,
    HttpServletResponse response) throws Exception {
            System.out.println("OldController.handleRequest");
            return null;
        }
}
  • @Component : /springmvc/old-controrller 이름으로 빈등록
  • 빈 이름으로 URL 매핑

스프링 부트가 자동 등록하는 핸들러 매핑과 어댑터

스프링은 이미 필요한 핸들러 매핑과 어댑터를 대부분 구현해두었다.

HandlerMapping

0 = RequestMappingHandlerMapping : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
1 = BeanNameUrlHandlerMapping : 스프링 빈의 이름으로 핸들러를 찾는다.

HandlerAdapter

0 = RequestMappingHandlerAdapter : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
1 = HttpRequestHandlerAdapter : HttpRequestHandler 처리
2 = SimpleControllerHandlerAdapter : Controller 인터페이스(애노테이션X, 과거에 사용) 처리

위의 순서대로 찾는다.
우리가 보통 하는 프로젝트는 어노테이션 기반으로하기때문에 RequestMappingHandlerMapping 과 RequestMappingHandlerAdapter를 사용한다.


호출 과정

핸들러 매핑으로 핸들러 조회

  • HandlerMapping 순서대로 실행해 핸들러 찾는다.
  • 빈의 이름으로 핸들러를 찾는 BeanNameUrlHandlerMapping을 선택한다.
  • 해당 매핑 실행후 OldController 반환

핸들러 어댑터 조회

  • HandlerAdapter의 support()를 순서대로 호출
  • SimpleControllerHandlerAdapter가 Controller 인터페이스를 지원

핸들러 어댑터 실행

  • SimpleControllerHandlerAdapter가 OldeController를 실행한다.

위의 예시는 핸들러 어댑터와 핸들러 매핑이 어떤식으로 실행되는지 보기위해 자주 쓰지않는 방식으로 본것이고 실제로 대부분은 어노테이션 기반인 RequestMappingHandlerMapping와 RequestMappingHandlerAdapter를 사용한다.

profile
기록과 반복
post-custom-banner

0개의 댓글