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 작동 방식 흐름
- 사용자 입력(User Action): 사용자가 브라우저나 앱의 UI(View)에 상호작용.
- 컨트롤러 동작(Controller Processing): 컨트롤러가 사용자의 요청을 처리하고 모델(Model)에 데이터를 요청 또는 업데이트.
- 모델 업데이트(Model Update): 모델은 데이터를 검색, 수정, 삭제한 뒤 결과를 컨트롤러에 반환.
- 뷰 업데이트(View Rendering): 컨트롤러는 결과 데이터를 뷰(View)에 전달해 사용자에게 화면을 출력.
MVC 패턴의 장점
- 유지보수 용이성: 코드 분리가 명확해 유지보수가 쉽습니다.
- 재사용성 증가: 모델과 뷰는 재사용 가능하고 독립적으로 개발할 수 있습니다.
- 확장성 향상: 애플리케이션 확장이 쉽습니다.
MVC 패턴의 단점
- 복잡도 증가:
- 소규모 프로젝트에서는 불필요하게 복잡할 수 있습니다.
- 학습 곡선:
- 모델, 뷰, 컨트롤러 사이의 상호작용을 이해하는 데 시간이 걸릴 수 있습니다.
'디자인패턴' 카테고리의 다른 글
노출 모듈 패턴 (Revealing Module Pattern) (0) | 2024.12.17 |
---|---|
디자인패턴 - 이터레이터 패턴 (0) | 2024.12.17 |
프록시패턴 (Proxy Pattern) (0) | 2024.12.15 |
옵저버 패턴 (Observer Pattern) (4) | 2024.12.14 |
디자인패턴 - 전략패턴 (2) | 2024.12.14 |