TIL 23. Django - MVT 패턴, ORM, Workflow

문승준·2021년 9월 12일
0

Django

목록 보기
1/7
post-thumbnail

1. Django 웹 프레임워크와 MVT 패턴


Django란?

  • 파이썬 기반으로 만들어진 서버사이드 웹 프레임워크로, 빠른 개발 속도와 실용성을 추구한다.

  • 2005년 발표된 이후 안정성과 기능이 검증되었고, 업데이트 및 커뮤니티 활동이 활발하다.

  • Django의 철학

    • "Batteries included" 철학을 기반으로 빠른 개발 속도를 추구한다.

    • "Don't Repeat Yoursel" 원칙을 적용해서 불필요한 중복이 없고 그룹화된 "applications"는 재사용이 가능하다.

    • 대부분의 형식(HTML, RSS, JSON, XML 등)으로 전송이 가능하며 다양한 종류의 웹사이트 빌드가 가능하다.

    • SQL 인젝션부터 클릭 하이젝킹같은 여러 보안 취약점을 보완할 기능을 제공한다.

    • 리눅스, 윈도우, 맥 OS 등 많은 플랫폼에서 작동하는 파이썬으로 작성되었다.

  • Django의 기술적 특징

    • MVT 패턴을 사용한다. (MVC 디자인 패턴과 같은 개념)

    • 강력한 ORM 기능을 지원한다. (SQL 쿼리문 없이 DB 조작 가능)

    • 자체적인 템플릿을 지원한다. (동적인 페이지 구현)

    • 코드의 변경 사항을 자동으로 반영한다. (수동으로 웹 서버 재시작 불필요)

  • Django를 사용하는 웹사이트

    • Instagram, Mozilla, National Geographic, Pinterest, NASA 등
  • Flask?

    • 파이썬 웹 프레임워크

    • Micro Framework 철학으로 최소한의 기능만 지원한다.

    • 프레임워크 틀에 얽매이지 않는 높은 자유도를 지원한다.


MVT 디자인 패턴

  • 디자인 패턴이란? 효율적으로 코드를 작성하기 위한 코딩 규칙이나 프로젝트 구조를 말한다.

MVC (Model - View - Controller) 패턴이란?

디자인 패턴 중 하나로 프로젝트 구성요소를 모델, 뷰, 컨트롤러 세가지 역할에 따라 구분한다.

  • Model - 데이터와 데이터를 처리하는 로직을 가지고 있다.

  • View - 요청에 대한 결과물을 화면에 보여준다.

  • Controller - Model과 View를 이어주는 역할을 한다.

  • 작동 순서 : 유저의 요청 → 컨트롤러 → 모델 (데이터 처리) → 컨트롤러 → 뷰 → 유저

MVC 패턴은 구성요소가 분리되어 유지보수성, 확장성, 유연성이 증가한다.

→ 구글의 Angular JS, 파이썬의 Django, 페이스북의 React 등

프로젝트 규모가 커지면 컨트롤러가 비대화되고 모델과 뷰의 의존성을 완벽히 분리할 수 없다.

→ 이를 보완한 디자인 패턴으로 MVP, MVVM 등이 있다.

MVT (Model - View - Template) 패턴이란?

MVC 패턴을 기반으로한 Django의 디자인 패턴 (view끼리 역할이 다르다.)

  • Model - 클래스로 정의되며 하나의 클래스가 하나의 DB 테이블이다.

    → 데이터 조작을 위한 ORM 기능을 지원한다.

  • View - MVC의 Controller에 대응하며 요청에 따른 로직을 수행하고 결과를 렌더링하며 응답한다.

    → 렌더링하지 않고 데이터만 주고 받는 경우도 있다.

  • Template - MVC의 View에 대응하며 처리결과를 유저에게 보여준다. (HTML)

  • 추가로 유저와 View 사이에는 URLconf(URL 설계)라는 단계가 있다.

    URL 패턴을 정의하여 해당 URL과 View를 매핑한다. (path 함수 이용)

  • 순서 예시
    유저 요청 → URLconf로 해당 URL과 매핑된 뷰를 호출 → 뷰는 요청에 따라 로직을 처리하고 모델에게 CRUD를 지시 → 모델은 ORM을 통해 DB와 소통하며 CRUD를 수행 → 뷰는 템플릿을 렌더링하여 유저에게 응답


2. Django의 ORM

  • Object Relational Mapping

    객체와 관계형 DB를 매핑해주는 개념

    Django의 ORM은 파이썬 코드를 SQL 쿼리로 변환시켜 주어서 DB를 조작할 수 있다.

  • ORM의 장점

    • 직관적이고 높은 가독성, 내부 로직 작성에 집중할 수 있다.
    • 객체와 테이블의 매핑 관계가 명확해 유지보수가 편리하다.
    • 높은 재사용성 - 매핑시킨 객체들은 언제든 재사용 가능하다.
    • 구현 방법 뿐만 아니라 자료형 타입에도 DB에 종속적이지 않다.
    • SQL 쿼리를 작성하는 것보다 빠른 개발이 가능하다.
  • ORM의 단점

    • DB 설계에 대한 지식이 없으면 성능저하나 일관성이 무너지게 된다.
    • 규모가 커질수록 SQL보다 구현 난이도가 상승한다.
    • SQL 쿼리보단 성능이 떨어진다.
    • 직접 SQL 쿼리를 다뤄야할때 대처가 어려울 수 있다.

3. Django Application Workflow


Django Application의 역할

  • Web Client : 사용자에게 UI 화면을 제공하는 브라우저. (IE/Chrome/Firfox 등)

  • Web Server : HTTP 프로토콜을 기반으로 브라우저의 요청에 응답. (Apache, IIS, Nginx 등)

  • Web Application : 웹 페이지의 동적인 응답을 구현한다. 정적인 응답은 Web Server로 충분.

    브라우저의 요청을 web server로부터 받아들이고,
    필요한 작업을 DB에 접근하여 조작한 다음,
    데이터와 HTML 템플릿을 결합하여
    다시 응답을 보낸다.

  • Django application (Backend API)

    1. URLconf : HTTP 요청을 분석한다.

    2. View : 요청에 따른 로직을 실행한다.

    3. Model : 데이터베이스와 통신한다.


Django MVT Workflow

딱히 정해진 순서는 없지만 기본적인 순서는 아래와 같다.

  1. 프로젝트 세팅 : 프로젝트 및 앱 개발에 필요한 디렉토리와 파일 생성

  2. 모델 만들기 : 테이블 관련 사항을 개발(models.py, admin.py 파일)

  3. URLconf 만들기 : URL 및 뷰 매핑 관계를 정의 (urls.py 파일)

  4. 뷰 만들기 : 어플리케이션 로직 개발 (views.py 파일)

  5. 템플릿 만들기 : 화면 UI 개발 (templates/디렉토리 하위의 *.html 파일들)

  • 프로젝트의 상황에 따라 유연하게 진행한다.
    ex) UI 화면을 생각하면서 로직을 풀어나가는 것이 쉬울 때에는 템플릿을 먼저 코딩하는 등


profile
개발자가 될 팔자

0개의 댓글