
김영한 강사님의 "스프링부트 입문편" 강의를 보면서 자료조사한 내용을 토대로 MVC가 동작하는 방식을 정리해보겠습니다.
MVC란?
웹 계층에 서블릿API를 기반으로 클라이언트의 요청을 처리하는 모듈이 있는데 이를 스프링 웹 MVC라고 한다.
Model, View, Controller 로 구성되어 있고 각 역할에 맞게 클라이언트의 요청을 처리한다.
Model에는 View에 필요한 데이터가 포장된다고 생각하면 된다. Controller가 처리한 데이터를 담아서 View로 보낼 때 Model로 감싸서 보낸다.
Model에 담겨온 데이터와 반환받은 View이름을 통해 화면을 구성한다. 화면구성에 집중하는 역할이다.
실제 비즈니스 로직을 처리한다. 좀 더 자세히 말하자면, Controller가 Service를 호출해서 Service에서 비즈니스 로직을 처리 후 Repository를 통해 DB에 데이터 저장 후 반환받아서 다시 Controller로 반환하면 Model 객체에 데이터가 담겨서 View로 반환되는 것이다.
이게 뭔가 하고 찾아보니 Fornt Controller라고도 불리는데, 이게 등장하기 전에는 모든 컨트롤러가 클라이어느의 요청을 받는데, 공통되는 코드가 발생 할 수 밖에 없었다. FrontController가 등장하면서 모든 요청을 FrontController 하나로 받고 요청에 맞는 컨트롤러를 찾아 처리하면 되기 때문에 공통된 요소를 FrontController하나가 처리할 수 있게 된다.

- 클라이언트가 요청을 보냄
- DispatcherServlet이 요청을 가로채고 HandlerMapping을 통해 적절한 Controller를 조회
- Handler를 처리할 수 있는 HandlerAdapter를 조회
- HandlerAdapter를 통해 Controller를 실행
- Controller가 Service Repository를 통해 실제 비즈니스로직 처리 후 값을 반환 받음 (이 부분은 추후에 더 자세히 다룰 예정)
- DispatcherServlet이 Model과, View를 반환받는데, 좀 더 찾아보니 Controller가 String으로 반환하든, ModelaAndView로 반환하든, 파라미터의 Model객체에 정보를 담든 어댑터가 알아서 변환해준다. 고 함
- 그 후, ViewResolver를 호출해서 데이터를 전달하고 ViewResolver가 전달받은 View이름을 통해 파일을 찾는다. 이 때 템플릿엔진을 이용해서 HTML을 생성
- 다시 DispatcherServlet이 View를 반환받고, View 위치를 찾았기 때문에 반환받은 데이터들을 토대로 View가 실행되어서 클라이언트에게 요청을 반환
결국 정리해보자면 Controller, View, Service, Repository만 개발자가 작성을 잘 하면 나머지는 스프링이 알아서 처리해주는 것 같다. 그래도 동작흐름을 알아두면 좋지 않을까 해서 머리속에 있는 내용을 최대한 정리해 봤다.
이 다음엔 웹 애플리케이션 계층구조 (Service, Repository, Controller, domain)에 대해서 알아봐야겠다.
끗!