Spring

[Spring] Spring MVC 설명

오잎 클로버 2022. 2. 1. 10:10
728x90

MVC. Model, View, Controller의 약자로서 3가지를 분할하여 보다 원활하게 개발을 할 수 있습니다.

AOP(관점 지향 프로그래밍)와 관련 있으나, 자세한 내용은 추후 포스팅하도록 하겠습니다.

(포스팅이후, 해당 포스트 링크 추가하도록 하겠습니다.)

Model, View, Controller를 분리한 디자인 패턴

 

Model

  • Controller에서 View로 객체를 전달하는 데 사용됨
  • 어플리케이션 상태(data)를 나타냄
  • 일반적으로 POJO로 구성함
  • Java Bean
  • view에서 attribute의 key값을 통해 value값을 사용할 수 있음

View

  • Model data의 렌더링을 담당하며, HTML output을 생성
  • JSP, thymeleaf, freemarker, groovy 등 (여러 템플릿)

Controller

  • View와 Model사이의 인터페이스 역할
  • Model/View에 대한 사용자 입력 및 요청을 수신하여 그에 따라 적절한 결과를
    Model에 담아 View에 전달
  • Model Object에 Model를 화면에 출력할 view name을 반환
  • Controller → Service → DAO → DB
  • Servlet

 

위와 관련된 클래스로는 Dispatcher Servlet, View Resolver, HandlerMapping

Dispatcher Servlet은 사용자의 요청을 받고, 이를 HandlerMapping으로 전달하는 역할을 수행

HandlerMapping은 해당 요청을 수행할 Controller를 찾고 

요청 url에 해당하는 Controller를 저장하는 Table을 가진다.

즉, 클래스에 @RequestMapping("/url") 어노테이션을 명시하면
해당 URL에 대한 요청이 들어왔을 때 table에 저장된 정보에 따라
해당 클래스 혹은 메소드에 Mapping하는 역할을 수행합니다.

View Resolver는 Controller가 반환한 view name에 대한 prefix, suffix를 적용하여 

View Object를 반환한다.

이후, 해당 View에서 이 Model data를 이용하여 적절한 페이지를 만들어 사용자에게 보여주는 역할을 수행합니다.

 

글로만 이해하는 데에는 굉장히 어렵기에 그림으로 보자면 이해하는 데 도움이 됩니다.

더보기

request -> Dispatcher Servlet(대충 http 통신을 받는 친구) -> Mapping(대충 url 검사) -> 해당 url에서 작동할 controller 정함 -> Adapter(대충 Controller 연결(작동)해주는 친구) -> controller 실행 -> controller는 비지니스 로직 수행 -> Model 정함 -> Model 이름 반환 -> View(화면/프론트) 결정하는 View Resolver에게 의뢰 -> View Resolver가 View 결정함 -> View 객체 생성 -> View에게 View(화면/프론트)를 보여주도록 요청 -> View는 해당하는 View(화면/프론트)를 호출하며, controller가 정한 Model 객체에서 화면 표시에 필요한 객체를 가져와서 화면 표시 처리;

 

이상입니다.