MVC(Model-View-Controller)는 소프트웨어 공학에서 흔히 사용되는 소프트웨어 디자인패턴
소프트웨어 공학에서 설계 측면에서 자주 발생하는 문제를 효율적으로 대처하기 위한 '해결패턴'이라고 할 수 있다. 즉, 특정 상황에서 자주 발생하는 문제들을 해결하는데 쓰이는 템플릿이라고 할 수 있다. 디자인패턴은 프로그래머가 어플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 방법이다.
MVC는 소프트웨어 디자인패턴 중 사용자 인터페이스, 데이터 및 논리 제어를 유연하게 구현하는데 널리 사용되는 패턴이다. 특히, 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있다. 모델-뷰-컨트롤러로 구분하는 '업무의 분리'를 통해 관리의 향상과, 추후 유지보수와 재사용성 측면에서 강점을 보인다.(유지보수성, 확장성, 유연성 등)
모델(Model) : 간단히, 데이터와 비즈니스 로직을 관리한다. 특히 어플리케이션이 포함해야할 데이터가 무엇인지를 정의하고, 상태가 변경되면 뷰나 혹은 컨트롤러에 응답하기도 한다.
뷰(View) : 말 그대로 '보여지는' 영역이다. 화면에 표시되는 글자부터, 체크박스, 테이블 등 시각적 요소를 담당한다. 모델에게 질의하여 데이터를 받고, 사용자에게 보여지는 화면을 정의한다.
컨트롤러(Controllor) : 어플리케이션의 사용자로부터 입력에 대한 응답으로 모델이나 뷰를 업데이트하는 로직을 포함한다. 단순히 데이터를 다른 방식으로 표시하기 위해 바로 뷰를 통해 처리하기도 한다. 쉽게 말해 문제를 해결하기 위한 과정이 구현된 곳.
모델(Model) ex) MariaDB, MongoDB...
- 애플리케이션 로직에 사용되는 모든 데이터가 정의되어야 한다.
- 모델이나 컨트롤러와 같은 다른 구성 요소를 알 필요가 없고, 몰라야 한다.\
- 변경이 일어났을 때 필요한 요소에 통지하는 방법이 정의되어야 한다.
뷰(View) ex) HTML, JSP...
- 모델이 가지고 있는 정보를 저장하는 로직이 없어야 한다.
- 모델이나 컨트롤러와 같은 다른 구성 요소를 알 필요가 없고, 몰라야 한다.
- 변경이 일어났을 때 필요한 요소에 통지하는 방법이 정의되어야 한다.
컨트롤러(Controller)
- 모델이나 뷰에 대해서 알고 있어야 한다.(원활한 중재를 위함)
- 모델이나 뷰의 변경을 모니터링 해야 한다.(각각의 구성 요소에게 통지)