[면접 준비] MVC 패턴
mvc(model-view-controller) 는 소프트웨어 디자인 패턴이다.
디자인 패턴이란 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 수 있는 해결책이다. 각기 다른 소프트웨어 모듈이나 기능을 가진 다양한 응용 소프트웨어 시스템들을 개발할 때도 서로 간에 공통되는 설계 문제가 존재하며 이를 처리하는 해결책 사이에도 공통점이 있다. 이러한 유사한 점들을 패턴이라 한다.
이러한 패턴은 공통의 언어를 만들어주며 팀원 사이의 의사소통을 원활하게 해주는 아주 중요한 역할을 한다.
디자인 패턴에는 Strategy, Singleton, Command, Observer 패턴 등 다양한 패턴이 있고 그 중의 하나가 바로 MVC 패턴이다.
MVC패턴은 Model, View, Controller의 약자로 소프트웨어의 로직과 화면을 구분하는데 중점을 두고 있다. 이러한 분리는 업무의 분리와 향상된 관리를 제공하기 위해서이다. 서로 분리되어 있으므로 각자 역할에만 집중하게 되어서 유연성이 증가하고 확장, 유지보수에서도 이점을 얻을 수 있게 된다.
MVC 패턴의 구조
MVC는 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 Model, View, Controller 총 3개의 역할로 구분한 패턴이다.
애플리케이션 사용자가 View에서 특정한 요청을하면 Controller는 그 요청을 받아들이고 Model에 요청을 전달한다. Model에서는 전달받은 대로 DB작업을 수행한 후 다시 그 결과를 Controller로 전달하면 Controller는 받은 결과를 View에 나타나게 해서 최종적으로 사용자에게 보여지게 되는 것이다.
그럼 Model, View, Controller는 무엇인지 좀더 자세히 알아보자.
🍁 Model
데이터와 비즈니스 로직을 관리하는 부분
- 애플리케이션이 포함해야 할 데이터가 무엇인지 정의한다.
- 애플리케이션이 "무엇"을 할 것인지 정의한다. 처리되는 알고리즘, DB와 상호작용 등의 내부 비즈니스 로직을 처리하기 위한 역할을 할 것이다.
🍁 View
레이아웃과 화면을 처리한다.
- 화면에 데이터를 보여주는 방식을 정의한다.
- 컨트롤러 하위에 종속되어, 모델이나 컨트롤러가 보여주려고 하는 모든 필요한 것들을 사용자에게 UI로 보여준다.
🍁Controller
명령을 모델과 뷰로 라우팅한다.
- 애플리케이션의 사용자로부터 입력에 대한 응답으로 model 또는 view를 업데이트하는 로직을 포함한다.
- Model과 View가 각각 무엇을 해야할 지 알고 있고, 통제한다. 비즈니스 로직을 처리하는 Model과 UI에 의존적인 View 사이에서 요청을 전달하고 전달받는다. 즉 Controller가 있으므로 Model과 View는 직접 연결될 수 없다.
MVC 의 한계
1. View와 Model간의 결합도가 높아서 Model을 재사용하기 어렵다. 따라서 애플리케이션이 복잡해지고, 새 기능을 추가할 때마다 다수의 model과 view를 추가하게 되면서 MVC는 크고 비대해질 수 있다. 즉 View와 Model이 서로 의존성을 띄게 되어서 Model과 View가 복잡하게 연결되는 상황이 생길 수 있는 것이다.
2. Controller는 View와 전체적인 life cycle과 강하게 연결되어 있어서 분리할 수 없기 때문에, 코드 분석/수정/테스트가 모두 쉽지 않은 작업이 될 수 있다.
참고 및 출처 :
1. https://developer.mozilla.org/ko/docs/Glossary/MVC
2. https://gmlwjd9405.github.io/2018/07/06/design-pattern.html