MVC 최종 수정일 2026-06-22 13:38 조회수 11
대시보드

MVC

기본 정보


개요

MVC(Model-View-Controller)는 애플리케이션을 Model, View, Controller 세 영역으로 분리하여 개발하는 설계 패턴이다.

비즈니스 로직, 화면(UI), 요청 처리를 분리함으로써 유지보수성과 확장성을 높일 수 있다.

현재 PHP, Java, C#, Python 등 대부분의 웹 프레임워크가 MVC 패턴을 기반으로 설계되어 있다.


MVC 구조

사용자

↓

View

↓

Controller

↓

Model

↓

Database

↓

Model

↓

View

↓

사용자

MVC 구성 요소

Model

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

역할

  • 데이터 조회
  • 데이터 저장
  • 데이터 수정
  • 데이터 삭제
  • 비즈니스 규칙 처리

예시

class UserModel {

    public function getUser($id){

    }

}

View

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

역할

  • HTML 출력
  • 사용자 인터페이스 구성
  • 데이터 표시

예시

<h1><?= $user['name'] ?></h1>

Controller

사용자의 요청을 받아 처리하는 역할이다.

역할

  • URL 처리
  • Model 호출
  • View 선택
  • 응답 반환

예시

class UserController {

    public function profile(){

    }

}

동작 과정

브라우저 요청

↓

Controller

↓

Model

↓

Database

↓

Model

↓

Controller

↓

View

↓

HTML 출력

게시판 예시

글 목록 요청

/board/list

↓

BoardController

↓

BoardModel

↓

DB 조회

↓

list.php

↓

사용자

글 작성 요청

/board/write

↓

BoardController

↓

BoardModel

↓

INSERT

↓

결과 출력

실제 폴더 구조 예시

project/

├── controllers/

│   └── BoardController.php

│

├── models/

│   └── BoardModel.php

│

├── views/

│   └── board/

│       └── list.php

│

├── config/

├── public/

└── index.php

PHP MVC 예시

Controller

class UserController {

    public function profile(){

        $model = new UserModel();

        $user = $model->getUser(1);

        include 'views/profile.php';

    }

}

Model

class UserModel {

    public function getUser($id){

        return [

            'name' => '구름'

        ];

    }

}

View

<h1>

<?= $user['name'] ?>

</h1>

MVC 장점

  • 역할 분리
  • 유지보수 편리
  • 협업 용이
  • 코드 재사용 증가
  • 테스트 편의성
  • 확장성 향상

MVC 단점

  • 초기 구조 설계 필요
  • 소규모 프로젝트에서는 과할 수 있음
  • 파일 수 증가
  • 학습 비용 존재

MVC와 일반 PHP 비교

일반 PHP

<?php

$conn = db();

$data = query();

?>

<html>

<?= $data ?>

</html>

로직과 화면이 섞여있다.


MVC

Controller

↓

Model

↓

View

각 역할이 분리되어 관리된다.


MVC와 CRUD

MVC는 CRUD 구현에 매우 적합하다.

기능ControllerModelView
생성(Create)요청 처리INSERT입력 폼
조회(Read)요청 처리SELECT목록 출력
수정(Update)요청 처리UPDATE수정 폼
삭제(Delete)요청 처리DELETE결과 출력

MVC와 REST API

Client

↓

Controller

↓

Model

↓

JSON 반환

REST API 서버 역시 MVC 구조를 사용하는 경우가 많다.


대표 MVC 프레임워크

PHP

  • Laravel
  • CodeIgniter
  • Yii

Java

  • Spring MVC

Python

  • Django

C#

  • ASP.NET MVC

TreeView CMS 관점

현재 구름님이 개발 중인 TreeView CMS 기준으로 보면:

index.php

↓

라우팅

↓

Controller

↓

Model

↓

DB

↓

View

현재 index.php가 1000줄 이상이라면 MVC 구조로 분리하는 것이 유지보수에 훨씬 유리하다.

예시

app/

├── Controllers/

├── Models/

├── Views/

├── Services/

├── Helpers/

└── Config/

실무 메모

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

  • Controller는 최대한 얇게 유지
  • 비즈니스 로직은 Model 또는 Service 계층으로 이동
  • View에서 DB 접근 금지
  • SQL은 Model에서만 처리
  • 공통 기능은 Service 분리
  • Helper 함수 별도 관리
  • Controller → Service → Model 구조 고려
  • URL 라우터 도입
  • 템플릿 엔진 사용 검토
  • API와 화면 로직 분리

MVC와 함께 사용하는 기술


관련 문서


출처

  • Martin Fowler - MVC Pattern
  • Microsoft Learn
  • Laravel Documentation

메모

  • MVC → Service Layer 구조 문서 작성 권장
  • MVC → Repository Pattern 확장 문서 작성 가능
  • TreeView CMS MVC 리팩토링 가이드 작성 가능
  • index.php 1000줄 분리 전략 문서 작성 가능
  • PHP 순수 MVC 프레임워크 제작 문서 작성 가능
  • Service Layer, Repository Pattern, Clean Architecture와 상호 링크 추천