처음 스프링을 접하는 당신! Spring은 유지보수가 쉬우며, 확장가능성이 유리하기 때문에 많은 영역에서 사용 중이다. 하지만 스프링의 동작하는 흐름을알지 못한다면, 이 블로그를 보는 것이 도움이 될것이다!
먼저 Spring MVC의 흐름을 알기 위해서는 MVC 가 무엇인지 알아야 한다. MVC는 디자인 패턴의 하나이며 Model, View, Controller의 약자이다. 프로젝트의 구성을 3가지의 역할로 구분한 패턴이다.
Model
데이터와 비즈니스 로직을 관리
- 앱이 포함해야할 데이터가 무엇인지 정의
View
레이아웃과 화면을 처리
- 앱의 데이터를 보여주는 방식을 정의
Controller
모델과 뷰로 명령을 전달
- 앱의 사용자로부터 입력에 대한 응답
MVC 흐름
MVC 는 서로 내부적으로 상호 작용하여 작동한다.
스프링의 내부적 흐름을 알기 위해서는 아래의 6개의 단어의 역할 과 단계별로 어떠한 상호작용이 일어나는 지에 대한 이해가 있어야한다.
DispatcherServlet
- dispatch(보내다)+er+Servlet(클라이언트의 요청을 처리, 결과를 반환)
- DispatcherServlet은 서버로 들어오는 모든 요청을 받아서 처리하고 공통처리 작업을 처리
- 작업을 적절한 세부 Controller에게 처리하도록 하고 예외 발생 시 일괄적인 방식으로 에러를 처리해주는 Front Controller
Front Controller란?
주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러로써, MVC 구조에서 함께 사용되는 디자인 패턴.
Handler Mapper
- 받은 요청이 어떤 컨트롤러(핸들러)가 처리하는지 결정.
- 특정 요청 경로를 처리해주는 Hanlder를 찾아주는 객체
( ex. @Controller)
HandlerAdapter
- 컨트롤러(핸들러)가 처리한 결과값을 받아서 MAV(ModelAndView) 형태로 바꿔 DispatcherServlet에 전달.
- 어떤 형태의 객체로 결과 값을 받던지 간에 상관 없이 웹요청 처리 가능
@Controller public Class Controller{ public String exAdapter(Model model){ model.addAttribute("greeting", "안녕하세요"); return "hello"; } }
hello라는 String값을 반환해도 HandlerAdapter에서 ModelAndView형태로 변환시켜서 값을 전달
Controller
- 클라이언트의 요청을 처리한 뒤 Model 호출
- MAV(Model And View) 형삭으로 반환
ViewResolver
- Controller가 리턴한 View 이름으로 실행될 JSP 경로 완성
View
- 응답화면 생성
Spring은 DispatcherServlet, HandlerMapping, ViewResolver는 Spring이 내부적으로 해준다. 따라서 DispatcherServlet, HandlerMapping, VIewResolver는 setting만 하고 Controller 와 View만 만들면 된다!
고객(브라우저)이 HTTP 요청을 URL로 보내면, Spring MVC의 DispatcherServlet이 요청을 받는다.
DispatcherServlet는 HandlerMapper를 통해서 HTTP요청을 처리할 Controller 를 찾는다.
HandlerMapper는 받은 요청의 URL를 처리할 Controller 를 선택하고, 선택된 Controller 와 세부사항을 DispatcherServlet에게 반환한다.
현재 DispatcherServlet는 요청을 처리할 Controller 를 사용할지 알고 있으므로, DispatcherServlet는 해당 Controller 로 요청을 전달한다.
이제 Controller 는 요청과 유효성을 처리하여 model 데이터를 만든다. 마지막으로 Controller 는 MAV(응용프로그램에 표시되는 이름의 model&view)를 DispatcherServlet에 반환한다.
DispatcherServlet는 application에 logical view 와 physical view를 해결하기 위해서 ViewResolver에 전달한다
ViewResolver는 logical view와 phsical view를 연결시키고 actureal view를 DispatcherServlet에게 반환한다.
DispatcherServlet는 view와 model을 View에게 전달한다.
View는 view, model,form을 병합하여 HTML로 결과를 형성하여 DispatcherServlet로 반환한다.
그 결과 DispatcherServlet는 HTML 결과를 형성하여 고객(브라우저)에게 렌더링을 위한 응답으로 다시 반환한다
블로그를 보면서 알았던 것을 체크 하세요