TIL 24. Django의 MVT 패턴

윤현묵·2021년 8월 16일
0

Django

목록 보기
1/17
post-thumbnail

Django란?

장고(Django)는 파이썬으로 작성된 오픈 소스 웹 프레임워크로, 모델-뷰-컨트롤러(MVC) 패턴을 따르고 있다. 현재는 장고 소프트웨어 재단에 의해 관리되고 있다.
고도의 데이터베이스 기반 웹사이트를 작성하는 데 있어서 수고를 더는 것이 장고의 주된 목표이다. 장고는 콤포넌트의 재사용성(reusability)과 플러그인화 가능성(pluggability), 빠른 개발 등을 강조하고 있다. 또한, "DRY(Don't repeat yourself: 중복배제)" 원리를 따랐다. 설정 파일부터 데이터 모델에까지 파이썬 언어가 구석구석에 쓰였다.

Django의 역사

장고는 2003년과 2004년에 로렌스 저널-월드(Lawrence Journal-World)라는 신문사의 인턴 웹 프로그래머였던 에이드리안 홀로바티(Adrian Holovaty)와 사이먼 윌리슨(Simon Willison)이 파이썬을 이용해 애플리케이션을 만들기 시작하면서 처음 개발되었다. 당시 로렌스 저널-월드의 웹사이트는 PHP 기반으로 쓰여졌었는데, 홀로바티와 윌리슨은 PHP는 규모가 큰 웹사이트에 적합하지 않다고 생각했고 이를 계기로 파이썬으로 웹 개발을 하기로 결심했다. 하지만 규모가 큰 웹 개발에 적합한 파이썬 도구가 없다는 것을 깨닫고 그들은 장고를 개발하게 되었다. 장고라는 이름은 홀로바티가 좋아하던 집시 재즈 기타리스트인 장고 라인하르트에서 따온 것이다.
사실 장고는 오직 로렌스 웹사이트를 구동하기 위함이었으나, 홀로바티와 윌리슨이 로렌스의 소유자인 더 월드 컴퍼니(The World Company)를 설득하여 오픈 소스로 2005년 7월에 BSD 사용 허가서로 공개하게 되었다.
2008년 6월, 장고 소프트웨어 재단이 공식적으로 장고 프로젝트를 관리하게 된다는 공지가 장고 웹사이트에 올라왔다.

출처: 위키백과 장고_(웹_프레임워크)

웹 프레임워크란?

웹 프레임워크 또는 웹 애플리케이션 프레임워크는 동적인 웹 페이지나, 웹 애플리케이션, 웹 서비스 개발 보조용으로 만들어지는 애플리케이션 프레임워크의 일종이다.

MVT 패턴이란?

MVT 패턴은 디자인 패턴 중 하나로, Model, View, Template의 약자입니다.
장고 프레임워크에서는 MVC에서의 View를 Template, Controller는 View라고 표현하며, MVT 패턴이라고 합니다. Model은 데이터 베이스에 저장되는 데이터를 의미하는 것이고, Template은 사용자에게 보여지는 UI부분을, View는 실질적으로 프로그램 로직이 동작하여 데이터를 가져오고 적절하게 처리한 결과를 템플릿에 전달하는 역할을 수행합니다.

웹 클라이언트의 요청을 받고, 장고에서 MVT 패턴에 따라 처리하는 과정을 요약하면 다음과 같습니다.

(1) 클라이언트로부터 요청을 받으면 URLconf를 이용하여 URL을 분석
(2) URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 뷰를 결정
(3) 뷰는 자신의 로직을 실행하면서 만일 데이터베이스 처리가 필요하면 모델을 통해 처리하고 그 결과를 반환
(4) 뷰는 자신의 로직 처리가 끝나면 템플릿을 사용하여 클라이언트에 전송할 HTML 파일을 생성
(5) 뷰는 최종 결과로 HTML 파일을 클라이언트에게 보내 응답

URLconf - URL 정의

클라이언트로부터 받은 요청에 들어있는 URL이 urls.py 파일에 정의된 URL 패턴과 매칭되는지를 분석합니다. 파이썬의 URL 정의 방식은 전통적인 JAVA나 PHP 계열의 URL보다 직관적이고 이해하기가 쉽습니다. 그래서 이러한 방식을 Elegent URL이라고도 하며, URL을 정의하기 위해서는 urls.py 파일에 URL과 처리함수 (View)를 매핑하는 파이썬 코드를 작성하면 됩니다. 이러한 URL/View 매핑을 URLconf라고 합니다.

View - 로직 정의

일반적으로 View는 웹 요청을 받아서 데이터 베이스 접속 등 해당 어플리케이션의 로직에 맞는 처리를 하고, 그 결과 데이터를 HTML로 변환하기 위하여 템플릿 처리를 한 후에 최종 HTML로 된 응답 데이터를 웹 클라이언트로 반환하는 역할을 합니다.
장고에서 View는 함수 또는 클래스의 메소드로 작성되며, 웹 요청을 받고 응답을 반환해줍니다. 다양한 형태의 응답 데이터를 만들어 내기 위한 로직을 View에 작성하는 것인데, 이러한 View는 보통 views.py 파일에 작성하지만 원한다면 파이썬 경로에 있는 다른 파일에 작성해도 무방합니다.

Template - 화면 UI 정의

장고가 클라이언트에 반환하는 최종 응답은 HTML 텍스트입니다. 개발자가 응답에 사용할 html 파일을 작성하면, 장고는 이를 해석해서 최종 HTML 텍스트 응답을 생성하고, 이를 클라이언트에게 보내줍니다 템플릿 파일은 *.html 확장자를 가지며, 장고의 템플릿 시스템 문법에 맞게 작성합니다. 유의할 점은 템플릿 파일을 적절한 디렉토리에 위치시켜야 한다는 점으로, 장고에서 템플릿 파일을 찾는 방식을 이해하고 있어야 하며, 장고는 그에 맞는 위치에 템플릿 파일이 위치해야 템플릿 파일을 찾을 수 있습니다.
장고에서 템플릿 파일을 찾을 때는 TEMPLATE_DIRS 및 INSTALLED_APPS에서 지정된 앱의 디렉토리를 검색합니다. 이 항목들은 프로젝트 설정 파일인 settings.py에 정의되어 있으며, 여러개의 디렉토리를 지정할 수 있는데, 지정된 순서대로 디렉토리를 검색하여 템플릿 파일을 찾습니다.

ORM이란?

ORM(Object-Relation Mapping)이란 객체와 관계형 데이터 베이스를 Mapping하는 것을 의미합니다. 간단히 말하자면 데이터 베이스의 테이블과 객체를 연결하여 테이블에서 CRUD할 때, SQL쿼리를 사용하지 않아도 되도록 하는 것입니다.

  • 장점
    -. 편하고 직관적이어서 비즈니스 로직에 더욱 집중할 수 있음
    . -SQL문으로 데이터베이스에 접근하는 것이 아니라 클래스의 객체로 데이터를 조작하는 것이기 때문에 더 객체지향적
    -. 좀 더 직관적이고, 비즈니스 로직에 더 집중할 수 있도록 해주며 이로인해 생산성이 증가
    -. 각 객체를 한번 생성하면, 그 객체를 활용해 객체 안의 다양한 필드 값을 편하게 가져올 수 있어 재사용이 편리하고, 또한 자주 사용하는 Query Set을 모델내에 정의하면 재사용이 편리
    DBMS에 종속적이지 않다. 매핑이 직관적이고, 잘 시켜놓으면 Native Query 없이 객체 메소드를 -. 활용해 CRUD가 가능. 데이터에 대한 가공 또한 파이썬, 혹은 자바의 기능을 이용함으로써 간결

  • 단점
    -. ORM만으로 서비스를 구축하는 것은 어려움
    -. 서비스의 복잡성이 커질수록 설계를 매우 신중히 해야하며, 잘못 구현된 경우 SQL문이 비효율적으로 생성되어 성능을 저하시킬 우려가 있음
    -. 복잡한 쿼리를 생성하는 것이 어려울 수 있음
    -. 성능이 최적화된 쿼리보다는 ORM에 최적화된 쿼리를 생성하기 때문에, 개발 중간에 성능을 저하시킬 수 있는 부분은 row query를 꼭 확인해서 어떻게 쿼리가 생성되는지 확인할 필요가 있음

MVT 코딩 순서

사실 코딩을 하는데 정해진 순서는 없습니다. UI 화면을 생각하면서 로직을 풀어나가는 것이 쉬울 때에는 템플릿을 먼저 코딩하기도 하지만 아래와 같은 순서로 코딩을 진행하기도 합니다.

-. 프로젝트 뼈대 만들기 : 프로젝트 및 앱 개발에 필요한 디렉토리와 파일 생성
-. 모델 코딩하기 : 테이블 관련 사항을 개발(models.py, admin.py 파일)
-. URLconf 코딩하기 : URL 및 뷰 매핑 관계를 정의 (urls.py 파일)
-. 템플릿 코딩하기 : 화면 UI 개발 (templates/디렉토리 하위의 *.html 파일들)
-. 뷰 코딩하기 : 어플리케이션 로직 개발 (views.py 파일)

참고자료
https://butter-shower.tistory.com/49
https://codesik.github.io/Django-ORM-Model/#%EC%9E%A5%EC%A0%90
profile
진정성 있는 개발자를 꿈꾼다

0개의 댓글