MVT 패턴
MVT 패턴의 처리 과정
웹 클라이언트의 요청을 받고, 장고에서 MVT 패턴에 따라 처리하는 과정을 요약하면 다음과 같습니다.
클라이언트로부터 받은 요청에 들어있는 URL이 urls.py 파일에 정의된 URL 패턴과 매칭되는지를 분석합니다.
URL을 정의하기 위해서는 urls.py
파일에 URL과 처리함수(View에 정의된 함수)를 매핑하는 파이썬 코드를 작성합니다. 이러한 URL-View 매핑을 URLconf라고 합니다.
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>', views.article_detail),
]
Path Converter
위 코드를 보면 URL 패턴을 정의할 때 <>를 사용하는 부분이 있는데 이 부분을 Path Converter라고 부릅니다.
이는 URL 패턴의 일부 문자열을 추출하기 위한 것이며 type:name
형식으로 사용합니다.
뷰는 웹 요청을 받아서 데이터베이스 접속 등 해당 어플리케이션의 로직에 맞는 처리를 하고, 그 결과 데이터를 HTML로 변환하기 위하여 템플릿 처리를 한 후에 최종 HTML로 된 응답 데이터를 웹 클라이언트로 반환하는 역할을 합니다.
장고에서 뷰는 함수 또는 클래스의 메소드로 작성되며, 웹 요청을 받고 응답을 반환해줍니다. 이러한 뷰는 보통 view.py
에 작성하지만 다른 파일에 작성해도 무방합니다. (다만, 파이썬 경로에 있는 파일이어야 장고가 찾을 수 있습니다.)
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now();
html = "<html><body>It is now %s</body></html>" % now
return HttpResponse(html)
장고가 클라이언트에 반환하는 최종 응답은 HTML 텍스트입니다. 개발자가 응답에 사용할 .html 파일을 작성하면, 장고는 이를 해석해서 최종 HTML 텍스트 응답을 생성하고 이를 클라이언트에게 보내줍니다.
템플릿 파일은 .html 확장자를 가지며, 장고의 템플릿 시스템 문법에 맞게 작성합니다. (템플릿 파일은 설정된 위치에 위치시켜야 합니다.)
Django는 ORM 기반 프레임워크로 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주기 때문에 SQL 쿼리문 없이도 데이터베이스의 데이터를 다룰 수 있습니다.
>>> Book.objects.all()
<QuerySet [<Book: one>, <Book: two>]>
objects.all()
메서드를 이용하면 쿼리문 없이 Book 객체에 저장된 데이터를 모두 가져올 수 있습니다.Django ORM의 장점
쿼리를 객체 관점으로 작성함으로써 재사용성을 높일 수 있습니다.
반복되는 코드를 줄일 수 있습니다.
특정 데이터베이스가 아닌 범용적으로 작성할 수 있습니다.
생산성을 높일 수 있습니다.
동적으로 처리하기 좋습니다.
조건절에 대해서 다양한 Lookup 필드를 제공해줘서 해당 lookup 필드를 알고 있다면 쉽게 사용할 수 있습니다.
field lookup: SQL의 where에 해당하는 기능
Django Field lookups
https://docs.djangoproject.com/en/3.0/ref/models/querysets/#id4
dirty checking을 지원합니다.
Django ORM의 단점
타입문제
Java는 정적언어로써 컴파일되고 타입이 있습니다.
Python은 동적언어로써 타입을 코드에 명시하지 않습니다.
타입이 지정되는 언어가 런타임시에도 더 안정적이므로 타입 안정성 문제에 대해서는 스프링+자바가 낫다고 생각합니다.
개발의 편리함
장고는 csrf_token 기능 등을 구현하지 않아도 기본 제공합니다
파이썬 코드가 자바보다 훨씬 짧습니다.
파이썬은 여러 자료형을 제공합니다.
→주어진 비즈니스 로직을 구현할 때는 파이썬이 더 쉬울 수 있습니다.
어드민 페이지를 제공합니다.
pandas를 통해, 엑셀, csv 파일 처리를 쉽게 할 수 있습니다.
언어 성능
언어성능은 자바가 더 빠릅니다.
언어차원에서 json 다루기
파이썬은 import json 후 json.dump(), json.load() 등 메소드로 json을 쉽게 다룰 수 있습니다.
러닝커브
스프링은 기본 언어가 자바로 장고+파이썬에 비해 난이도가 있습니다.