[디자인 패턴] MVC 패턴

calm0_0·2023년 11월 7일
0

디자인패턴

목록 보기
2/2
post-thumbnail

MVC 패턴이란


MVC 패턴이란 애플리케이션을 모델(Model), 뷰(View), 컨트롤러(Controller) 세 가지 역할로 구분한 소프트웨어 디자인 패턴이다.

애플리케이션의 구성 요소를 세 가지 역할로 구분하기 때문에 각각의 구성 요소에만 집중해서 개발할 수 있으며 유지 보수가 편리하다는 장점이 있다. 하지만 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해진다는 단점이 있다.


MVC 패턴의 구조 및 역할


MVC 패턴은 모델(Model), 뷰(View), 컨트롤러(Controller) 세 개의 컴포넌트로 이루어지며 각 컴포넌트는 고유한 역할을 수행한다.

Model

모델은 애플리케이션의 데이터와 비즈니스 로직을 관리하는 영역이다.

모델은 애플리케이션이 무엇을 할 것인지, 포함해야할 데이터가 무엇인지를 정의한다.

컨트롤러의 지시에 따라 데이터베이스와 연동하여 관련된 비즈니스 로직을 처리하고 필요한 데이터를 컨트롤러로 보낸다.

데이터 검색, 저장, 삭제, 업데이트 등의 작업을 수행한다.

모델은 다른 컴포넌트들에 대해 알지 못하며, 자기 자신이 무엇을 수행하는지만 알고 있다.

View

뷰는 사용자에게 무엇을 화면(UI)에 보여주기 위한 역할을 한다.

컨트롤러로부터 받은 모델이 처리한 데이터나 작업 결과를 가지고 사용자에게 출력할 화면을 만든다.

주의할 점은 모델로부터 받은 데이터를 뷰에서 별도로 저장하지 않는다.

뷰 또한 다른 컴포넌트들에 대해 알지 못하며, 자기 자신이 무엇을 수행하는지만 알고 있다.

Controller

컨트롤러는 모델과 뷰 사이를 이어주는 다리 역할을 한다.

클라이언트의 입력(요청)에 따라 필요한 로직의 실행을 모델에 지시하고, 그 결과를 가지고 화면을 생성하도록 뷰에 전달한다. 다음과 같은 흐름을 가진다.

  1. 클라이언트가 보낸 요청을 컨트롤러가 받는다.
  2. 컨트롤러가 모델에 필요한 로직의 실행을 지시한다.
  3. 지시를 받은 모델이 처리 결과를 컨트롤러에 보낸다.
  4. 컨트롤러가 모델에서 받은 결과를 가지고 뷰에 표시의 실행을 지시한다.
  5. 뷰에서 화면을 표시한다.

즉, 클라이언트의 요청에 대해 모델과 뷰를 결정하여 전달하는 일종의 조정자 역할을 한다.

그래서 컨트롤러는 다른 컴포넌트들에 대해 알고 있고, 자기 자신 외에 모델과 뷰가 무엇을 수행하는지 알고 있다.


MVC 패턴의 예시


간단한 예제 코드 추가 예정


MVC 패턴의 장점


MVC 패턴은 역할별로 독립적이기 때문에 작업 구분도 명확하고 병렬 개발이 가능하다.

각 컴포넌트는 자신이 맡은 역할만 수행한 후 다른 컴포넌트로 결과만 넘겨주면 되기 때문에 시스템 결합도를 낮출 수 있다.

유지보수 시에도 특정 컴포넌트만 수정하면 되기 때문에 보다 쉽게 시스템 변경이 가능하다.

기능별로 코드를 분리하여 하나의 파일에 코드가 모이는 것을 방지하여 코드의 가독성, 확장성, 재사용성이 증가한다.


MVC 패턴의 한계


MVC 패턴은 기능별로 코드를 구분한다. 그러나 이 때문에 코드 기술에 제약이 늘어나기도 해서 오히려 시간이 더 걸려 버리는 경우도 있다. 이 때문에 소규모의 개발에는 적합하지 않은 경우도 있다.

복잡한 대규모 애플리케이션의 경우 컨트롤러에 다수의 뷰와 모델이 복잡하게 연결되기 때문에 컨트롤러가 지나치게 커지는 현상이 발생한다. 이러한 현상을 Massive-View-Controller 현상이라고 하며 이를 보완하기 위해 MVP, MVVM 등의 다양한 패턴들이 등장했다.



Reference
https://www.youtube.com/watch?v=ogaXW6KPc8I
https://junhyunny.github.io/information/design-pattern/mvc-pattern/
https://developer.mozilla.org/ko/docs/Glossary/MVC
https://www.devkuma.com/docs/mvc/
https://tecoble.techcourse.co.kr/post/2021-04-26-mvc/

profile
공부한 내용들을 정리하는 블로그

0개의 댓글