디자인패턴
- 웹을 설계하면서 발생하는 문제를 해결 또는 문제발생을 방지하기 위해 만들어진 표준화된 메뉴얼
- 기능별로 분리시켜 상호의존성을 없앰으로써 개발 및 유지보수 시 부작용을 최소화함
MVC(Model-View-Controller)
- 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴 중 하나
- 어플리케이션을 Model과 View 그리고 Controller로 역할을 나누어 구분한 디자인 패턴
- 사용자가 Controller를 조작하면, Controller는 Model을 통해 데이터를 가져옴
- 가져온 데이터를 View를 통해 사용자에게 전달
MVC 구성요소
Model(모델)
- Controller(컨트롤러)가 호출할 때, 요청에 맞는 역할을 수행하는 코드.
- 표시 형식에 의존하지 않는다. 즉, 사용자에게 어떻게 보일지 생각하지 않는다.
- 사용자의 질의(Query)에 대한 정보를 정의한다.
- Database에 접근하고 데이터를 CRUD할 수 있는 코드를 정의한다.
- e.g. DB접근
View(뷰)
- 데이터를 기반으로 사용자들이 볼 수 있는 화면을 제공하는 코드
- Controller로 부터 받은 데이터를 웹브라우져에 랜더링 되도록 변환한다.
- e.g. html
Controller(컨트롤러)
- Model과 View 사이를 이어주는 로직(매개체)을 담당한다.
- 사용자는 Controller를 사용하여 Model에 데이터를 요청한다.
- Model에 데이터를 요청할 때, 각 Model에 맞는 인자값을 가공해서 요청한다.
- 요청에 대한 응답값을 View에 전달한다.
왜 MVC를 사용하는가?
- 사용자가 보는 페이지, 데이터 처리, 이 두가지를 중간에서 제어하는 컨트롤러
- 어플리케이션을 위 세가지로 각각 나누어 개발에 집중할 수 있도록 분리
- 유지보수성, 확장성, 유연성 등이 효율적으로 증가
- 코드의 중복성 최소화
MVT(Model-View-Template)
- Python의 Django 프레임워크에서 사용하는 디자인 패턴
- Django의 MVC 패턴
- Model ⇒ Model
- 데이터베이스에 저장되는 데이터를 CRUD 하는 부분
- View ⇒ Template
- Controller ⇒ View
- 프로그램의 비즈니스 로직을 구현하여 데이터를 요청 및 가져오고
가져온 데이터를 Template에 전달
MVT 처리과정
-
클라이언트로 부터 요청을 받으면 URLconf
를 이용하여 URL 을 분석
-
URL 분석 결과를 통해 해당 URL 에 대한 처리를 담당할 View 를 결정
-
View 는 자신의 로직을 실행 하면서 만일 데이터 베이스 처리가 필요하면 해당 모델에 요청하고 그 결과를 반환받음
-
View 는 자신의 로직 처리가 끝나면 Template 을 사용하여 클라이언트에 전송할 HTML 파일을 생성
-
View 는 최종 결과로 HTML 파일을 클라이언트에 보내어 응답
더 자세한 MVT 패턴
[Django] MVT(Model-View-Template) 패턴