1. 디자인 패턴이란?

객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴. 개발을 하며 생길 수 있는 반복적인 문제들을 패턴을 통해 설계를 함으로써 미리 예방을 할 수 있게 됩니다..

디자인 패턴을 이용하면 유지보수성이 좋고 이해가 쉬운 코드를 짤 수 있게 됩니다.

 

2. MVC패턴이란?

출처 https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC

MVC패턴은 데이터를 가지고 있는 Model, 사용자 인터페이스 요소를 가지고 있는 View, View와 Model을 이어주는  Controller의 3가지 요소로 나누어집니다.

이와 같이 3가지 요소로 나누어 사용자 인터페이스와 비즈니스 로직을 분리하여 코드의 의존성을 낮추고 유지보수성을 높이는 효과를 얻게 됩니다.

 

MVC의 작동은 다음과 같이 진행됩니다.

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

2.1 Model 모델

Model(모델)은 필요한 데이터에 대해서 Controller의 제어에 따라, DB에게 query를 하여 데이터를 저장, 삭제, 업데이트등을 진행하게 됩니다. View는 이 Model의 데이터를 기반으로 사용자 화면을 구성하게 됩니다.

 

Model의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보합니다. 이와 같은 통보를 통해서 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가·제거·수정할 수 있습니다. 어떤 MVC 구현에서는 통보 대신 뷰나 컨트롤러가 직접 모델의 상태를 읽어오기도 합니다.

 

모델의 규칙

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

 

2.2 View 뷰

View(뷰)는 사용자가 직접 보게되는 화면, 사용자 인터페이스를 구성하는 역할을 합니다.

뷰는 컨트롤러를 통해 받은 모델의 값을 통해 화면을 구성하게 됩니다.

 

뷰의 규칙

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

 

2.3 Controller 컨트롤러

Controller(컨트롤러)는 뷰와 모델의 사이를 잇는 인터페이스의 역할을 합니다.

모델이 데이터를 어떻게 처리할 것인지를 알려주고, 처리된 모델을 뷰에게 넘겨주게 됩니다.

모델이나 뷰로부터 변경 내용을 통지 받으면 이를 각 구성 요소에게 통지해야 합니다. 사용자가 어플리케이션을 조작하여 발생하는 변경 이벤트들을 처리하는 역할을 수행합니다.

 

컨트롤러의 규칙

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

 

 

3. MVC 패턴의 장점

  • MVC패턴의 각 컴포넌트는 자신의 역할을 한 후 값을 넘겨주기만 하면 되기 때문에, 시스템 결합도가 낮아집니다.
  • 각 코드가 여러파일에 나누어져 있기 때문에 코드의 가독성이 높아집니다.
  • 유지보수 시 특정 컴포넌트만 수정하면 되기 때문에 유지보수가 쉬워집니다.

 

4. MVC 패턴의 한계

Massive View Controller

대규모 시스템의 경우 컨트롤러가 다수의 모델과 뷰를 컨트롤하여, 컨트롤러의 부담이 커지는 문제가 생기게 됩니다.

또한 다수의 뷰에 다수의 모델이 연결되는 경우가 생겨 서로간의 의존성이 커지는 경우가 발생할 수 있습니다.

 

이를 해결하기 위해 아래와 같은 패턴들이 있습니다.

  • MVVM
  • MVP
  • MVW
  • Flux
  • Redux
  • RxMVVM

 

Reference

더보기

'Dev > Web' 카테고리의 다른 글

주식 전망 서비스 RAG-1  (0) 2025.11.10
REST와 RESTful API  (0) 2025.02.06

+ Recent posts