@ 아래 내용은 https://www.edwith.org/boostcourse-web/ 사이트의 강의를 정리한 글 입니다.
Spring MVC 기본 동작 흐름
DispatcherServlet
- 프론트 컨트롤러 (Front Controller) // 이것은 어떤 회사의 대표번호로 전화 걸면 총무부는 1번 , 뭐는 2번 으로 넘겨주는 그런 역할 이라 할 수 있다.
- 클라이언트의 모든 요청을 받은 후 이를 처리할 핸들러에게 넘기고 핸들러가 처리한 결과를 받아 사용자에게 응답 결과를 보여준다.
- DispathcerServlet은 여러 컴포넌트를 이용해 작업을 처리한다.
// 프론트 컨트롤러는 이론적으로는 한개 이상 사용할 수 있다 하는데 보통 한개 정도만 사용 한다.
- // 사실 스프링 mvc를 간단하게 사용한다면 저번 강의 까지 만 이해하면 크게 문제 없지만 더 깊게 이해하고 싶다면
- 이 강의 까지 들으면 좋다. 지금 내용이 무엇인지 잘 이해가 안가도 크게 문제가 없다. 그냥 읽고 넘어 가시면 되겠다.
- // 크게 이런 형식으로 동작
- //먼저 요청 선처리 작업부터 보자
- DispatcherServlet 내부 동작흐름
- DispatcherServlet 내부 동작흐름 상세 - 요청 선처리 작업
요청 선처리 작업시 사용된 컴포넌트
org.springframework.web.servlet.LocaleResolver
- 지역 정보를 결정해주는 전략 오브젝트이다. // 언어 세팅 관련 내용이다.
- 디폴트인 AcceptHeaderLocalResolver는 HTTP 헤더의 정보를 보고 지역정보를 설정해준다.
org.springframework.web.servlet.FlashMapManager
- FlashMap객체를 조회(retrieve) & 저장을 위한 인터페이스
- RedirectAttributes의 addFlashAttribute메소드를 이용해서 저장한다.
- 리다이렉트 후 조회를 하면 바로 정보는 삭제된다.
- // 스프링 3에서 추가된 기능이다
org.springframework.web.context.request.RequestContextHolder
- 일반 빈에서 HttpServletRequest, HttpServletResponse, HttpSession 등을 사용할 수 있도록 한다.
- 해당 객체를 일반 빈에서 사용하게 되면, Web에 종속적이 될 수 있다. //아주 권장 하는 방법은 아니다.
org.springframework.web.multipart.MultipartResolver
- 멀티파트 파일 업로드를 처리하는 전략
- DispatcherServlet 내부 동작흐름 상세 - 요청 전달
요청 전달시 사용된 컴포넌트
org.springframework.web.servlet.HandlerMapping
- HandlerMapping구현체는 어떤 핸들러가 요청을 처리할지에 대한 정보를 알고 있다.
- 디폴트로 설정되는 있는 핸들러매핑은 BeanNameHandlerMapping과 DefaultAnnotationHandlerMapping 2가지가 설정되어 있다.
org.springframework.web.servlet.HandlerExecutionChain
- HandlerExecutionChain구현체는 실제로 호출된 핸들러에 대한 참조를 가지고 있다.
- 즉, 무엇이 실행되어야 될지 알고 있는 객체라고 말할 수 있으며, 핸들러 실행전과 실행후에 수행될 HandlerInterceptor도 참조하고 있다.
org.springframework.web.servlet.HandlerAdapter
- 실제 핸들러를 실행하는 역할을 담당한다.
- 핸들러 어댑터는 선택된 핸들러를 실행하는 방법과 응답을 ModelAndView로 변화하는 방법에 대해 알고 있다.
- 디폴트로 설정되어 있는 핸들러어댑터는 HttpRequestHandlerAdapter, SimpleControllerHandlerAdapter, AnnotationMethodHanlderAdapter 3가지이다.
- @RequestMapping과 @Controller 애노테이션을 통해 정의되는 컨트롤러의 경우 DefaultAnnotationHandlerMapping에 의해 핸들러가 결정되고, 그에 대응되는 AnnotationMethodHandlerAdapter에 의해 호출이 일어난다.
- DispatcherServlet 내부 동작흐름 상세 - 요청 처리
//인터셉터는 일종의 필터라 생각하면 되겠다.
요청 처리시 사용된 컴포넌트
org.springframework.web.servlet.ModelAndView
- ModelAndView는 Controller의 처리 결과를 보여줄 view와 view에서 사용할 값을 전달하는 클래스이다.
org.springfamework.web.servlet.RequestToViewNameTranslator
컨트롤러에서 뷰이름이나 뷰 오브젝트를 제공해주지 않았을 경우 URL과 같은 요청정보를 참고해서 자동으로 뷰이름
을 생성해주는 전략오브젝트이다.디폴트는 DefaultRequestToViewNameTranslator이다.
- DispatcherServlet 내부 동작흐름 상세 - 예외처리
예외 처리시 사용된 컴포넌트
org.springframework.web.servlet.handlerexceptionresolver
- 기본적으로 DispatcherServlet이 DefaultHandlerExceptionResolver를 등록한다.
- HandlerExceptionResolver는 예외가 던져졌을 때 어떤 핸들러를 실행할 것인지에 대한 정보를 제공한다.
- DispatcherServlet 내부 동작흐름 상세 - 뷰 렌더링 과정
뷰 렌더링 과정시 사용된 컴포넌트
org.springframework.web.servlet.ViewResolver
- 컨트롤러가 리턴한 뷰 이름을 참고해서 적절한 뷰 오브젝트를 찾아주는 로직을 가진 전략 오프젝트이다.
- 뷰의 종류에 따라 적절한 뷰 리졸버를 추가로 설정해줄 수 있다.
- DispatcherServlet 내부 동작흐름 상세 - 요청 처리 종료
//참고로 저는 이과정을 한바퀴돌고 개인적으로 프로젝트를 진행하며 두번째 보는 거지만 50퍼센트 밖에 이해가 안갑니다.. 흠..
생각해보기
- DispacherServlet은 요청을 받은 후, 요청을 처리하기 위해서 여러가지 작업을 수행하고 있습니다.
- 개발자는 DispacherServlet이 어떤 방식으로 동작하는지 이해한다면 좀 더 잘 Spring MVC를 잘 사용할 수 있습니다.
- Spring외에 다른 프레임워크를 학습할 때에도, 해당 프레임워크의 동작원리를 이해하는 것은 굉장히 중요합니다.
- 어떻게 하면, 다른 사람이 만든 라이브러리나 프레임워크를 좀 더 잘 이해할 수 있을지 고민해보세요.
'IT > SpringMVC' 카테고리의 다른 글
10. 레이어드 아키텍처(Layered Architecture) 란? (0) | 2018.09.04 |
---|---|
9. Spring MVC를 이용한 웹 페이지 작성 실습 (0) | 2018.08.27 |
7. Spring MVC란? (0) | 2018.08.27 |
6. Spring JDBC 실습 (0) | 2018.08.24 |
5. Spring JDBC 소개 (0) | 2018.08.24 |