TIL (2020.06.04)

Awesome·2020년 6월 5일
0

Django - 기초(1)

Django는 웹 서비스를 위한 파이썬 기반의 백엔드 프레임워크이다. 데이터를 저장하는 DB와 웹에 직접적으로 노출되는 Template, 그리고 그 사이의 로직을 담당하는 View 등으로 역할이 분할되어 있다. 과거 하나의 스크립트 안에서 모든 것들이 구현되었으나, 기술의 발전과 함께 보다 다양한 기능들이 생겼다. 동시에 그 모든 것들을 단 하나의 스크립트 안에서 모두 구현해내는 것이 매우 복잡해졌다. 이에 따라 각각 기능 별로 분할하여 코드를 작성하고 합치는 방식으로 변화하였다.

Django MVT 패턴

Django를 통해 데이터가 사용자에게 노출되기까지 어떠한 순서 혹은 구조로 진행되는지를 파악할 필요가 있다.
아래의 그림은 django의 구조적인 패턴인 mvt 패턴을 요약한 것이다.

이미지출처

MVT / MVC

MVT 패턴은 기존의 MVC 패턴과 비교된다.
MVC 는 Model/View/Control 을 각각 의미하며, 역할은 다음과 같다.

  • Model : 데이터의 원천이 되는 데이터베이스를 구성하는 역할을 한다.
  • View : 브라우저를 통해 사용자에게 직접 보여지는 프레젠테이션 로직을 처리하여 UI를 나타낸다.
  • Controller : View에서 사용자로부터 전달받은 데이터를 Model에 업데이트 처리하는 로직을 제공하거나 Model로부터 데이터를 받아 View를 통해 노출시키는 로직을 담당한다.

MVT는 MVC에서 약간 변형된 django에서 통용되는 패턴이다.

  • Model : 위와 같다.
  • View : MVC에서 Control이 담당하는 부분을 django에서는 view가 담당한다.
  • Template : MVT에서의 View의 역할을 담당한다.

이미지출처

Data flow through Django

  1. 사용자가 웹에서 어떠한 동작을 통해 요청을 함
  2. 웹 서버를 통해서 그 요청을 받음
  3. 해당 요청이 Django 로 건네짐
  4. Django 에서 개발자가 정의한 URL paths 를 통해 어떤 view를 선택할 지 결정함
  5. 해당 view에서 어떤 모델이 필요할지 결정하고 template 으로 전달
  6. template 에서 HTML 페이지 생성
  7. 생성된 HTML 페이지가 사용자의 브라우저로 전달됨

뭐 대략 이런 process 다. 번역하는 과정에서 어색해졌다. 참고자료의 원문을 보는게 낫겠다. Django가 많이 쓰이는 이유는 CRUD 에 매우 유용한 프레임워크이기 때문이다.

CRUD : Create / Read / Update / Delete

일반적인 웹 서비스에서 필수적으로 구현되는 기능들이다. Instagram, 각종 블로그 등이 이에 해당한다. 이 다음부터는 Django의 여러 기능들을 직접 구현해보면서 파악하겠다.

ORM

Django 가 많이 쓰이는 이유 중에 또하나가 바로 ORM이다.

ORM : Object Relational Mapping - 파이썬 객체와 관계형 DB의 데이터를 자동으로 매핑시켜주는 것

관계형 데이터베이스(RDB)는 SQL(Structured Query Language)이라는 언어를 사용해서 해당 데이터에 접근하고 추출한다. 그렇기 때문에 sql을 사용할 줄 알아야 한다. 하지만 django에서는 파이썬으로 작성한 코드를 번역(?) 하여 sql로 변환하고 해당 조건에 맞는 데이터를 추출할 수 있도록 도와준다. 이게 ORM이다.

파이썬 하나만 해도 빡센 상황에 sql 을 또 해야한다는 부담감을 줄여주는 고마운 기능이라고 볼 수 있다.

# python
User.objects.filter(age=30).order_by('created_date')

# sql
select * from users where age = 30 order by created_date

참고자료

https://www.theturninggear.com/2018/10/22/djangos-architectural-pattern/

https://nitro04.blogspot.com/2020/01/django-mvc-mvt.html

profile
keep calm and carry on

0개의 댓글