스프링 MVC가 무엇인지 알아보기에 앞서 사용하는 이유를 알아보면 비즈니스 로직(Model)과 사용자 인터페이스(View)를 위한 화면이 명확하게 구분되어 있기 때문이다.
MVC는 Model - View - Contoller의 약자이다. 하지만 스프링 MVC가 무엇인지에 대한 이해가 목적인 지금은 Model-Controller-View라 생각하고 읽기를 추천한다.
Model은 데이터 관리 및 비즈니스 로직을 처리하는 부분이다.
단순히 요청에 의한 로직만 처리하고 이 결과를 어디에 사용하는지, 어떻게 사용하는지는 전혀 상관하지 않는다.
DAO, DTO, Service 등
@Service를 통해 스프링 컨테이너에 등록된 객체는 Model에 해당된다.
View는 비즈니스 로직의 처리 결과를 통해 사용자 인터페이스가 표현되는 구간이다. 이 부분 역시 Model을 통해 전달받은 데이터가 어떤 데이터인지 전혀 상관하지 않는다. View는 html, jsp 등 화면을 구성하기도 하고, Rest API로 서버가 구현된다면 json 응답으로 구성되기도 한다.
Controller는 Model과 View를 연결해주는 역할을 한다. Model과 View는 서로 연결되어있지 않기 때문에 Controller가 사이에서 통신 매체가 되어준다. 간단하게 정리하면 다음과 같다
사용자 요청 -> Controller -> Model -> View
@Controller를 통해 스프링 컨테이너에 등록된 객체는 Controller에 해당된다.
MVC 처리과정을 알기위해 다음의 3가지 친구들을 알아야한다.
DispatcherServlet : 클라이언트에게 요청을 받아 응답까지의 MVC 처리과정을 통제한다.
HandlerMapping : 클라이언트의 요청 URL을 어떤 Controller가 처리할지 결정한다.
ViewResolver : Controller의 처리 결과(데이터)를 생성할 view를 결정한다.
클라이언트의 요청.
DispatcherServlet이 요청을 가로채어 HandlerMapping에게 요청에 알맞는 Controller를 알려달라고 일을 시킨다.
알맞는 Controller를 찾으면 DispatcherServlet은 해당 Controller에게 요청을 위임한다. 위 위임 과정은 ControllerAdapter가 해당되는 Controller에게 전달한다.
Controller는 맵핑되는 메서드를 실행하여 해당되는 Service는 비즈니스 로직을 수행한다.
Service는 비즈니스 로직을 처리한 후 결과를 Controller에게 다시 응답한다.
Controller는 응답받은 데이터를 어떤 view(ex jsp, html)를 통해 보여줄 것인지의 정보를 담아 DispatcherServlet에게 응답한다.
DispatcherServlet는 Controller(ControllerAdapter)에게 받은 view에 대한 정보를 ViewResolver에게 넘긴다.
ViewResolver는 jsp 또는 html을 찾아서 DispatcherServlet에게 응답한다.
DispatcherServlet는 응답받은 jsp 또는 html을 View에게 Render를 지시하고 결과적으로 클라이언트에게 View가 제공된다.
해당 게시글은 공부를 하며 기록해 나가는 글입니다.
혹여나 정리 내용에서 잘못된 부분이 있다면 언제든 피드백은 환영입니다!