MVC(Model-View-Controller) 패턴

MVC 패턴이란?

모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 MVC 패턴은 프로그램의 처리를 역할별로 나누어 개발을 한다는 생각으로 웹 시스템 개발에 자주 사용된다.
MVC 패턴은 시스템 처리의 핵심이 되는 Model, 화면 표시나 입출력을 수행하는 View, 사용자로부터의 입력 정보를 받고, 그 내용에 따라 Model와 View 를 제어하는 Controller의 각각의 이니셜을 모와서 여 조합한 것이다.
Model”, “View”,"Controller"로 나누면 시스템 개발이 정리되어 개발 효율을 높일 수 있다. 그래서 효율을 최우선하는 경우나, 개발 스탭의 부담을 경감하는 경우에 적절한 개발 방법이라고 할 수 있다.

MVC
이미지 출처: https://developer.mozilla.org/ko/docs/Glossary/MVC

데이터베이스와 데이터를 전달하는 Model(모델)

Model은 시스템의 비즈니스 로직을 담당하는 부분으로, 말하자면 시스템의 본체, 근간에 해당하는 부분이다. 데이터베이스와 데이터의 교환을 처리하는 부분으로, 구체적으로는, 시스템 내부의 데이터 처리나 데이터베이스에의 보존등도 실시하기 때문에, 매우 중요한 부분이 된다.

특히 클라이언트로부터 요청을 받은 Controller는 Model에 데이터를 검색하도록 지시한다. 지시를 받은 Model은 데이터베이스에서 데이터를 검색하고 Controller로 데이터를 보낸다.
Model은 데이터베이스에서 데이터를 검색하는 것 외에도 검색된 데이터를 데이터베이스에 저장, 업데이트 및 삭제할 수 있다.
그리고, 데이터베이스로부터 받은 데이터를 Controller가 다루기 쉽게 변환해 송신하기도 한다. 예를 들어, 데이터베이스는 날짜를 저장할 때 “2022-12-03"로 저장되는 경우가 많지만, 여기서 “2022년 12월 03일"과 같이 읽기 쉬운 형태로 변환하여 Controller에 보내주므로써, 이후 작업에서도 이해하기가 쉬워진다.

동적 생성된 HTML을 바탕으로 화면 표시를 실시하는 View(뷰)

View 는 사용자가 PC나 스마트 폰등으로 보는 화면에 해당하는, 사용자 인터페이스 부분의 처리를 실시하고 있다. 또, 화면 표시 뿐만이 아니라, 레이아웃이나 메뉴, 버튼의 조작성 등, 디자인면이나 조작성에 관해서도 View 의 역할이다.

구체적으로는 Controller가 Model로부터 받은 데이터를 받고, 제어를 한 후에 View 에 데이터를 송신한다. 이 때, 그대로는 웹 브라우저에 표시되지 않고, HTML이나 CSS, JavaScript등의 처리를 수행하여 화면 표시를 하게 되어 있다.

View와 Model을 제어하는 ​​Controller(컨트롤러)

Controller는 View와 Model의 동작을 제어한다. Controller 자체는 화면 표시나 로직의 실행은 하지 않고, 클라이언트로부터의 입력에 따라, 필요한 로직의 실행을 Model에 지시하고, 그 결과의 표시를 View 에 지시하는 등에 중재적인 역할을 하기에 중요한 포지션이라고 할 수 있다.

구체적으로는, 클라이언트로부터 받은 요구를 미리 정해진 방법으로 처리하여(라우팅), Model에 데이터의 조회 등을 지시하여, 조회한 데이터를 받아온다. 그러고, 해당 데이터를 View로 보낸다.

Flow

  1. 클라이언트가 보낸 요청을 Controller가 받는다. (Request)
  2. Controller가 Model에 처리의 실행을 지시한다.
  3. 지시를 받은 Model이 처리 결과를 Controller에 송신한다.
  4. Controller가 View에 표시의 실행을 지시한다.
  5. View에서 화면 표시한다. (Response)

이와 같이 MVC 패턴은 비즈니스 로직이 되는 Model, 화면 표시나 입출력을 담당하는 View, Model과 View를 중개하는 Controller와 역할을 나누어 개발을 진행하는 방법으로, 이 방식을 채용한 프레임워크는 많이 존재한다. 그 중에서도 Java 프레임워크 “Spring"이나, Ruby 프레임워크 Ruby on Rails, Python 프레임워크 django 등이 대표적이다.

MVC 패턴의 역사

MVC 패턴은 1979년에 제록스 파로알토 연구소에서 트리그벨렌스카우그(Trygve Reenskaug)에 의해 고안된 것이 시작이다. 원래는 오브젝트 지향의 프로그래밍 언어 및 통합 개발 환경인 「Smalltalk(스몰 토크)」의 윈도우 프로그램 개발에 있어서의 설계 지침으로서 탄생했지만, 그 후 GUI 사양의 소프트웨어 구조가 복잡화해 버린다고 하는 과제로부터 MVC 패턴의 다양성이 주목을 끌고 일약 확산을 보였다. Web시스템에 널리 이용되게 된 것은 「JavaServer Pages(JSP)」로 채용된 것이 계기라고 전해지고 있다.

MVC 패턴의 장점

MVC 패턴은 역할별로 독립적이기 때문에 작업 구분도 명확화되고 병렬 개발이 가능한 개발 효율이 향상되는 것은 물론, 보수성도 높일 수 있다. 예를 들어, UI 부분에 문제가 발생하면 클라이언트에 대한 화면 표시 역할을 담당하는 View 부분에 원인이 있다고 추측할 수 있다. 이러한 과제 해결 공수도 최소한으로 유지할 수 있다. 또한 Controller나 Model에의 영향을 억제할 수 있는 장점도 있다. 그리고, 이와 같이 MVC 패턴에서는 컴포넌트 간의 의존성이 최소화되어 코드의 재사용성도 높다.

MVC 패턴의 단점

개발 효율의 향상을 기대할 수 있는 MVC 패턴이지만, 개발 효율이 떨어질 우려가 있는 단점도 존재한다.
MVC 패턴은 기능별로 개발을 구분하므로 각 기능을 구분해야 한다. 그러나, 이것은 코드 기술에 제약이 늘어나는 것도 연결되어 경우에 따라서는 오히려 시간이 걸려 버리는 경우도 있다. 또, 이러한 특징로 인해 소규모의 개발에는 적합하지 않은 경우도 있다.
또한, 향상된 기능은 데이터베이스와의 상호 작용 및 데이터 변환을 수행하는 Model 부분과 그 중재를 역할을 하는 Controller 부분에 부담이 가해 처리 속도가 느려질 가능성이 있다. 그리고, Controller에서 Model에 대한 지원이 너무 커지면 Model의 Controller에 대한 의존도가 높아져 MVC 패턴의 장점인 기능별 독립성을 유지할 수 없게 될 우려가 있다. 그래서, 시스템 개발을 수행하는 경우는 미리 개발 규모를 파악을 해둘 필요가 있다.

단점 회피

시스템 개발의 기능 확대로 인한 단점을 피하려면 Controller와 Model 부분의 무리한 기능 확장을 하지 않는 것이 요구된다.
Controller 부분과 Model 부분에 대한 부하를 줄임으로써 원활하게 시스템 개발을 진행할 수 있을 것이다.
모델이 적절한 내용인지 확인하고 필요한 처리를 엄선하여 부하를 최대한 줄일 수 있다.

보다 작업 효율을 높이기 위해

MVC 패턴은 기능별로 분업할 수 있으므로 각 분야에 전문가를 배치함으로써 보다 작업 효율을 높일 수 있다. MVC 패턴은 시스템 개발의 개념이지만 개발 이외에도 회사의 구조와 구조를 나타내는 경우에도 사용된다. 일을 원활하게 하기 위해서도 기억해 두어 손해는 없을 것이다.

참조 문서




최종 수정 : 2022-12-03