먼저 MVC란 무엇일까? MVC는 Model, View, Controller의 약자다.
각자의 역할은 무엇일까?
Model
View
Controller
왜 MVC로 역할을 나눈 것일까?
애플리케이션을 개발할 때, 하나의 역할이 서로 분리되어 각자의 역할을 만든다면 어떨까? 각자의 역할에 집중할 수 있게 된다. 또한, 역할을 나누었기에 유지보수성과 확장성, 유연성이 좋아진다.
MVC는 변천사가 있다. Model 1방식과 2방식이 있는데, 둘은 비즈니스 로직 영역과 프레젠테이션 영역이 분리되어있는지, 아닌지 차이다. Model 1방식이 비즈니스 로직 영역과 프레젠테이션 영역이 통합되어 있다 보니 유지보수에 어려움이 있었다. 그래서 View와 Controller를 분리시킴으로 이를 해결했다.
Spring MVC는 Model 2방식을 발전시킨 형태를 사용한다. 이러한 형태가 Spring 모듈 중 Web 모듈에 구현되어있다. Spring MVC는 어떤 형태를 가지고 있는지 밑에서 설명하겠다.
먼저 요청을 Dispatcher Servlet이 받는다.
Dispatcher Servlet이 요청을 처리해줄 컨트롤러와 메서드가 무엇인지 알기 위해 Handler Mapping에게 물어본다.
Dispatcher Servlet은 해당 컨트롤러와 메서드를 알았다면 Handler Adapter에게 실행을 요청한다.
Handler Adapter가 컨트롤러와 해당 메서드를 실행시킨다.
find()
메서드를 실행했다.find()
메서드에 있는 Service 로직이 실행된다.실행시킨 결과를 Model에 받아서 전달한다.
5번 과정에서 Dispatcher Servlet은 컨트롤러가 출력한 view name을 알고 있다. view name을 가지고 View Resolver가 알맞은 view를 찾아 렌더링해준다.
The ViewResolver provides a mapping between view names and actual views. - Spring Docs
View Resolver가 어떤 View인지 정확하게 알려주게 되면 데이터를 전달한다.
결과를 응답한다.
boostcourse - 웹 백엔드