MVC(Model - 모델, View - 뷰, Controller - 컨트롤러) 패턴은 사용자 인터페이스(UI)와 Business Logic(비즈니스 로직)을 분리하여 사용자 인터페이스, 데이터, 제어를 분리하여 구현할 수 있게 해주는 Software Design Pattern(소프트웨어 디자인 패턴)입니다.
💡Model (모델)
응용프로그램의 정보(데이터 - 사용자가 입력/수정/삭제할 수 있는 모든 데이터)입니다. 정보는 데이터 값뿐만 아니라 데이터를 표현하기 위한 메타데이터(속성 정보)도 가지고 있습니다. 그리고 API를 통해 데이터베이스와 통신하여 검색/저장/관리하고 Business Logic(비즈니스 로직)을 처리합니다.
Controller(컨트롤러)로부터 이벤트(입력/수정/삭제)가 전달되면 Model(모델)은 이벤트를 처리하여 데이터를 업데이트합니다. (이벤트 수신)
💡View (뷰)
모델(데이터)을 이용하여 사용자와 상호작용하는 인터페이스(UI)에 표시합니다. (뷰는 모델을 따로 저장하지 않습니다.)
사용자가 인터페이스(UI)를 통해 입력/수정/삭제하면 Model(모델)이 변경되는 것이므로 Model(모델)의 정보를 이용하여 Controller(컨트롤러)에게 이벤트를 전달합니다. (이벤트 송신)
💡Controller (컨트롤러)
사용자가 입력한 데이터를 처리하고 응답하거나 사용자의 상호작용으로 들어온 이벤트(변경 사항)들을 처리하고 모델과 뷰에 전달(통지) 합니다. (컨트롤러는 모델에 맞는 뷰를 선택합니다.)
View(뷰)로부터 이벤트(입력/수정/삭제)가 전달되면 Controller(컨트롤러)는 Model(모델)에 이벤트를 전달하여 처리하고 업데이트된 데이터를 View(뷰)로 전달하여 인터페이스(UI)에 표시되게 합니다.
MVC 패턴을 사용하면 구성 요소(Model - 모델, View - 뷰, Controller - 컨트롤러) 간의 결합도(Coupling)가 낮아져 각각 분리하여 개발할 수 있고 수정이나 확장이 가능해집니다.
MVC 패턴의 장점
여러 개발자가 역할을 나눠서 모델, 컨트롤러, 뷰를 동시에 개발할 수 있습니다.
예를 들어 Java개발자가 모델과 컨트롤러를 개발하고, UI 개발자가 뷰부분을 담당하여 개발할 수 있습니다.
이를 통해 개발시간 단축과 역할분리가 가능합니다.
중복코드를 없앨 수 있고, 확장성있고 유연한 코딩이 가능합니다.
예를 들어, Java 코드로 로직을 설계한것이 웹으로 배포할 내용과, 앱으로 배포할 내용이 있다면 View 부분만 바꿔서 코딩할 수 있습니다.
각 컴포넌트별로 나눠져 있어 디버깅과 테스트가 용이 합니다.
MVC 패턴의 단점
규모가 커질수록 파일이 많아져 복잡해질 수 있습니다.
하나의 새로운 기능을 구현하려면 Model, View, Controller를 각각 따로 만들어서 너무 많은 파일이 생성될 수 있습니다.
(설계를 잘 할 수 있다면 하나의 컨트롤러가 여러 뷰를 의존하도록 하는 식으로 파일수를 줄일 수 있긴 합니다. )
개발자 수가 적으면 오히려 유지보수 시간이 길어질 수 있습니다.
하나의 파일에서 모든 로직을 처리하도록 하도록 하면 해당 파일만 수정하면 되나,
MVC 패턴으로 개발을 하면 여러 파일을 왔다갔다 하면서 수정해야하기 때문에 유지보수 개발하는데 시간이 더 걸릴 수 있습니다.