[Django] MVT 아키텍처

    장고는 MVT아키텍처를 가지고 있다.

    MVT는 Model View Template로 이루어진 아키택처 패턴인데, 이 구성요소를 하나씩 살펴보자.

    Model

    모델은 DB 구조를 정의하고 DB와의 상호작용을 캡슐화한다. Django는 ORM(Object-Relational Mapping)을 통해 데이터베이스 테이블에 대응되며 이를 통해 따로 SQL을 작성하지 않고 DB작업을 수행할 수 있다.

    각 class에 선언된 클래스변수는 테이블의 컬럼에 해당한다.

    View

    view는 로직을 담당한다. HTTP로 넘겨진 요청에 따라 처리를 해주는 urls.py에서는 view의 함수를 호출한다. 그러면 view의 함수에서는 DB에 있는 data 중 필요한 것들을 조회하기 위해 model을 호출합니다. 그렇게 해서 얻은 데이터를 템플릿에 전달하여 동적인 웹 페이지를 생성해 주고, 생성된 웹페이지나 기타 응답코드를 클라이언트에게 반환하는 역할을 한다.

    Django에서는 함수 기반 뷰(Function-Based Views, FBVs)와 클래스 기반 뷰(Class-Based Views, CBVs)의 두 가지 형태가 존재한다. 사진에서는 함수 기반 뷰를 사용했다. 클래스 기반 뷰를 사용하면 재사용이 가능하고, 복잡한 웹 애플리케이션을 좀 더 체계적으로 관리할 수 있다.

    Template

    웹 애플리케이션의 보이는 부분을 담당한다. Template는 HTML을 기반으로 하지만 Django Template Language (DTL)이라는 자체 템플릿 시스템을 사용하여 동적 데이터를 HTML에 삽입할 수 있도록 확장된다. 이러한 동적 데이터를 보여주기 위해 템플릿 태그와 템플릿 변수를 활용한다. 이때 사용되는 템플릿 태그를 통해 코드를 재사용할 수 있다. (상속 class와 같이 )

     

    MVC 아키텍처와 MVT 아키텍처

    현재 내가 진행하고 있는 Flutter로 개발 중인 프로젝트는 MVC 구조를 사용하고 있다. 사용자의 입력을 받아 내부 로직을 처리하고 모델을 이용해 데이터를 조작하고 뷰를 통해 결과를 표시하도록 하는 매개자 역할이 Controller인데, 이런 MVC(Model, View, Controller) 구조를 사용하게 되면 Django의 Template에서 하던 비즈니스 로직을 View에서 처리한다. 그리고 Django의 View에서 진행하던 사용자의 인터페이스역할과 모델과의 상호작용, 템플릿 랜더링등의 결정을 MVC 구조에서는 컨트롤러가 한다.

    이처럼 View와 Controller가 따로 존재하므로 프론트앤드와 디자이너가 분업화하기 쉽다. 하지만 Django의 MVT는 웹 애플리케이션에 특화되어 있으며, 개발 속도와 효율성이 중요한 소규모 팀 또는 단일 개발자 프로젝트에 더 적합할 수 있다.

    'Backend > Django' 카테고리의 다른 글

    [Django] migration  (0) 2023.11.06
    [Django] Web Server Gateway Interface(wsgi)  (3) 2023.11.06

    댓글