Model-View-Controller의 약자인 MVC는 소프트웨어 개발에서 사용되는 디자인패턴 중 하나이다. 이 패턴은 사용자 인터페이스와 비즈니스 로직을 분리하여 애플리케이션의 유지보수성과 확장성을 향상시키는데 도움이 된다.
각각은 다음과 같은 역할을 한다.
1. Model : 데이터와 비즈니스 로직을 관리한다.
2. View : 레이아웃과 화면을 처리한다.
3. Controller : 명령을 모델과 뷰 부분으로 라우팅한다.
** 라우팅? 라우팅은 네트워크에서 미리 정해진 규칙을 사용하여 최선의 경로를 선택하는 프로세스를 의미한다.

Model:
- 모델은 앱이 포함해야할 데이터가 무엇인지 정의한다.
- Data와 어플리케이션이 무엇을 할 것인지를 정의하는 부분으로 내부 비즈니스 로직을 처리하기 위한 역할을 한다.
- 주로 데이터베이스와 상호작용을 하며 기능을 제공한다.
- 데이터를 관리하고, 데이터의 유효성을 유지하며, 데이터의 변경 사항을 알리는 역할을 한다.
- 데이터 추출, 저장, 삭제, 업데이트 등의 역할을 수행한다.
Model은 다음과 같은 규칙을 따른다.
- 사용자가 편집하기를 원하는 모든 데이터를 가지고 있어야 한다.
- View나 Controller에 대해 어떤 정보도 알지 말아야 한다.
- 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.
View :
- View는 사용자에게 보여주는 화면(UI)에 해당한다.
- Model에 저장된 데이터를 사용자에게 보여주고 사용자 입력을 받아 Controller로 전달한다.
- 주로 사용자에게 데이터를 시각적으로 표현하는데 사용되며, 웹 애플리케이션에서는 HTML, CSS, JavaScript 등을 사용하여 구현한다.
- 사용자와 상호작용을 하며 컨트롤러부터 받은 모델의 결과값을 사용자에게 화면으로 출력하는 일을 한다.
- 여러 개의 View가 하나의 Model을 사용할 수 있고, 하나의 View가 여러 개의 Model과 상호작용할 수도 있다.
- Model에서 받은 데이터는 별도로 저장하지 않는다.
View는 다음과 같은 규칙을 갖고 있다.
- Model이 가지고있는 정보를 따로 저장해서는 안된다.
- Model이나 Controller와 같이 다른 구성요소들을 몰라야 한다.
- 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야만 한다.
** Model과 View는 서로의 존재를 몰라야 한다.
Controller :
- Controller는 Model과 View 사이를 이어주는 인터페이스 역할을 한다.
- 즉, Model이 데이터를 어떻게 처리할지 알려주는 역할을 한다.
- 사용자로부터 View에 요청이 있으면 Controller는 해당 업무를 수행하는 Model을 호출하고 Model이 업무를 모두 수행하면 다시 결과를 View에 전달하는 역할을 한다.
- 사용자 인터페이스와 비즈니스 로직 사이의 결합도를 낮추어 코드의 재사용성과 유지보수성을 높인다.
Controller는 다음과 같은 규칙을 갖고 있다.
- Model이나 View에 대해서 알고 있어야 한다.
- Model이나 View의 변경을 모니터링 해야 한다.
MVC 패턴의 특징:
1. 분리된 역할 : 각각의 구성요소(M/V/C)가 독립적으로 작동하여 역할이 명확하게 분리되어 있다. 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있다.
2. 확장성: 새로운 기능을 추가하거나 변경할 때, 해당 기능에 영향을 미치지 않는 부분에는 거의 영향을 주지 않고 수정이 가능하다. 이는 애플리케이션의 확장성을 향상시킨다.
3. 유연성: 각각의 구성요소가 독립적으로 작동하기 때문에, 다양한 조합으로 새로운 기능을 만들 수 있다.
4. 테스트 용이성: 각각의 구성요소가 독립적이므로 단위 테스트와 통합 테스트를 수행하기 쉽다.
5. 널리 사용되는 패턴 : MVC 패턴은 웹 애플리케이션 개발뿐만 아니라 다양한 소프트웨어 개발 분야에서 널리 사용되는 디자인 패턴 중 하나이다.
MVC 패턴의 구동원리:
1. 사용자 입력 : 사용자가 View를 통해 애플리케이션과 상호작용한다. 예를 들면, 웹 페이지에서 버튼을 클릭하거나 양식을 제출하는 등의 작업이 있다.
2. Controller 동작: View에서 발생한 사용자 입력은 Controller로 전달된다. Controller는 해당 입력을 처리하고, 필요한 작업을 수행하기 위해 Model과 상호작용한다.
3. Model 업데이트: Controller는 필요한 비즈니스 로직에 따라 Model의 데이터를 업데이트한다. 데이터의 유효성 검사나 변경 사항에 대한 알림 등도 Model에서 처리된다.
4. View 갱신: Model의 데이터가 변경되면, Model은 등록된 View에서 변경 사항을 알린다. View는 이를 받아서 화면에 적절한 방식으로 데이터를 표시하도록 갱신된다.