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

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

SpringMVC

목록 보기
8/12
post-thumbnail

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
기록과 반복

0개의 댓글

관련 채용 정보