MVP (Model View Presenter) 최종 수정일 2026-06-22 14:00 조회수 12
대시보드

MVP (Model View Presenter)

기본 정보

  • 명칭: MVP
  • 영문명: Model-View-Presenter
  • 분류: UI 아키텍처 패턴
  • 주요 용도: UI와 비즈니스 로직 분리
  • 관련 주제: #MVP #Architecture #UI #Frontend

개요

MVP(Model-View-Presenter)는 사용자 인터페이스(UI)와 비즈니스 로직을 분리하기 위한 아키텍처 패턴이다.

MVC의 발전형 패턴 중 하나로, Controller 대신 Presenter가 View와 Model 사이를 중재한다.

특히 Android 앱 개발, WinForms, WPF, Flutter 초기 구조, 데스크톱 프로그램 등에서 많이 사용되었다.


MVP 구조

사용자

↓

View

↕

Presenter

↕

Model

↕

Database

MVC와 가장 큰 차이점은 View가 Model을 직접 알지 못하고, Presenter를 통해서만 통신한다는 점이다.


구성 요소

Model

데이터와 비즈니스 로직을 담당한다.

역할

  • 데이터 조회
  • 데이터 저장
  • API 호출
  • DB 처리
  • 비즈니스 규칙 수행

예시

class UserModel {

    public function getUser($id){

    }

}

View

사용자에게 보여지는 화면을 담당한다.

역할

  • 화면 표시
  • 사용자 입력 수집
  • Presenter 호출

예시

<button>

로그인

</button>

View는 로직을 거의 가지지 않는다.


Presenter

MVP의 핵심이다.

역할

  • 사용자 이벤트 처리
  • Model 호출
  • View 업데이트
  • 비즈니스 흐름 제어

예시

class LoginPresenter {

    public function login(){

    }

}

동작 과정

사용자 클릭

↓

View

↓

Presenter

↓

Model

↓

DB

↓

Model

↓

Presenter

↓

View 갱신

로그인 예시

로그인 버튼 클릭

↓

LoginView

↓

LoginPresenter

↓

UserModel

↓

DB 조회

↓

Presenter

↓

성공 메시지

↓

View

MVC와 비교

MVC

Controller

↓

Model

↓

View

Controller가 요청을 처리한다.


MVP

View

↓

Presenter

↓

Model

Presenter가 View와 Model 사이를 모두 관리한다.


MVC와 MVP 차이

MVCMVP
Controller 사용Presenter 사용
View가 Model을 알 수 있음View는 Model을 모름
View 의존성 존재Presenter 중심
웹 개발에 적합UI 중심 앱에 적합
테스트가 상대적으로 어려움테스트가 쉬움

게시판 예시

글 목록

BoardView

↓

BoardPresenter

↓

BoardModel

↓

DB 조회

↓

Presenter

↓

View 출력

글 작성

BoardView

↓

BoardPresenter

↓

BoardModel

↓

INSERT

↓

결과 반환

↓

View 갱신

폴더 구조 예시

app/

├── Models/

├── Views/

├── Presenters/

├── Services/

└── Config/

Flutter 예시

UI Widget

↓

Presenter

↓

Repository

↓

API

Flutter 초창기에는 MVP 패턴이 자주 사용되었다.


Android 예시

Activity

↓

Presenter

↓

Model

MVP는 Android 개발에서 매우 유명한 패턴이었다.


장점

  • UI와 로직 완전 분리
  • 테스트 용이
  • 유지보수 편리
  • Presenter 재사용 가능
  • View가 단순해짐
  • 역할이 명확함

단점

  • Presenter 수 증가
  • 코드량 증가
  • 소규모 프로젝트에는 과할 수 있음
  • View 인터페이스 작성 필요

MVP와 MVVM 비교

MVPMVVM
PresenterViewModel
수동 업데이트데이터 바인딩
구현 단순자동 동기화
테스트 쉬움테스트 쉬움
코드 많음프레임워크 의존

실무 메모

실무에서는 다음과 같은 방식이 권장된다.

  • View는 최대한 로직 제거
  • Presenter는 화면 흐름만 관리
  • 비즈니스 로직은 Model 또는 Service 이동
  • Presenter 비대화 방지
  • 인터페이스 기반 설계
  • 의존성 주입(DI) 적용
  • 테스트 코드 작성
  • Repository 패턴과 결합
  • API 호출 로직 분리
  • 화면별 Presenter 분리

MVP와 함께 사용하는 기술


관련 문서


출처

  • Martin Fowler - Model View Presenter
  • Microsoft Learn
  • Android Architecture Guide

메모

  • MVP와 MVC 비교 문서 작성 권장
  • MVP와 MVVM 비교 문서 작성 가능
  • Flutter MVP 템플릿 문서 작성 가능
  • PySide6 MVP 예제 작성 가능
  • TreeView CMS MVC 리팩토링 우선 추천
  • MVC, MVVM, Clean Architecture와 상호 링크 추천