1. MVC 패턴
MVC 패턴이란, Model - View - Controller로 이루어진 구조를 말합니다.
애플리케이션(프로그램)을 데이터 영역, 비즈니스 영역, UI 영역으로 역할을 나누어 관리하는 것을 말합니다.
모델(Model)
- 데이터를 관리하는 역할을 담당하는 객체입니다. 데이터를 담아서 화면에 전달하는 역할을 합니다.
- 모델을 사용하면, 화면은 비즈니스 로직, 데이터 접근 방법을 몰라도 되기 때문에, 화면 구현에만 집중할 수 있습니다.
뷰(View)
- 화면을 렌더링하는, UI 영역을 담당하는 객체입니다. HTML 파일을 만들어 웹 브라우저에서 접근할 수 있도록 해줍니다.
컨트롤러(Controller)
- 비즈니스 영역을 담당하는 객체입니다. 요청을 받아 비즈니스 로직을 처리한 뒤, 결과를 모델에 담아줍니다.
2. Spring MVC 구조와 동작 순서
DispatcherServlet : Handler 호출, View 찾기, View 렌더링 등 Spring MVC 패턴에서 처리흐름을 관리하는 객체입니다.
- Http 요청이 들어오면, 적절한 Handler(Contoller)를 찾아주는 역할을 합니다.
- View Resolver를 호출하여, 적절한 View를 반환받은 뒤, Handler(Controller) 결과인 ModelAndView를 보내 view를 렌더링합니다. (응답값을 보냅니다)
HandlerMapping : 등록된 Handler(Controller)를 조회하는 기능을 합니다.
HandlerAdapter : Handler를 실행해주는 기능을 합니다.
ModelAndView : 데이터 전달 객체
ViewResolver : View를 생성해주는 기능을 합니다. Config(설정) 정보를 참조해, Controller에서 호출된 경로의 View를 찾아 반환해줍니다. ( 설정정보에서 Prefix, Suffix 등의 값을 지정할 수 있습니다.)
View : 화면 UI
3. HandlerMapping과 HandlerAdapter
HandlerMapping
- HandlerMapping 인터페이스는 클라이언트 요청을 처리할 수 있는 Handler(Controller)를 찾아주는 객체입니다.
- HandlerMapping이 Handler를 찾는 방식은 2가지가 있습니다.
- RequestMappingHandlerMapping : 애노테이션 @RequestMapping을 이용합니다.
- BeanNameUrlHandlerMapping : 스프링 빈의 이름을 이용합니다.
HandlerAdapter
- HandlerMapping을 이용해 찾은 핸들러를 실행해주는 객체입니다.
- DispatcherServlet이 찾은 핸들러를 실행할 수 있도록 도와주는 어답터 역할을 수행하는 객체로, DispatcherServlet이 확장될 수 있도록 도와줍니다. (새로운 컨트롤러가 추가되더라도, DispatcherServlet이 컨트롤러 실행 로직을 추가하지 않도록 해줍니다.)
- HandlerAdapter가 Adapter를 찾는 방식은 3가지가 있습니다.
- RequestMappingHandlerAdapter : 애노테이션 @RequestMapping을 이용합니다.
- HttpRequestHandlerAdapter : HttpRequestHandler에서 처리합니다.
- SimpleControllerHandlerAdapter : Controller 인터페이스를 구현한 객체를 호출한 경우 사용합니다.
참고자료
- https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerMapping.html
- https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerAdapter.html
- 김영한, 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술, 인프런
- https://www.tutorialspoint.com/spring/spring_web_mvc_framework.htm
- https://www.baeldung.com/spring-dispatcherservlet
'JAVA > Spring' 카테고리의 다른 글
쓰레드로컬 Thread Local (데이터 경합 방지) (0) | 2023.07.08 |
---|---|
@RequestMapping 과 @Controller (0) | 2022.01.26 |
스프링 빈과 의존성 주입 (DI) (0) | 2022.01.12 |