디자인패턴

MVC 패턴 (Model-View-Controller Pattern)

traveler_JH 2024. 12. 20. 14:33

MVC 패턴 (Model-View-Controller Pattern)

    • 애플리케이션의 구조를 세 가지 주요 구성 요소로 나누어 소프트웨어 설계를 체계적으로 관리하는 아키텍처 패턴
    • 웹 애플리케이션과 데스크톱 애플리케이션 개발에서 사용됩니다.

MVC 패턴의 핵심

    • 동작(알고리즘)의 캡슐화
      • 행동(알고리즘)을 별도의 클래스로 분리해 각각 독립적으로 관리
    • 동작 교체 가능
      • 객체의 동작을 실행중 변경 할수있다.
    • 유연성 증가
      • 행동을 변경하거나 추가할때 기존코드를 수정할 필요 없이 새로운 클래스(전략)을 추가 하면된다.

구성요소

  • Model (모델)
    • 역할: 데이터와 비즈니스 로직을 관리합니다.
    • 책임: 데이터베이스와의 상호작용, 데이터 저장, 업데이트, 삭제 등의 작업 수행.
    • 예시: 데이터베이스 테이블, API 응답 처리 로직.
  • View (뷰)
    • 역할: 사용자에게 보여지는 UI(화면)를 관리합니다.
    • 책임: 데이터를 시각적으로 표현하고 사용자 입력을 수집합니다.
    • 예시: HTML, CSS, 템플릿 엔진(Jinja, EJS 등).
  • Controller (컨트롤러)
    • 역할: 사용자의 입력을 처리하고, 모델과 뷰 사이에서 중재 역할을 수행합니다.
    • 책임: 요청을 받고, 적절한 모델을 업데이트하거나 데이터를 뷰에 전달합니다.
    • 예시: Flask/Django의 뷰 함수, Express.js의 라우터.

MVC 흐름 예시 코드 (Django 예제)

예제

1. Model (models.py):

 
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

2. View (views.py):

 
from django.shortcuts import render
from .models import Article

def article_list(request):
    articles = Article.objects.all()  # 모델에서 데이터 가져오기
    return render(request, 'articles.html', {'articles': articles})

3.Template

 
<!DOCTYPE html>
<html>
<head><title>Articles</title></head>
<body>
    <h1>Article List</h1>
    <ul>
        {% for article in articles %}
            <li>{{ article.title }} - {{ article.content }}</li>
        {% endfor %}
    </ul>
</body>
</html>

MVC 작동 방식 흐름

  1. 사용자 입력(User Action): 사용자가 브라우저나 앱의 UI(View)에 상호작용.
  2. 컨트롤러 동작(Controller Processing): 컨트롤러가 사용자의 요청을 처리하고 모델(Model)에 데이터를 요청 또는 업데이트.
  3. 모델 업데이트(Model Update): 모델은 데이터를 검색, 수정, 삭제한 뒤 결과를 컨트롤러에 반환.
  4. 뷰 업데이트(View Rendering): 컨트롤러는 결과 데이터를 뷰(View)에 전달해 사용자에게 화면을 출력.

MVC 패턴의 장점

  1. 유지보수 용이성: 코드 분리가 명확해 유지보수가 쉽습니다.
  2. 재사용성 증가: 모델과 뷰는 재사용 가능하고 독립적으로 개발할 수 있습니다.
  3. 확장성 향상: 애플리케이션 확장이 쉽습니다.

MVC 패턴의 단점

  • 복잡도 증가:
    • 소규모 프로젝트에서는 불필요하게 복잡할 수 있습니다.
  • 학습 곡선:
    • 모델, 뷰, 컨트롤러 사이의 상호작용을 이해하는 데 시간이 걸릴 수 있습니다.