본문 바로가기
개발

MVC패턴이란?

by chan10 2021. 4. 7.

MVC패턴이란 Model, View, Controller의 약자로 소프트웨어를 디자인하기 위한 디자인 패턴입니다.

애플리케이션, 프로젝트를 구성할 때 구성 요소를 세가지(Model, View, Controller)의 역할로 나누어 개발과 유지보수의 편리함을 위한 디자인 패턴입니다.

Model : 백그라운드에서 동작하는 로직은 처리합니다.

View : 사용자가 보게 될 결과 화면을 출력합니다.

Controller : 사용자의 입력처리와 흐름 제어를 담당합니다.

 

위키피디아에서는 MVC패턴을 다음과 같이 정의하고 있습니다.

MVC는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

 

처음 ClientBrower를 통해 controller를 조작하면 controllermodel을 통해 데이터를 가져옵니다.

가져온 데이터를 바탕으로 controller에서 view에 접근하여 사용자에게 보내며 해당 결과가 사용자의 Brower화면에 출력됩니다.

o  Model

Model은 프로그램 내부 데이터를 처리합니다. DB와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다루는 역할을 합니다.

 

Model은 다음과 같은 규칙을 가지고 있습니다.

 1) 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 한다.

, 화면에 네모 박스 안에 글자가 표현된다면, 네모 박스의 화면 위치 정보, 네모 박스의 크기 정보, 글자 내용, 글자의 위치, 글자의 포맷 정보 등을 가지고 있어야 합니다.

 

2) (View)나 컨트롤러(Controller)에 대해서 어떤 정보도 알지 말이야 한다.

데이터 변경이 일어날 때, 모델에서 화면 UI(View)를 직접 조정해서 수정할 수 있도록 뷰를 참조하는 내부 속성값을 가지면 안됩니다.

 

3) 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.

모델의 속성 중 텍스트 정보가 변경되면, 이벤트를 발생시켜 누군가에게 전달해야 하며, 누군가 모델을 변경하도록 요청하는 이벤트를 보냈을 때 이를 수신할 수 있는 처리 방법을 구현해야 합니다. 또한 모델은 재사용 가능해야 하며 다른 인터페이스에서도 변하지 않아야 합니다.

 

o  View

사용자 인터페이스 및 Model에서 받은 데이터를 출력하며 사용자가 보는 화면입니다.

 

View에는 다음과 같은 규칙이 있습니다.

 1) 모델이 가지고 있는 정보를 따로 저장해서는 안 된다.

화면에 글자를 표시하기 위해, 모델 정보를 전달받게 될텐데, 그 정보를 유지하기 위해서 임의로 뷰 내부에 저장하면 안됩니다. 단순히 네모 박스를 그리라는 명령을 받으면, 화면에 표시하기만 하고, 그 화면을 그릴 때 필요한 정보들은 저장하지 않아야 합니다.

 

2) 모델이나 컨트롤러과 같이 다른 구성 요소를 몰라야 된다.

모델과 같이 자기 자신의 빼고는 다른 요소는 참조하거나 어떻게 동작하는지 알아서는 안됩니다. 그냥 뷰는 데이터를 받으면, 화면에 표시해주는 역할만 가진다고 보면 됩니다.

 

3) 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.

모델과 같이 변경이 일어났을 때 이에 누군가에게 변경을 알려줘야 하는 방법을 구현해야 합니다. 뷰에서는 화면에서 사용자가 화면에 표시된 내용을 변경하게 되면 이를 모델에게 전달해서, 모델을 변경해야 할 것입니다. 그 작업을 하기 위해 변경 통지를 구현해야 합니다.

  

o  Controller

ModelView의 상호작용 역할을 합니다. Client의 요청을 받아 실제 업무를 수행하는 부분으로 Client요청에 대해 ModelView를 결정하여 전달합니다.

 

Controller에는 다음과 같은 규칙이 있습니다.

1) 모델이나 뷰에 대해서 알고 있어야 한다.

모델이나 뷰는 서로의 존재를 모르고, 변경을 외부로 알리고, 수신하는 방법만 가지고 있는데, 이를 컨트롤러가 중재하기 위해 모델과 그에 관련된 뷰에 대해서 알고 있어야 합니다.

 

2) 모델이나 뷰의 변경을 모니터링 해야 한다.

모델이나 뷰의 변경을 통지받으면, 이를 해석해서 각각의 구성 요소에게 통지를 해야 합니다.

애플리케이션의 메인 로직은 컨트롤러가 담당하게 됩니다.

 

 

o Model1, Model2의 차이

MVC패턴에는 Model1, Model2 2가지 방식이 있습니다.

Model1에서는 사용자의 요청을 전부 JSP가 처리하는데 View역할을 수행하면서 Controller역할까지 수행합니다. Model의 역할로는 JavaBean/Servlet이 하지만 Controller의 역할을 하기도 합니다. 로직의 분리가 어렵고 뷰의 재활용성이 떨어지는 단점이 있습니다.

MVC - Model 1

작은 애플리케이션의 경우 JSP내에서 모두 처리해도 문제가 없고 생산성이 좋을 수 있으나 대규모 개발의 경우 각각의 역할을 나눠야만 개발자와 디자이너의 업무를 분리하여 프로그램의 유연성 보장 및 확장성, 재사용성을 높일 수 있습니다.

 

Model2에서는 이러한 단점을 극복하여 사용자의 요청을 Servlet에서받아 처리(Controller)합니다. View의 역할은 단순히 사용자에게 화면만 보여주게 되고 Model은 데이터 처리를 담당하여 각각의 역할을 분리시켰습니다. 그렇기에 확장성도 좋고 유지보수하기도 더 수월합니다.

 

 

o  MVC인가

사용자가 보는 화면과 데이터처리, 이를 제어하는 컨트롤 세가지 역할로 구분함으로써 애플리케이션을 만들 시 각각 맡은 역할만 집중할 수 있게 됩니다. 서로 분리되어 각각의 역할에 집중해 개발을 진행하고 애플리케이션을 만들면, 유지보수성, 확장성, 유연성이 증가하는 장점이 있기에 MVC패턴을 사용합니다.