출간한줄 알았던 밀린 글..... 늦게나마 올려보자.
지난 주 얕게나마 프론트를 구성하는 세 가지 언어에 대해 알아보았다. HTML, CSS, JavaScript 가 그들이다. 이들을 통해 각각의 페이지가 어떻게 구성될 지, 각 페이지에서 사용자의 이벤트를 캐치하여 어떤 행동을 할지에 대해 정할 수 있었다.
이제 이들을 가지고 전체 사이트를 구성할 차례이다.
이는 브라우저, 즉 클라이언트가 특정 url 을 통해 요청을 보내면 이에 응답하는 웹 애플리케이션 을 말한다. 파이썬으로 구현되는 라이브러리로는 Flask, DJango, FastAPI 정도가 있으며 아주 가벼운 Flask, 무겁지만 편리하고 방대한 Django, 비동기 기반 빠른 성능의 FastAPI 로 나뉜다고 볼 수 있다.
이 중 우리는 Django 에 대해 알아보자.
Django 는 저 셋 중에도 가장 널리 사용되어 온 웹 프레임워크로 그 기본 뼈대가 단단히 정해져있는 느낌을 가진다.
DJango 는 MTV 아키텍쳐 를 베이스로 가진다.
데이터를 구성하는 Model, 웹 페이지를 이루는 Template, 그 세부 로직을 담은 View 가 Django의 정수라고 볼 수 있다.
이들을 관리하는 관리자 페이지 라는 것도 자동적으로 제공해주며, 데이터베이스에 접근하는 자체 ORM(Object-Relational Mapping) 도 Django의 특징 중 하나이다.
우선 기본이 되는 django와 거기에 붙은 django-admin 을 다운받아보자.
pip install django
Django 에는 프로젝트와 앱 이라는 개념이 존재한다. 전체 프로젝트의 세부 페이지가 앱이라고 생각하면 되겠다.
mkdir django_test
cd django_test
django-admin startproject config .
django_test 라는 이름의 프로젝트 폴더에서 기본 설정 폴더 config 를 만들며 프로젝트를 시작하였다.

django 의 장점. 위와 같은 간단한 프로젝트 시작 명령어만을 통해 기본 뼈대를 잡아준다.
django-admin startapp polls
해당 명령어를 통해 django_test 프로젝트 내에 polls 라는 새로운 앱 폴더를 생성할 수 있다.
이렇게 프로젝트를 시작하고나면 기본적으로 manage.py 실행 파일이 생성되며 그 세부 내용은 아래처럼 구성되어있다.

config.settings 에 존재하는 설정 파일을 가지고 django 설정을 초기화한 뒤, execute_from_command_line 함수를 통해 사용자가 입력한 명령어를 실행시키는 파일이다.
입력가능한 명령어의 예시와 짧은 설명은 아래와 같다.

실제로 해당 명령어들에 맞는 코드를 확인하기위해 alt+클릭 을 이용해 들어가보고자 했지만 들어가보니 웬 .pyi 파일들만 넘쳐난다...

.pyi 파일은 실제 구현 파일이 아닌 구조 설명 파일이므로 왜 이러나 봤더니 .vscode 경로로 찾아 들어간 것이 문제였다. 수동으로 찾아 들어가보자.

오..... 그만 알아보자.
settings.py 에서는 이런저런 설정을 해줄 수 있다. Django 의 철학 중 하나는 각각의 MTV 파트들 혹은 각각의 앱들이 서로 얽혀있지 않고 독립적으로 존재하는 것. 이에 따라 첫 초기화 시 사용되는 settings.py 파일에는 각각의 앱 이름을 별도로 등록해주어야 한다.
외에도 url 들을 어디서부터 찾아 들어갈 것인지, template 은 어디서 찾을 것인지, 데이터베이스는 어떤 것을 쓸 것인지 등의 기본적인 설정값들이 저장되어 있음을 확인할 수 있다.
그 중 urls.py 에 대해 알아보자.
settings.py 를 보면 아래와 같은 코드가 있다.

첫 url 을 config.urls 에서 찾기 시작하겠다는 뜻.
이 urls.py 파일은 클라이언트가 어떤 url 로 들어오고자 할 때 Django 가 이 요청을 어떤 view(로직) 함수로 넘겨주어야 하느냐를 정해놓은 파일이다.

<프로젝트의 url>/admin/ 으로 들어오는 요청과 <프로젝트의 url>/polls/ 로 들어오는 요청을 각각 다르게 처리함을 알 수 있다. 그 중 include() 함수는 django 에서 정의해놓은 기본 함수로 이 url 은 저쪽 폴더에 있는 url 파일 봐 ~ 라고 하는 것이다. 들어가보자.

이런 식으로 각 url에 대한 매핑이 되어있다. name 속성은 후에 html 등에서 이 url 을 편리하게 불러다 쓰기 위함이다.
이제 각 url 에 대한 요청을 각각의 views 에 넘겨주는 방식을 알았으니 실제 view 에 대해 알아볼 차례이다.
Django 에서 view 란 하나의 세부 로직을 의미하며 사용자의 요청, request 에 대해 하나의 응답, HttpResponse 를 만들어내는 과정을 의미한다.
Django의 view 는 크게 FBV(Function-Based View) 와 CBV(Class-Based View) 로 나뉜다.
각각의 요청을 세부 함수를 통해 구현하는 FBV 에 대해 먼저 알아보자.

다 무시하고 보면 사용자의 입력 request 를 받아 HttpResponse 를 반환하도록 만든 하나의 세부 함수이다.