Spring MVC - Front Controller의 핸들러매핑과 핸들러어댑터
2021. 4. 1. 17:50ㆍSPRING/SPRING MVC
Front Controller의 역할
- 프론트 컨트롤러의 가장 대표적인 역할을 뽑자면, 요청 URI에 따라 알맞는 컨트롤러를 선택하여 호출하는 것이다.
- 이 역할의 핵심이 핸들러 매핑과 핸들러 어댑터다.
핸들러란?
- 여기서 핸들러란 무엇일까? 다양하게 해석될 수 있는데, 여기서는 그냥 이벤트가 발생했을 때, 해당 이벤트에 맞는 동작을 수행하는자 라고 생각하면 된다. 즉, 해당 URI에 맞는 동작을 수행하는 자 = 컨트롤러 라고 생각하면된다. 컨트롤러는 구체적고 핸들러가 그 상위 개념으로 더 큰 개념이라고 생각하면 된다.
Spring MVC 구조
핸들러 매핑이란?
- Dispatcher Servlet이 요청 URI가 어떤 핸들러와 매핑되는지 찾는 과정이다.
- 핸들러 매핑은 결국 요청과 알맞는 핸들러 객체를 Dispatcher Servlet에 리턴한다.
핸들러 어댑터란?
- 핸들러 매핑에서 리턴받은 핸들러 객체를 가지고 이에 맞는 어댑터를 찾는 과정이다.
- 여기서 어댑터란, 2개 이상의 인터페이스에 스펙이 맞지 않을 때, 중간에 이 스펙을 맞도록 변환해주는 역할을 하는 객체이다.
핸들러 매핑과 핸들러 어댑터가 필요한 이유
- 어떤 개발자는 컨트롤러의 리턴 타입을 String으로 하고 싶고 또 어떤 개발자는 리턴 타입을 ModelAndView로 개발하고 싶을 수 있다. 컨트롤러의 매개변수도 마찬가지로, 어떤 개발자는 서블릿의 HttpServletRequest와 HttpServletResponse로 받고 싶고, 또 어떤 개발자는 매개변수를 받지 않거나 Model만 받고 싶어할 수도 있다. 이 모든 요구 사항을 맞추기 위해서 어댑터 패턴이 필요한 것이다.
- 핸들러 어댑터는 컨트롤러에서 String으로 응답받든, Model로 응답받든, 무조건 Dispatcher Servlet에서 ModelAndView객체로 응답을 해줘야하는 역할이 있는 것이다.
- 이에 스프링에서는 다양한 형태의 핸들러가 생김에 따라(대표적으로 Controller Interface와 @Controller가 있다) 이에 맞는 핸들러 어댑터를 구현해 놓았다.
- 이로 인해, 개발자는 비즈니스 개발 로직에만 집중하여 편하게 원하는 형태로 컨트롤러를 정의하여 개발할 수 있다.
'SPRING > SPRING MVC' 카테고리의 다른 글
Spring MVC - 요청 파라미터, @RequestParam, @ModelAttribute (0) | 2021.04.07 |
---|---|
Spring MVC - 컨트롤러 파라미터 타입 종류, 리턴 타입 종류 매뉴얼 (0) | 2021.04.07 |
Spring MVC - 요청 헤더 조회 @RequestHeader, @CookieValue (0) | 2021.04.07 |
Spring MVC - 요청 매핑, @RequestMapping, @PathVariable (0) | 2021.04.06 |
Spring MVC의 핵심! FrontController 패턴과 DispatcherServlet (0) | 2021.04.01 |