Spring MVC Flow
들어가며
스프링을 공부하면서 토비의 스프링을 보고있는데 2권이 거의 끝나간다
처음에 스프링 MVC 구조를 보면서 한번에 이해하기가 힘들었는데 그래도 어느정도 읽다보니 구조가 눈에 들어와서 다행이다
그래서 공부한 내용에 대해서 글을 써보려고 한다
Spring MVC란
Model, View, Controller을 분리한 패턴이다
Model
- 어플리케이션의 데이터를 의미한다
- POJO로 구성된다
- Bean
View
- 말 그대로 뷰다 그러기 때문에 보여준다
- Model의 데이터를 활용해 Html을 구성한다
- Jsp
Controller
- View와 Model 사이에 존재한다
- 사용자의 요청에 따라 적절한 결과를 Model에 담아 View에 전달한다
- Model Object를 구성해 View Name을 리턴한다
- Servlet
요청 흐름
- 웹브라우저에서 받은 요청은 우선 디스패처 서블릿을 거친다
- 디스패처 서블릿에서 모든 요청을 받기 때문에 프론트 컨트롤러 패턴이라고 한다
- 디스패처 서블릿이 받은 요청은 핸들러 맵핑으로 넘어가 요청을 어느 컨트롤러로 위임시킬지 결정한다
- URL을 참고하여 핸들러 맵핑에 다양한 전략에 따라 사용할 컨트롤러를 결정한다
- 핸들러 맵핑은 인터셉터의 전략을 통해 요청을 전처리한다
- Valid 등..
- 컨트롤러를 실행시키기 전 시점에 수행한다
- 등록된 인터셉터가 없다면 컨트롤러를 바로 호출한다
- 핸들러 맵핑을 통해 찾은 컨트롤러를 핸들러 어텝터가 직접 실행하는 기능을 수행한다
- 컨트롤러는 요청을 수행하고 요청을 보여줄 View Name을 Model Object와 함께 돌려준다
- 그 외에도 전략에 따라 Json, Xml 등등 다양하다
- 이 타이밍에 후처리 인터셉터가 수행된다
- Locale 정보를 위한 처리 등..
- ModelAndView를 받은 뷰 리졸버는 뷰 이름을 기반으로 뷰를 찾는다
- Prefix, Suffix와 조합하여 View Object를 반환한다
- Object를 받은 View는 요청에 따른 보여줄 결과를 생성한다
- 디스패처 서블릿이 웹 브라우저에 최종 결과를 전송한다