Spring

[Spring] MVC 구조 이해

lala9663 2022. 11. 1. 16:30

MVC

Model, View, Controller의 약자이며, 애플리케이션을 구성하는 요소를 역할에 따라 세 가지 모듈로 나누어 구분한 패턴

1. Model

어플리케이션의 데이터이며, 모든 데이터 정보를 가공하여 가지고 있는 컴포넌트

  • 사용자가 이용하려는 모든 데이터를 가지고 있어야 하며, View 또는 Controller에 대해 어떤 정보도 알 수 없어야 한다.
  • 변경이 일어나면 처리 방법을 구현해야 한다.

2. View

시각적인 UI요소를 지칭하는 용어

  • Model이 가지고 있는 데이터를 저장하면 안 된다.
  • Model이나 Controller에 대한 정보를 알면 안 되며 단순히 표시해주는 역할을 가지고 있다.
  • 변경이 일어나면 처리 방법을 구현해야 한다.

3. Controller

Model과 View를 연결해주는 역할

  • Model 또는 View에 대한 정보를 알아야 한다.
  • Model 또는 View의 변경을 인지하여 대처를 해야 한다.

 

Spring MVC 기본구조

 

Spring의 MVC 구조는 MVC2 패턴 방식을 따르며 이 MVC2의 아키텍처에 맞게 설계되어 있다.
스프링에서는 유저의 요청을 받는 DispatherServlet이 핵심이다.

 

 

동작 순서

  1. 클라이언트가 서버에 요청을 하면 front controller 인 DispatcherServlet 클래스가 요청을 받는다.
  2. DispatcherServlet는 프로젝트 파일 내의 servelt-context.xml 파일의 @Controller 인자를 통해 등록한 요청 위임 컨트롤러를 찾아 매핑(mapping) 된 컨트롤러가 존재하면 @RequestMapping을 통해 요청을 처리할 메소드로 이동한다.
  3. 컨트롤러는 해당 요청을 처리할 Service를 받아 비즈니스 로직을 서비스에게 위임한다.
  4. Service는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야 한다면 DAO에 요청하여 처리를 위임한다.
  5. DAO는 DB 정보를 DTO를 통해 받아 서비스에게 전달한다.
  6. 서비스는 전달받은 데이터를 컨트롤러에게 전달한다.
  7. 컨트롤러는 Model 객체에게 요청받은 View 정보를 담아 DispatcherServlet에게 전송한다.
  8. DispatcherServlet는 ViewResolver에게 전달받은 View정보를 전달한다.
  9. ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.
  10. DispatcherServlet는 응답할 뷰의 Render를 지시하고 뷰는 로직을 처리한다.
  11. DispatcherServlet는 클라이언트에게 Rendering 된 뷰를 응답하며 요청을 마친다.

용어정리

 

*HandlerMapping

  • 요청을 직접 처리할 컨트롤러를 탐색한다. 구체적인 mapping은 xml파일이나 java config 관련 어노테이션 등을 통해 처리할 수 있다.

*HandlerAdapter

  • 매핑된 컨트롤러의 실행을 요청한다.

*Controller

  • 직접 요청을 처리하며, 처리 결과를 반환한다. 여기서 결과가 반환되면 HandlerAdapter가 ModelAndView 객체로 변환되며, 여기에는 View Name과 같이 응답을 통해 보여줄 View에 대한 정보와 관련된 데이터가 포함되어 있다.

*View Resolver

  • View Name을 확인한 후, 실제 컨트롤러로부터 받은 로직 처리 결과를 반영할 View 파일(jsp)을 탐색한다.

 

 

 

 

출처: https://ss-o.tistory.com/160, https://hpark3.tistory.com/28