Spring MVC는 Model
, View
, Contoller
로 Spring 애플리케이션의 비즈니스 로직을 분리하여 개발하는 방식을 말한다.
HTTP
요청이 들어오면 그 요청에 대한 처리를 각각의 관심사에 따라 책임범위를 분류하고 그에 따라 효율적인 처리를 관리하는 방식이다.
MVC 패턴
에서 Model이란 데이터를 나타낸다. 데이터베이스와 통신하며 데이터를 처리하는 DAO
나 Repository
뿐만 아니라 Service
, DTO
, 변수 등 데이터를 다루는 모든 영역이 Model
에 해당한다.
Model
은 데이터와 데이터를 처리하는 컴포넌트들로써 View
또는 Controller
에 대한 어떤 정보도 가져서는 안된다.
필요한 데이터를 요청받으면 그에 맞는 데이터를 조회하고 가공하는 역할만 하고 그것을 UI에 직접 조정해서는 안되고, Controller
를 통해서 필요한 정보를 전달받고 결과를 반환한다.
View는 사용자에게 보여지는 UI를 나타내는 말로, html
이나 JSP
, Thymeleaf
등이 이에 해당한다.
Model
과 마찬가지로 Controller
또는 Model
에 대해 어떠한 정보도 가져선 안된다.
변경이 일어나면 필요한 처리에 대한 부분을 구현하여 Controller
를 통해 Model
과 소통하고 필요한 정보를 요청한다.
Controller는 Model
과 View
를 이어주는 중간다리 역할을 한다.
Model
과 View
에 대한 정보를 가지고 있으면서 변경을 지속적으로 모니터링해서 변경 사항의 처리에 필요한 내용을 각자에게 전달하는 역할을 한다.
최근에는 View
로 JSP
등을 사용하여 최종적으로 html
을 반환하기 보다는, 데이터만을 반환하는 API
개발이 주로 사용된다.
API
개발은 물리적인 개념에서의 View
를 프론트엔드로 분리하고 Model
과 Controloler
만 백엔드에서 처리함으로써 효율성을 향상시킨 방식이다.
그렇다면 이 방식은 Spring MVC
와 상반되는 개념인가 하면 관점에 따라 다를 수 있지만 꼭 그렇진 않다.
일반적으로 얘기하는 REST API
는 프론트엔드와 백엔드가 상호작용하기 위한 소통방식이기 때문에 MVC
구조가 없어진 것은 아니기 때문이다.
백엔드 애플리케이션 내에서 View
가 사라진 것이 아니라 논리적인 개념에서 View
가 html
이 아닌 JSON
또는 XML
형태로 반환되는 것이다.
결론적으로 Controller
가 반환하는 결과의 형태만 바꼈을 뿐, MVC
패턴의 사용 여부는 여전하다고 볼 수 있다.