CS

MVC 모델이란

jungmin.park 2023. 12. 21. 15:34

 

MVC 모델이란 무엇인지 설명해주실 수 있을까요?

 

MVC는 Model, View, Controller의 줄임말로 프로젝트를 구성할 때 세가지 역할로 관심사를 분리하여 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있으며 더 나은 업무의 분리와 향상된 관리를 제공합니다.
사용자가 요청을 보내면 Controller는 Service에서 비즈니스 로직을 처리한 후 결과를 Model에 담습니다. Model은 저장된 결과를 바탕으로 사용자 요청에 따른 시각적 요소 출력을 담당하는 View를 제어하여 사용자에게 전달합니다.
즉 Model은 데이터를 조작하는 역할을 수행하고 View은 Controller에게 받은 Model의 데이터를 시각적으로 보여주기 위한 역할을 담당합니다. Controller는 Model과 View 사이에서 데이터 흐름을 제어하여 둘의 역할을 분리하는 요소입니다.

MVC패턴을 관심사를 분리하면 서로 간의 결합도를 낮출 수 있고 코드의 재사용성 및 확장성을 높일 수 있습니다.
또한 개별적으로 테스트하기 쉽기 때문에 테스트에 용이해지고 유지보수성이 높아집니다.

 

Model, View, Controller 의 관계

이러한, Model, View, Controller의 약자입니다. 하나의 어플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다.

 

 

사용자가 Controller를 사용하게되면 Controller는 Model에게서 데이터를 받아오고 받아온 데이터를 통해 View에서 시각적인 부분을 제어하여 사용자에게 전달한다.

 

  1. 사용자의 Request(요청)를 Controller가 받는다.
  2. Controller는 Service에서 비즈니스 로직을 처리한 후 결과를 Model에 담는다.
  3. Model에 저장된 결과를 바탕으로 시각적 요소 출력을 담당하는 View를 제어하여 사용자에게 전달한다.

 


Model(모델)

Model은 소프트웨어나 애플리케이션에서 정보 및 데이터 부분을 의미힌다. 이는 Controller에게 받은 데이터 조작(가공)하는 역할을 수행할 수 있다고 볼 수 있다. 즉 데이터와 관련된 부분을 담당하며 값과 기능을 가지는 객체라고 보면 된다.

 

Model의 규칙

1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
2. View나 Controller에 대해서 어떤 정보도 알지 말아야 한다.
3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.

 

View(뷰)

view는 입력값이나 체크박스 등과 같은 사용자 인터페이스 요소를 나타낸다. 이는 Controller에게 받은 Model의 데이터를 사용자에게 시각적으로 보여주기 위한 역할을 수행한다. 사용자에게 보여지는 화면이라고 볼 수 있다.

 

View의 규칙

1. Model이 가지고 있는 정보를 따로 저장해서는 안된다.
2. Model이나 Controller를 알고 있을 필요가 없다.
3. 변경이 일어나면 변경통지에 대한 처리방법을 구현해야 한다.

 

Controller(컨트롤러)

 

Controller는 Model과 View 사이에서 데이터 흐름을 제어한다. 사용자가 접근한 URL에 따라 요청을 파악하고 URL에 적절한 Method를 호출하여 Service에 비즈니스 로직을 처리한다. 이 후 결과를 Model에 저장하여 View에게 전달을 하는 역할을 수행한다. 결국 Controller는 Model과 View의 역할을 분리하는 중요한 요소이다.

 

Model이나 View에 대해서 알고 있어야 한다.
Model이나 View의 변경을 모니터링 해야 한다.

 

 


왜 MVC 패턴을 사용해야 할까?

 

관심사의 분리

먼저 MVC 패턴의 본질적은 목표는 관심사를 분리하는 것이다.

물론 MVC 패턴말고도 관심사를 분리하는 구조는 많다.  네트워크에서 IP와 TCP, 웹에서 서버와 클라이언트가 관심사 분리의 대표적인 예시이다.

하지만 MVC 패턴에서 관심사를 분리한다는 것은 어떻게 나눌 것인가? 라고 말할 수 있을 것 같다. 개발을 포함한 특정 작업을 수행해야 할 경우 자연스럽게 작업을 수행하기 위한 역할을 나누는 것부터 시작하게 될 것이다. 

 

MVC 패턴의 이점

  1. 컴포넌트의 명확한 역할 분리로 인해 서로간의 결합도를 낮출 수 있다.
  2. 코드의 재사용성 및 확장성을 높일 수 있다.
  3. 서비스를 유지보수하고 테스트하는데 용이해진다.
  4. 개발자 간의 커뮤니케이션 효율성을 높일 수 있다.

 

1. 컴포넌터의 명확한 역할 분리로 서로간의 결합도를 낮출 수 있다.

MVC패턴으로 구현된 소프트웨어나 애플리케이션은 Model, View, Controller 3가지 컴포넌트로 명확하게 구분되기 때문에 Model은 데이터 및 비즈니스 로직을 담당하고, View는 사용자 인터페이스를 표현하며, Controller는 사용자 요청을 처리하기 위해 Model과 View의 흐름을 제어한다.

이러한 점을 통해 각각의 컴포넌트는 자신이 맡은 역할만 수행한 후 다른 컴포넌트로 결과만 넘겨주기 때문에 서로간의 결합도를 낮출 수 있다.

 

2. 코드의 재사용성 및 확장성을 높일 수 있다.

개발한 Model과 Controller는 여러 View에서 재사용할 수 있고, View의 경우도 다른 Model과 함께 재사용할 수 있으므로 개발 시간을 단축하고 중복 코드를 줄이는데 많은 도움을 줄 수 있다.

 

3. 서비스를 유지보수하고 테스트하는데 용이해진다.

변경이 필요한 부분을 보다 쉽게 식별 및 피악할 수 있고, 수정이나 확장할 경우 해당 부분에만 집중하여 개발할 수 있어서 다른 부분에는 영향을 덜 주게 된다. 이를 통해 변경에 따른 유지보수 비용을 줄일 수 있다.

또한 Model, View, Controller를 개별적으로 테스트하기 쉽기 때문에 컴포넌트의 동작을 테스트하기 위한 단위테스트 및 통합 테스트 코드를 개발하는데 수월하다.

 

4. 개발자 간의 커뮤니케이션 효율성을 높일 수 있다.

 

Model, View, Controller의 역할이 분리되어 있기 때문에 개발자들 간의 협업 과정 속에서도 담당한 역할에 대한 작업을 수행하면 되기 때문에 코드 충돌을 미리 방지하기 쉽다.

 

그리고 분리된 역할마다 개발자가 배정되어 개발 업무를 수행하기 때문에 제 3자인 개발자가 의견이나 피드백을 전달하기 좋은 구조로 제공하며, 보다 쉽게 새로운 요구사항을 도출할 수 있다.