사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴으로, 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있다.
사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있게 되는 장점이 있다. 이러한 "관심사 분리" 는 더 나은 업무의 분리와 향상된 관리를 제공한다.
모델은 앱이 포함해야할 데이터가 무엇인지를 정의한다. 데이터는 내부의 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있다. 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 이와 같은 통보를 통해 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 다른 적용 가능한 명령을 추가, 제거, 수정할 수 있다.
모델의 규칙
뷰는 앱의 데이터를 보여주는 방식을 정의한다. 모델로부터 표시할 데이터를 얻어온다.
뷰의 규칙
컨트롤러는 앱의 사용자로부터의 입력에 대한 응답으로 모델 및/또는 뷰를 업데이트하는 로직을 포함한다.
컨트롤러의 규칙
사용자가 보는 페이지, 데이터처리 그리고 이 두 가지를 중간에서 제어하는 컨트롤러. 이 3가지로 구성되는 하나의 애플리케이션을 만들면 각각 맡은바에만 집중할 수 있게 되어 효율성을 높인다.
서로 분리되어 각자의 역할에 집중할 수 있게끔 개발을 하고 애플리케이션을 만든다면, 유지보수성과 애플리케이션의 확장성 그리고 유연성이 증가하고 코드를 재사용함으로써 중복 코딩이라는 문제점 또한 사라지게 된다.
MVC패턴에서 뷰는 컨트롤러에 연결되어 화면을 구성하는 단위 요소이므로 다수의 뷰를 가질 수 있다. 그리고 모델은 컨트롤러를 통해서 뷰와 연결되지만, 컨트롤러에 의해서 하나의 뷰에 연결될 수 있는 모델도 여러 개가 될 수 있어 뷰와 모델이 서로 의존성을 띄게 된다. 즉, Controller에 다수의 Model과 View가 복잡하게 연결되어 있는 상황이 발생할 수 도 있다.
MVC패턴은 결국 어떻게 분리할 것인가
에 대한 해답 중 하나이다. 어떤 특정한 역할들에 대해 역할분담을 할 때 가이드라인을 제시하는 방법 중 하나가 바로 MVC패턴이라는 것이다. 이 패턴을 사용한 라이브러리나 프레임워크로 개발을 한다면 정말 쉽고 그리고 재밌는 경험을 느낄 수 있으며 아름다운 코드가 탄생하게 된다.
프레임워크 | 언어 |
---|---|
Spring | Java |
Django | Python |
ASP.NET | C# |
Express | JavaScript |
Ruby on Radils | Ruby |
Laravel | PHP |
참고
https://developer.mozilla.org/ko/docs/Glossary/MVC
https://opentutorials.org/course/697/3828
https://velog.io/@ljinsk3/MVC-%ED%8C%A8%ED%84%B4