MVC 패턴의 정의
- Model, View, Controller 의 약자인 MVC는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.
- 소프트웨어의 비지니스 로직과 화면을 구분하는데 중점을 두고 있으며, 이러한 “관심사 분리”는 더 나아진 업무의 분리와 향상된 관리를 제공한다.
Laravel MVC Pattern
*사용자가 Controller를 사용하면 Controller는 Model에게서 데이터를 받은 후, 해당 데이터를 View를 통해 화면으로 출력하게 된다.
MVC 설계원칙
- 각 구성 요소의 역할과 책임을 명확하게 구분해야 한다.
- Model
- 어플리케이션의 핵심 데이터와 비지니스 로직을 나타내며 데이터 저장소와의 상호작용, 데이터 처리 및 유효성 검사와 같은 작업을 수행하며, Model은 독립적으로 동작한다.
- View
- 어플리케이션의 인터페이스를 담당한다. Model에서 데이터를 받아 화면에 출력해주며, 받은 입력값을 Controller에 전달한다.
- Controller
- 사용자 입력을 처리하며 어플리케이션의 흐름을 제어한다. View에서 전달된 사용자 입력을 분석하며 Model에서 필요한 기능을 호출하고 데이터를 가공 후 View에 전달한다.
- Model
- 구성 요소간의 결합도 최소화
- 결합도 최소화를 위해 구성 요소간의 직접적인 참조를 피하고 구성 요소는 독립적이고 재사용 가능한 모듈로 개발되어야 한다. 이를 통해 프로젝트의 규모가 커지거나 요구사항이 변경될 시 쉽게 확장 및 수정이 가능해야하며, 각 구성 요소는 다른 구성 요소와의 의존성을 최소화해야 한다. 이를 통해 각 구성 요소를 독립적으로 개발 및 수정, 테스트를 진행할 수 있다.
- 코드의 재사용성과 확장성 고려
- 각 구성 요소는 독립적이고 재사용 가능한 모듈로 개발되어야 한다. 이를 통해 프로젝트의 규모가 커지거나 요구사항이 변경될 시 쉽게 확장 및 수정이 가능해야한다.
단점
View와 Model 사이의 의존성이 높다. 높은 의존성은 어플리케이션이 커질수록 복잡해지며, 유지보수가 어려워진다. 즉, 하나의 View에 여러개의 Model이 연결될수도 있으며, 반대로 하나의 Model에 View가 여러개가 될 수 있다. 결국 복잡한 구조의 어플리케이션일수록 Controller에 다수의 View와 Model이 연결되어 서로간의 의존성이 커지는 상황이 발생한다.