안녕하세요~ jju_developer입니다.
오늘은 드디어 장고가 무엇이냐에 대해 배웠습니다!!
장고의 특징
장고는 파이썬 웹 프레임워크이며 주요 기능별 특징은 아래와 같습니다.
• MVC 패턴 기반: MVT(Model View Template)
- View를 Template, Controller를 View라고 부른다. 용어만 다를 뿐 그 개념은 MVC 패턴과 동일합니다~
• 객체관계매핑 (ORM object relation mapping)
- 데이터베이스 시스템과 모델이라는 파이썬 클래스를 연결시키는 다리와 같은 역할을 합니다.
(JPA로 지금 프로젝트 하고있는데 장고에도 ORM으로 구성된 것이 있습니다.)
• 자동으로 구성되는 관리자 화면
- 웹 서버의 콘텐츠, 즉 데이터베이스에 대한 관리 기능을 위하여 프로젝트를 시작하는 시점에 기본 기능으로 관리자 화면을 제공합니다.
• 우아한 URL 설계
- 정규표현식을 사용하여 복잡한 URL도 표현할 수 있으며,
각 URL 형태를 파이썬 함수에 1:1로 연결하도록 되어 있어 개발이 편리하며 이해하기도 쉽습니다.
• 자체 템플릿 시스템 (=타임리프와 비슷합니다)
- 내부적으로 확장이 가능하고 디자인하기 쉬운 템플릿 시스템을 가지고 있습니다.
• 캐시시스템
- 자주 이용되는 내용을 저장하였다가 재사용하여 성능을 높입니다.
• 다국어지원
- 동일한 소스 코드를 다른 나라에서도 사용할 수 있도록 텍스트 번역, 날짜/시간/숫 자 포맷, 타임존 지정 등과 같은
다국어 환경을 제공합니다.
• 풍부한 개발 환경
- 테스트용 웹 서버를 포함하고 있어서 개발 과정에서 아파치 등의 웹 서버가 없어도
테스트를 진행할 수 있습니다.
• 소스 변경사항 자동 반영
- 개발 과정에서 장고는 *.py 파일의 변경 여부를 감시하고 있다가 변경이 되면 실행 파일에 변경 내역을 바로 반영해 줍니다.
이러한 특성들이 전체적인 장고의 특성이 되겠습니다.
지난 시간에 파이참에서 커맨드로 장고를 깔았습니다.
깔려있는지 확인을 해보고 싶으시면
python -m django --version
이렇게 치면 장고의 버전이 나옵니다.
저는 최신 버전이기 때문에 4.2.1 버전입니다.
장고에서는 용어를 사용할 때,
웹 사이트에 대한 전체 프로그램을 프로젝트(Project)라 하고
모듈화 된 단위 프로그램을 애플리케이션(Application)이라 부릅니다.
즉, 애플리케이션 프로그램들을 모아서 프로젝트를 개발하는 개념인 것이죠!
mvt 패턴을 보면 전형적인 mvc 패턴과 동일합니다.
즉, 데이터베이스에 들어가기 위한 모델이 있고
화면인 뷰가 나눠져 있는 것이죠
장고는 ORM 기법을 사용하여 애플리케이션에서 사용할 데이터베이스를 클래스로 매핑해서 코딩할 수 있습니다.
즉, 하나의 모델 클래스는 하나의 테이블에 매핑되고 모델 클래스의 속성은 테이블의 칼럼에 매핑되는 것이죠
자바에서 ORM 기능은 JPA가 하고
파이썬에서 ORM 기법을 Django에서 사용합니다.
ORM은 데이터베이스가 어떤 엔진을 쓰는지를 신경 쓰지 않아도 되기 때문에 쉽게 데이터베이스 엔진을 바꿀 수 있습니다.
(ORM(Object-Relation Mapping)은 쉽게 표현하면 객체와 관계형 데이터베이스를 연결해 주는 역할을 하며,
개발자는 객체를 대상으로 필요한 작업을 실행하면 ORM이 자동으로 적절한 SQL 구문이나 데이터베이스 API를 호출해서 처리합니다.)
첫 번째 구문을 해석하면
' ' 은 루트를 의미합니다. 즉, 루트가 들어오면 polls의 루트 컨트롤러는 view.detail이라는 뜻입니다.
그렇다면 import 받은 view.py를 보겠습니다.
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect
from django.urls import reverse
from polls.models import Choice, Question
def index(request):
latest_question_list = Question.objects.all().order_by('-pub_date')[:5]
context = {'latest_question_list': latest_question_list}
return render(request, 'polls/index.html', context)
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {'question': question})
def results(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/results.html', {'question': question})
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the question voting form.
return render(request, 'polls/detail.html', {
'question': question,
'error_message': "You didn't select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
# Always return an HttpResponseRedirect after successfully dealing
# with POST data. This prevents data from being posted twice if a
# user hits the Back button.
return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
템플릿은 화면이며, 템플릿 정의는 아래와 같이 3개로 나눠서 html로 만들어져 있습니다.
개발자가 작성하는 *. html 파일을 템플릿이라 부르며, 여기에 화면 UI 모습을 템플릿 문법에 맞게 작성합니다.
장고에서 템플릿 파일을 찾을 때는 TEMPLATES 및 INSTALLED_APPS에서 지정된 앱의 디렉터리를 검색합니다.
이 항목들은 프로젝트 설정 파일인 settings.py 파일에 정의되어 있습니다.
이번시간에는 이러한 장고의 기본적인 원리를 보았습니다.
Django는 아직도 배울길이 멀지만 최대한 기초를 이해하기 위해서 장고의 특성에 대해 알아보았습니다.
오늘고 수고하셨습니다.
'주니어 기초 코딩공부 > Python 기초' 카테고리의 다른 글
Django 03 HTTPServer 및 BaseHTTPRequestHandler 클래스 (0) | 2023.05.08 |
---|---|
Django 02 맥북 장고 개발 환경 준비하기 feat. 파이참 (0) | 2023.05.04 |
Django 01 웹프로그래밍 (0) | 2023.05.03 |
파이썬 공부_사이트 (0) | 2023.03.20 |
python_matplotlib로 다양한 그래프 그리기(데이터 시각화)_선그래프, 원그래프, 막대 그래프, 파이 그래프 (0) | 2023.03.09 |