본문 바로가기

CS

[CS]MVC패턴이란?

MVC패턴 뜻


  • MVC는 Model-View-Controller의 약자로 프로그램 구성 요소를 크게 3가지로 구분한 것
  • MVC패턴은 소프트웨어 디자인 패턴으로 일종의 프로그램 개발 방법론

왜 MVC 패턴을 사용할까?

디자인 패턴을 적용하기 전에는 클래스 안에 온갖 코드가 섞여 존재했음. 기능이나 성격별로 구분되지 않아 유지보수가 어려웠음. 따라서 확장성과 유연성을 높이기 위해 역할에 따라 코드를 구분한 MVC패턴이 등장함

  • 프로그램을 어떻게 설계하고 나눌지에 대한 일종의 가이드라인이자 개발자들 사이의 공통 규약같은 개념
  • 어떻게 기능적으로 구분하고 관리할지에 대한 고민
  • 유지보수가 편리하며(비즈니스로직 부분과 UI로직 부분을 나누어 관리) 확장성 및 유연성에 유리하며 중복 코드 등을 방지할 수 있음
사용
  • MVC패턴을 사용하는 프레임워크나 라이브러리는 AngularJS, python django 등

Model-View-Controller


  • User가 controller를 조작해 model을 통해 데이터를 가져오고 그 데이터는 View를 통해 사용자에게 전달 됨
  • Model은 비즈니스로직 처리를 담당하며 알고리즘, 데이터 등
  • Controller는 사용자의 요청을 받아 Model과 View를 연결시켜주는 역할
  • View는 화면으로 보여주는 부분으로 웹페이지, 어플리케이션 화면 등

Model: 어플리케이션 데이터, 자료
  • 사용자가 원하는 모든 데이터를 가지고 있어야 함(db, 문자열, 상수 등 변수 포함)
  • 뷰나 컨트롤러에 대한 정보가 없음(정보만 반환하거나 설정), 모델 내부에 뷰나 컨트롤러에 대한 코드가 있으면 안 됨
  • 변경이 일어나면 이를 감지하고 통지할 시스템이 필요함
Controller : Model과 View사이를 이어주는 브릿지(Bridge)역할
  • 모델이나 뷰에 대해 각각 어떠한 역할과 책임이 있는지 알고 각각의 변경을 모니터링 해야함(뷰와 모델에 대한 코드가 있어도 됨)
  • view가 model로 부터 데이터를 받을 때 controller를 거쳐서 받음
  • 입력이 발생하면 알림
View : 유저 인터페이스(User interface)
  • 모델에만 의존해야 하며 컨트롤러에 의존하면 안 됨
  • 공통 정보들은 view 자체적으로 가지고 있고 사용자마다 다르게 보여줘야 하는 부분들만 model에서 데이터를 가져온다
  • 변경이 일어나면 감지하고 통지할 시스템이 필요함

문제점


  • 복잡한 대규모 프로그램을 개발을 하게 되면서 문제점 발생
  • 다수의 View와 Model이 Controller를 통해 복잡하게 연결되면서 Controller가 뚱뚱해지게 되는 현상
  • 결국 모델과 뷰가 의존성을 가지게 되면서 유지보수 및 신규기능 추가 등에 어려움을 겪음(기능 및 역할 구분 및 분업효율화라는 본목표와 멀어짐)