본문 바로가기

CS 지식

MVC 패턴

공부를 하다 보면 무조건 한 번쯤은 듣게 되는 MVC 패턴.

대충 중요한 패턴인 건 알겠는데 대체 그래서 이게 뭔데? 싶은 마음에 이번 기회에 정리를 해보았다.

MVC 패턴은 Model, Controller, View의 앞 글자를 딴 것으로 프로그램을 구성하는 요소들을 모델, 컨트롤, 뷰로 나누어 설계하는 아키텍처 패턴 중의 하나이다. MVC 패턴에 대해 자세히 알아보기 전에 소프트웨어 아키텍처와 아키텍처 패턴에 대해 간단하게 알아보도록 한다.

소프트웨어 아키텍처

소프트웨어 아키텍처란 소프트웨어의 골격이 되는 기본 구조이자, 소프트웨어를 구성하는 컴포넌트 간의 관계를 표현하는 시스템 구조이다.

소프트웨어 개발 시 적용되는 원칙이며 이해 관계자들의 의사소통 도구로 활용된다. 이의 설계는 기본적으로 품질을 유지하면서 비기능적 요구사항으로 나타난 제약을 반영하고, 기능적 요구사항을 구현하는 방법을 찾는 해결과정이며 분할방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정한다.

아키텍처 패턴

아키텍처를 설계할 때 참조할 수 있는 해결방식, 예제이며 소프트웨어 시스템의 구조를 구성하기 위한 기본적인 윤곽을 제시한다. 아키텍처 스타일 또는 표준 아키텍처라고도 하며 시행착오를 줄여 개발 시간을 단축시키고 고품질의 소프트웨어를 생산할 수 있게 해준다.

이러한 아키텍처 패턴의 종류에는 레이어 패턴, 클라이언트-서버 패턴, 파이프-필터 패턴, 모델-뷰-컨트롤러 패턴(MVC 패턴) 등이 있다.

MVC 패턴

MVC 패턴은 위와 같이 서브시스템을 3개의 부분으로 구조화하는 패턴이다.

이를 표현한 그림은 사람마다 다르다. 컨트롤러를 중심으로 컨트롤러가 모델과 뷰를 연결해주는 그림, 위와 같이 세 컴포넌트가 서로 연결되어 있는 그림 등등 다양하다. 그러나 이렇게 다양한 표현들 사이에서도 모델, 뷰, 컨트롤러가 별도의 컴포넌트로 분리되어 있어 서로에게 영향을 받지 않고 작업을 수행한다는 것은 변함 없는 사실이다. 이는 재사용성과 유지보수의 편리성을 높여주게 된다.

Model

서브시스템의 핵심 기능과 데이터를 가지고 있는 객체이다. 사용자가 원하는 모든 데이터를 가지고 있어야 한다. 데이터에 변경이 일어나면 변경 사항을 발신해야 한다. 모델에서 직접 뷰를 참조하여 수정하게 되는 구조를 가지면 안 된다.

View

텍스트, 체크박스와 같이 사용자에게 표시되는 정보로 UI 와 같은 시각적 요소이다. 모델이 갖고 있는 데이터를 저장해서는 안되고 필요한 데이터는 모델에게 전달받아 표시만 해주어야 한다. 또한 자기 자신을 제외하고 다른 요소를 참조하거나 동작의 원리를 알아서는 안된다. 단지 받아온 데이터를 화면에 표시하는 역할만 하는 것이다.

Controller

사용자로 부터 받은 입력을 처리해 모델과 뷰를 제어한다. 모델과 뷰는 서로의 존재를 모르고 변경사항만 수신/발신 하지만 컨트롤러는 그들에 대해 알고 있어야 하고 이를 통지해주어야 한다. 컨트롤러에 주로 비즈니스 로직이 구현되어 있다고 보면 된다.

사용자가 컨트롤러를 조작하면 모델에서 데이터를 가져와 이를 바탕으로 뷰에 정보가 띄워지는 방식이라고 생각하면 간단하다. 모델은 여러개의 뷰를 가질 수 있으며 이는 대화형 애플리케이션에 적합하다.