Architecture

[디자인 패턴] MVC 패턴

4Legs 2021. 3. 24. 22:40

MVC 패턴

MVC 패턴은 소프트웨어 디자인 패턴 중 하나로,

사용자 인터페이스와 비즈니스 로직을 분리해 두 영역을 서로 영향 없이 수정할 수 있도록 하여 유지보수성을 높이는 장점을 가진다.

모델, 뷰, 컨트롤러의 관계

일반적으로 웹 애플리케이션 서비스에서 MVC 패턴은 다음 그림과 같이 구성된다.

웹 애플리케이션의 MVC 패턴 구조

 

 

M : 모델 (Model)

모델은 프로그램의 도메인 및 어플리케이션의 정보, 데이터에 대응한다. 

예를 들어 상품 주문 서비스를 개발한다고 했을 때, 이를 개발하기 위해 필요한 회원, 상품, 주문 등의 도메인들이 이에 해당한다. 이러한 도메인들의 실제 데이터의 가공을 담당하는 컴포넌트들도 포함한다.

모델은 뷰나 컨트롤러에 대한 어떠한 정보도 알 필요가 없다. 이는 곧 데이터 변경이 일어났을 때 모델에서 뷰를 참조하는 속성을 가지면 안 된다는 의미와 같다.

또한, 데이터 변경이 일어났을 때 이를 알려줄 방법이 구현되어 있어야 한다.

※ DAO (Data Access Object) : 데이터베이스의 데이터에 접근하는 트랜잭션 객체이다. 즉, DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만들어진 객체를 의미한다.

※ DTO (Data Transfer Object) : 계층 간의 데이터 교환을 위한 객체를 말한다. 여기서 계층 간의 데이터 교환이란 모델, 뷰, 컨트롤러 등의 계층 간 데이터 교환을 의미한다. 일반적으로 로직을 갖고 있지 않다.

 

V : 뷰 (View)

뷰는 사용자 인터페이스 요소를 의미한다. 즉, 실제로 사용자에게 보여지는 화면과 그 요소들을 의미한다.

뷰 역시 모델이 가진 정보를 따로 저장해서는 안 되며, 모델과 컨트롤러의 구성요소들을 알 필요가 없다. 뷰는 단지 자신에게 전달된 화면 요소를 사용자에게 출력하는 역할만 수행해야 한다.

 

C : 컨트롤러 (Controller)

컨트롤러는 사용자의 입력 처리를 담당한다. 즉, 사용자가 실제로 버튼을 클릭하는 등의 이벤트를 발생시킬 때, 이를 처리하는 역할을 맡는다.

컨트롤러는 모델과 뷰에 대해 알고 있어야 한다. 컨트롤러에서 로직을 통해 모델의 데이터를 가공한 후, 뷰를 통해 변경된 결과를 사용자에게 표시해야 하기 때문이다.

웹 애플리케이션에서는 컨트롤러에서 서비스 계층(Service Layer)을 분리해 비즈니스 로직이 수행되는 부분을 독립적으로 관리할 수 있다.