MVC
모델(model), 뷰(view), 컨트롤러(controller)로 이루어진 디자인 패턴
애플리케이션의 구성 요소를 세가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있음
재사용성과 확장성이 용이
애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해짐
모델
모델은 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻함
예를 들어 사각형 모양의 박스 안에 글자가 들어있다면 그 사각형 모양의 박스 위치 정보, 글자 내용, 글자 포맷에 관한 정보
뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델 생성 or 갱신
뷰
inputbox,checkbox,textarea 등 사용자 인터페이스 요소를 나타냄
모델을 기반으로 사용자가 볼 수 있는 화면을 뜻함
모델이 가지고 있는 정보를 따로 저장하지 않아야 하며 단순히 사각형 모양 등 화면에 표시하는 정보만 가지고 있어야 함
변경이 일어나면 컨트롤러에 이를 전달
컨트롤러
하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할
이벤트 등 메인 로직 담당
모델과 뷰의 생명주기 관리
모델과 뷰의 변경통지를 받으면 이를 해석하여 각각의 구성 요소에 해당 내용을 알려줌
동작
MVC 패턴의 동작 순서는 아래와 같습니다.
- 사용자의 Action들은 Controller에 들어옴
- Controller는 사용자의 Action를 확인하고, Model을 업데이트
- Controller는 Model을 나타내줄 View를 선택
- View는 Model을 이용하여 화면을 나타냄
* 참고 - MVC에서 View가 업데이트 되는 방법
- View가 Model을 이용하여 직접 업데이트 하는 방법
- Model에서 View에게 Notify 하여 업데이트 하는 방법
- View가 Polling으로 주기적으로 Model의 변경을 감지하여 업데이트 하는 방법
특징
Controller는 여러개의 View를 선택할 수 있는 1:n 구조
Controller는 View를 선택할 뿐 직접 업데이트 하지 않음 (View는 Controller를 알지 못함)
장점
널리 사용되고 있는 패턴이라는 점에 걸맞게 가장 단순
단순하다 보니 보편적으로 많이 사용되는 디자인패턴
단점
MVC 패턴의 단점은 View와 Model 사이의 의존성이 높음
View와 Model의 높은 의존성은 어플리케이션이 커질 수록 복잡하지고 유지보수가 어렵게 만들 수 있음
출처: https://beomy.tistory.com/43 [beomy:티스토리]
MVC 패턴의 예 : 리액트
대표적인 프레임워크로는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크인 스프링
@RequestParam, @RequestHeader, @PathVariabl e 등의 애너테이션을 기반으로 사용자의 요청값 쉽게 분석 가능
유효한 요청인지 쉽게 거를 수 있음
MTV 패턴
MTV 패턴은 장고의 디자인 패턴
MTV 패턴은 명칭이 조금 다를 뿐이지 기본적인 골자는 MVC 패턴과 동일
Model(모델)
- MVC 패턴의 모델에 대응되며 DB에 저장되는 데이터를 의미
모델은 클래스로 정의되며 하나의 클래스가 하나의 DB Table
원래 DB를 조작하기 위해선 SQL을 다룰 줄 알아야 하지만 장고는 ORM(Object Relational Mapping)기능을 지원하기 때문에 파이썬 코드로 DB를 조작할 수 있음
Template(템플릿)
- MVC 패턴의 뷰에 대응되며 유저에게 보여지는 화면을 의미
장고는 뷰에서 로직을 처리한 후 html 파일을 context와 함께 렌더링하는데 이 때의 html 파일을 템플릿이라고 함
장고는 자체적인 Django Template 문법을 지원하며 이 문법 덕분에 html 파일 내에서 context로 받은 데이터를 활용 가능
View(뷰)
- MVC 패턴의 컨트롤러에 대응되며 요청에 따라 적절한 로직을 수행하여 결과를 템플릿으로 렌더링하며 응답
다만 항상 템플릿을 렌더링 하는 것은 아니고 백엔드에서 데이터만 주고 받는 경우도 있음
여기에 장고는 URLConf(URL 설계)라는 단계가 하나 더 있음
URL 패턴을 정의하여 해당 URL과 뷰를 매핑하는 단계
'Computer Science' 카테고리의 다른 글
| 디자인 패턴 - MVVM 패턴 (1) | 2025.04.24 |
|---|---|
| 디자인 패턴 - MVP 패턴 (0) | 2025.04.24 |
| 디자인 패턴 - 노출모듈 패턴 (1) | 2025.04.23 |
| 디자인 패턴 - 이터레이터 패턴 (0) | 2025.04.23 |
| 디자인 패턴 - 프록시 패턴 (0) | 2025.04.22 |