(모델-뷰-컨트롤러 패턴)는 사용자 인터페이스(뷰), 데이터 및 논리 제어를 구현하는데
사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데
중점을 두고 있으며, 이러한 관심사 분리는 더나은 업무의 분리와 향상된 관리를 제공합니다.
일단 이 사진이 흐름관계라고 볼 수 있다.
이 말을 쉽게 정리를 해보자면
1. 사용자의 Request(요청)를 Controller가 받는다.
2. Controller는 Service에서 비즈니스 로직을 처리한 후 결과를 Model에 담는다.
3. Model에 저장된 결과를 바탕으로 시각적 요소 출력을 담당하는 View를 제어하여 사용자에게 전달한다.
이 개념을 web 에서 사용한다고 하면
User: 사용자가 웹 사이트에 접속한다.
Manipulates: Controller는 사용자가 요청한 웹 페이지를 보여주기 위해 Model을 호출한다.
Updates: Model은 비즈니스 로직을 통해 DB 및 파일과 같은 데이터를 제어한 후 결과를 반환한다. 이후 Controller는 Model에게 반환받은 결과를 View에 반영한다.
Sees: 데이터를 받아온 View가 사용자에게 웹 페이지를 출력하여 보여준다.
이것이 흐름이다. 그리고 이제 이들이 각각 어떤 역할을 수행하는지 알아보자.
Model 은 소프트웨어나 애플리케이션에서 정보 및 데이터 부분을 의미한다. 이는 Controller에게 받은 데이터를 조작(가공)하는 역할을 수행한다고 볼 수 있다. 즉, 데이터와 관련된 부분을 담당하며 값과 기능을 가지는 객체라고 보면 된다.
Model 이 가지는 규칙으로는 다음과 같다.
1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
2. View나 Controller에 대해서 어떤 정보도 알지 말아야 한다.
3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.
View 는 입력값이나 체크박스 등과 같은 사용자 인터페이스 요소를 나타낸다. 이는 Controller 에게 받은 Model의 데이터를 사용자에게 시각적으로 보여주기 위한 역할을 수행한다. 사용자에게 보여지는 화면이라고 볼 수 있다.
View가 가지는 규칙으로는 다음과 같다.
1.Model이 가지고 있는 정보를 따로 저장해서는 안된다.
2.Model이나 Controller를 알고 있을 필요가 없다.
3.변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.
Controller는 Model과 View 사이에서 데이터 흐름을 제어한다. 사용자가 접근한 URL에 따라 요청을 파악하고 URL에 적절한 Method를 호출하여 Service에서 비즈니스 로직을 처리한다. 이 후 결과를 Model에 저장하여 View에게 전달하는 역할을 수행한다. 결국 Controller는 Model과 View의 역할을 분리하는 중요한 요소이다.
이러한 Controller가 가지는 규칙은 다음과 같다.
1.Model이나 View에 대해서 알고 있어야 한다.
2.Model이나 View의 변경을 모니터링 해야 한다.
MVC 패턴의 사용이유로는 바로 관심사의 분리이다.
조금 덧붙이자면 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있고, 이러한 관심사 분리는 더 나은 업무의 분리와 향상된 관리를 제공한다.