MVC 패턴은 도대체 무엇인가?

Lord·2023년 11월 25일

Programming

목록 보기
1/5
post-thumbnail

개발자라면 한번쯤은 들어봤을 단어, MVC 패턴이란 도대체 무엇일까?
먼저, MVC 패턴에 대한 정의부터 알아보자.

📚 MVC 패턴이란


MDN Web Docs 용어 사전에 의하면 다음과 같다.

MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다. 이러한 "관심사 분리" 는 더나은 업무의 분리와 향상된 관리를 제공합니다.

쉽게 말하자면, 프로그램 개발을 하기 위한 여러 디자인 패턴중 하나로,
모델, 뷰, 컨트롤러로 이루어진 디자인이라고 볼 수 있다.

여기서 이야기하는 디자인 패턴이란 프로그램을 개발하는 중에 빈번하게 발생하는 과제를 해결하는 방법 중 하나로, 과거에 발견한 설계의 노하우를 재이용하기 좋도록 특정 규약으로 묶어 정리한 것을 의미한다.

즉, 프로그램 개발을 조금 더 편리하게 하기 위한 방법이라고 보아도 무방하다.

💡 Model, View, Controller 에 대하여


먼저 MVC 패턴을 이미지화하면 위와 같이 볼 수 있다. View는 사용자의 입력을 받아 값을 Controller 에게 전달하고 Controller는 Model을 통해 값을 수정한다. Model은 값을 갱신하여 View에게 전달하고 Controller를 통해 사용자에게 보여지는 것이다. 만약 이 순환 구조를 모두 이해했다면 MVC 패턴에 대해 잘 알고 있다 하여도 무방하다. 이제 Model, View, Controller를 하나씩 살펴보자.

📊 Model

모델은 위에서 Controller에게서 값을 전달받아 데이터를 처리한다고 언급하였다. 즉, 프로그램에 존재하는 모든 데이터를 처리한다고 생각하면 이해하기 쉽다. 프로그램을 실행하기 위한 데이터 처리 기능, 변수, 초기화 등등 데이터 가공 및 처리를 담당한다. Model을 디자인 하기 위해 다음과 같은 규칙을 지켜야 한다.

  1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
  • 만약 사용자가 게임을 하길 원한다면 게임 캐릭터, 이동 방향, 스킬 목록, 캐릭터 이름 등등 게임을 하기 위해 필요한 모든 데이터를 Model이 가지고 있어야 한다는 의미이다.
  1. View 나 Controller 에 대한 어떤 정보도 알지 말아야 한다.
  • Model을 디자인할 때 View, Controller를 참조하면 안되며 단순히 데이터를 처리, 가공하는데에 집중을 해야한다는 의미이다.
  1. 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야 한다.
  • Model의 속성중, 정보가 변경 되면 이를 알리는 처리 방법을 구현하여 변경이 일어 나는 것에 유연하게 대처해야함을 의미한다.

🌁 View

뷰는 말 그대로 보여주는 요소이다. 사용자의 입력 값을 받고 사용자에게 출력 값을 보여주는 인터페이스를 의미한다. View 또한 디자인하는데 지켜야할 규칙이 존재한다.

  1. Model이 가지고 있는 정보를 따로 저장해서는 안된다.
  • View는 단순히 사용자의 입력값을 Model에게 전달하거나 Model이 전달해준 값을 최종적으로 사용자에게 보여주는 역할만 해야한다.
  1. Model 이나 Controller와 같이 다른 구성 요소들을 몰라야 한다.
  • Model, Controller에 무엇이 있는지, 어떻게 동작하는지 알지 말아야하고 단순히 입출력만을 담당해야 한다.
  1. 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야만 한다.
  • Model과 마찬가지고 View에 대한 정보가 변경되면 이를 처리해야하는 과정을 구현해야 한다.

🕹️ Controller

컨트롤러는 ModelView를 이어주는 다리와 같은 역할을 한다. 사용자가 데이터를 입력하고 수정, 처리에 대한 이벤트를 처리하는 부분이다.

  1. Model 이나 View에 대하여 알고 있어야 한다.
  • Model 과 View는 서로의 존재를 모르기 때문에 이를 중재해주는 것이다.
  1. Model 이나 View의 변경에 대해 모니터링 해야 한다.
  • Model이나 View의 변경에 대한 통지를 받으면 Controller는 이를 해석하여 각각의 구성요소에 대해 통지를 해야한다.

🤷 MVC Pattern을 왜 사용할까


그렇다면 왜 수많은 디자인 패턴 중에서 MVC Pattern의 사용 빈도수가 높을까?

  • 각 MVC 패턴의 요소들은 자신이 맡은 역할만 수행할 뿐 다른 요소들에 대해서는 값을 전달해주는 역할만 하기 때문에 시스템에 대한 결함도를 낮출 수 있다.
  • 비즈니스 로직과 UI로직을 따로 분리하여 유지보수를 독립적으로 수행할 수 있다.
  • 프로그램의 확장성, 유연성이 증가하며 중복 코딩의 문제점을 없앨 수 있다.

위와 같은 장점이 나오는 계기에 대한 공통점은 바로 MVC 패턴이 Model, View, Controller로 나누어져 있고 각자의 역할만을 수행하는데 집중되어 있다는 것이다.

그러나 이러한 MVC에 대한 이론적인 부분에 대해 이해하고 있다고 하여도 실제로 사용해보지 않으면 패턴 구조에 대해 실수를 할 가능성이 높다. 따라서 MVC 패턴에 대해 충분히 숙지하려면 프로그램 개발을 많이 해봐야하고 그에 대한 피드백도 많이 받아야 한다.

😿 MVC Pattern의 한계점


그렇다면 이러한 MVC 패턴에는 장점만 존재하는 것일까. 당연히 한계점도 존재한다. 다음을 살펴보자.

  1. Model 과 View에 대한 모든 처리를 Controller가 하다보니 Controller가 매우 커질 수 있으며 이에 대해 중복된 코드가 발생할 가능성이 높아진다.
  2. Model의 입력 값을 View가 가져오기 때문에 서로에 대한 의존성이 증가된다.

이러한 문제가 발생하는 경우를 우리는 Massive-View-Controller라고 한다.

🖐️ 5 layerd Architecture


위와 같은 한계점을 극복하기 위해 요즘에는 다음과 같은 5개의 레이어로 이루어진 디자인을 사용한다.

Presentation Layer

MVC 패턴의 View 와 같은 역할을 하는 계층으로, 사용자의 인터페이스를 담당하는 레이어이다.

Control Layer

MVC 패턴의 Controller 와 같은 역할을 하는 계층으로, 아래 계층의 데이터 처리 이벤트를 관리하는 역할을 한다.

Business Logic Layer

  1. Service Layer
    Control Layer 와 Persistence Layer를 연결해주는 역할을 하며 대표적으로 클래스간의 관계를 관리해주는 레이어이다.

  2. Domain
    데이터의 행위를 갖는 객체이며 핵심 비즈니스 로직을 가진다. 데이터 가공에 필요한 주요한 기능을 가지고 있으므로 테스트 주도 개발을 통하여 짜임 있게 작성해야 한다. Persistence Layer에 맵핑되는 성격을 가지고 있다.

Persistence Layer

개발자의 편리함을 위해 존재하는 계층이라고 봐도 무방할 정도로 데이터 처리를 보다 쉽게 하기 위해 존재한다. 각종 영속성 프레임워크를 많이 사용한다.

Domain Model Layer

각 계층 사이에서 전달되는 레이어로, 대부분 DTO 패턴을 따른다. DTO 패턴은 Data Transfer Object 의 약자로, 데이터 전송 객체를 의미한다. 즉, 각 계층 사이에서 데이터의 전송을 담당하는 레이어라고 이해하여도 무방하다.

🧑‍💻 마치며


블로그의 첫 글로 어떠한 주제의 기술을 담으면 좋을까 생각하다가 프로그램 개발을 시작할 때 항상 고려해야하는 디자인 패턴에 대해 작성해보면 좋을 것 같아 대표적인 MVC 패턴에 대해 기록을 남겨본다. 앞으로 매일 기록을 남겨 더욱더 완성된 개발자가 되기 위한 지름길을 그려 나아갈 것이다. 생각하고 있는 포스팅 주제로는 객체지향, TDD, 다양한 디자인 패턴, Java 에 대한 고급 이론들 등등 초~중급 개발자가 마스터 개발자로의 길을 걷기 위해 필요한 지식들을 정리할 계획이다.

참고자료

profile
다재다능한 Backend 개발자에 도전하는 개발자

0개의 댓글