Architecture

MVC 패턴이란?

Jan. 11, 2023, 9:37 p.m.

안녕하세요?

개발자 면접을 준비하거나 다양한 프레임워크를 접하다 보면

MVC 패턴이란 말을 많이 들어보셨을 것입니다.

현재 글을 올리고 있는 Django 프레임워크도 MVC 패턴을 가진 프레임워크인데,

그러면 MVC패턴이란 무엇을 의미할까요?

 

MVC 패턴 정의

위키피디아에서 MVC패턴을 찾아보면 아래와 같이 정의가 되어있습니다.

"

모델-뷰-컨트롤러(model–view–controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 

이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 

애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. 

MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 

뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 

 

컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

"

즉, MODEL, VIEW, CONTROLLER로 나뉘어 비즈니스 로직이 분리되어 있고,

이를 통해 효율적이고 프로그램 수정 및 개발을 진행할 수 있게 해줍니다.

 

그러면 각각의 MODEL, VIEW, CONTROLLER는 어떤 역할을 할까요?

 

Model

- Model은 Data와 애플리케이션의 처리, 즉 내부 비즈니스 로직을 처리하기 위한 역할을 합니다.

- 모델은 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 등, 데이터와 연관된 작업을 합니다.(데이터 저장, 삭제, 업데이트, 조회 등)

 

View

- View는 사용자에게 보여지는 화면(UI)이라고 볼 수 있습니다.

- 사용자와 상호작용을 하며 컨트롤러로부터 받은 모델의 결과값을 사용자에게 화면으로 출력하는 일을 합니다.

- MVC에서는 여러개의 View가 존재할 수 있습니다.

 

Controller

- Controller는 Model과 View 사이를 이어주는 인터페이스 역할을 하며, Model 의 데이터를 어떻게 처리할 지 알려줍니다.

- 사용자로부터 View에 요청이 있으면 Controller는 해당 업무를 수행하는 Model을 호출하고 Model이 업무를 모두 수행하면 다시 결과를 View에 전달하는 역할을 합니다.

 

Django 는 MVC 패턴?

위에서 Django 프레임워크도 MVC 패턴이라고 하였는데,

Django는 약간 명칭이 바뀐 MVT(Model, View, Template) 패턴이라고들 합니다.

MVC 패턴의 View 역할을 Django(MVT모델)에서는 Template 이 하고,

MVC 패턴의 Controller 역할을 Django(MVT모델)에서는 View 가 합니다.

Django 에 View와 MVC 패턴의 View가 용어는 같지만 역할이 달라서 헷갈리지 않도록 주의해야합니다.

 

 

 

MVC의 장점

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

각 구성요소들을 독립시켜 협업을 할 때 맡은 부분의 개발에만 집중할 수 있어 개발의 효율성(분업 가능)을 높여줍니다.

개발 후에도 유지보수성과 확장성이 보장됩니다.

 

MVC의 한계

Model과 View는 서로의 정보를 갖고 있지 않는 독립적인 상태라고 하지만 

Model과 View사이에는 Controller를 통해 소통을 이루기에 의존성이 완전히 분리될 수 없습니다. 

그래서 복잡한 대규모 프로그램의 경우 다수의 View와 Model이 Controller를 통해 연결되기 때문에 

컨트롤러가 불필요하게 커지는 현상이 발생하기도 합니다. 

이러한 현상을 Massive-View-Controller현상이라고 하며 이를 보완하기 위해 MVP, MVVM, Flux, Redux등의 다양한 패턴들이 생겨났습니다.

Reference

https://velog.io/@seongwon97/MVC-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80


Comments


Related Posts