빼먹고 말을 하지 않았는데, 사용 중인 OS는 Windows 11 Home 22631.3155이며, VSCode로 개발을 진행하고 있다.
Django 프로젝트 내에서는 여러 개의 앱이 존재할 수 있다. 앱은 사용자에게서 입력 받은 URL과 연결될 html 파일을 호출하고 렌더링하며 데이터베이스와 연결 짓는 등의 역할을 한다. bash에 django-admin startapp [app name]를 입력하거나, python [dir]/manage.py startapp [app name]을 입력하면 명령을 실행한 디렉토리 내에 앱 구조가 생성된다. manage.py과 같은 위치에 apps라는 이름의 앱을 만들어보겠다.
위와 같은 파일들이 apps 폴더 내에 생성되었다.
지금 와서 Django에 대해 이야기하자면, Django는 파이썬 웹 프레임워크(1)다. 웹사이트 구동에 관한 수많은 일을 파이썬을 중심으로 해결해준다.
내가 이해한 Django의 구조는 이렇다. Django로 이루어진 웹사이트가 있고, 사용자는 URL(2)을 통해 웹의 특정 위치에 접근하려고 한다. Django는 입력된 URL을 바탕으로 특정한 html 파일을 브라우저에 반환하여 렌더링(rendering)(3)한다. 특정한 html 파일을 가리켜 templates라고 하고, 이러한 렌더링을 하는 것이 views이며, 렌더링할 views.py와 입력된 URL을 연관지어 주는 것이 URL dispatcher다.
URL -> URL dispatcher -> views -> templates(html) -> views -> rendering!
URL dispatcher는 지난 포스팅에서 보았던 urls.py가 담당하며, views는 위 사진의 views.py가 담당한다. templates는 사용자가 직접 폴더를 만들어 구성하여야 한다.
간단한 예시를 만들어보자. apps 폴더 내에 templates(4)라는 폴더를 만든다. 그 안에 greeting.html이라는 파일을 만들겠다. 해당 html 파일의 내용은 다음과 같다:
<h1>Shall We Django?</h1>
views.py가 이 html을 호출하는 역할을 잘 수행하도록 내용을 수정해보자.
from django.shortcuts import render
def greetings(request):
return render(request, 'greetings.html')
greetings.html을 호출하는 render라는 함수를 반환하도록 greetings라는 함수를 정의하였다.
다음으로 '[웹사이트 주소]/greetings/'라는 URL을 views.py 내부의 greetings라는 함수와 연결시키기 위하여, shall 폴더 내부의 urls.py의 내용을 다음과 같이 수정하자.
from django.contrib import admin
from django.urls import path
from apps import views
urlpatterns = [
path('admin/', admin.site.urls),
path('greetings/', views.greetings),
]
urlpatterns라는 list에 '[웹사이트 주소]/greetings/'라는 주소를 입력 받으면 apps 내부의 views 내부의 greetings 함수를 호출하도록 하는 원소를 삽입했다.
이제 서버를 실행하고 해당 주소로 들어가볼 때다. http://127.0.0.1:8000/greetings(혹은 http://127.0.0.1:8000/greetings/)에 접속하면 다음과 같은 화면이 우리를 반긴다.
뭐가 문제일까? 이유는 아직 apps라는 앱이 등록이 안 되어 있기 때문이다. Django에서는 설치된 앱의 목록을 관리자가 직접 등록해줘야 한다.(5)
shall 폴더의 settings.py에서 INSTALLED_APPS라는 list에 'apps'라는 원소를 추가하도록 하자.
만약 이러한 파일을 수정할 당시 서버가 켜져 있었다면 콘솔창의 출력이 새로고침을 하듯 바뀌는 것을 볼 수 있다. 재밌게도 Django는 일부 파일 수정에 대해서는 곧바로 적용한 바를 다시 렌더링한다.(6) 이제 다음과 같은 화면이 우리를 반길 것이다.
+/ 더 나아가기
1) 진도가 느리다. 설명을 어느 정도로 써야 할지 갈피가 잡히지 않은 점이 크다. 좋은 문서화란 무엇일까? 당연히 목적에 따라 다를 것이다. 나는 아직 문서의 목적조차 파악하지 못한 것 같다. 튜토리얼인가? 기억을 위한 기록인가? 보여주기 위한 기록인가? 어렵다. 지금 할 수 있는 일은 빨리 피로를 떨쳐내고 주말에 열심히 하는 것뿐인 듯하다.
2) 이 포스팅을 진행하면서 느끼는 점이 많다. 특히 프로젝트의 의미에 대해서 다시금 생각해보게 된다. 하나는 내 개인적인 재미고, 하나는 보다 객관적인 평가다. 내 개인적인 입장으로 보자면 이 프로젝트를 단순히 개인 위키의 뼈대를 만드는 지점에서 끝내면 재미가 없을 거라고 본다. 1차 마감은 일요일 자정으로 정해두되, 확장할 여지에 대해서 지속적으로 생각해봐야겠다. 객관적 평가가 낮을 거라는 지점에 대해서는, 글쎄, 어쩔 수 없다고 본다. 능력의 한계인 셈. 일단은 인정하고 계속 해보는 게 좋다고 생각한다. 개중에서도 더 나은 선택지를 고른다면 좋겠지만.
3) 이 프로젝트의 끝을 상상해봤을 때, 다음과 같은 조건이 떠올랐다:
(1) 권한을 가진(=로그인한) 사용자가 게시글을 작성, 조회, 수정, 삭제할 수 있다. 수정 내역은 기록되어 따로 조회할 수 있다.
(2) 사용자는 내용을 마크다운 문법으로 작성할 수 있고, 이 경우 마크다운 서식이 적용된 모습까지 렌더링을 할 것이다.
(3) sitemap을 간단하게나마 시각화한다.
나쁘지 않다. 나쁘진 않은데, 문제가 있다. 이 과정에서 내가 얻을 수 있는 지식은 많지만 숙련도는 적으리라는 생각이 든다. 웹 개발이라면 응당 이래야 한다는 기준이나 통찰 따위와는 거리가 멀다고 해야 할지, 이런 류의 시도를 반복적으로 시도한다고 해서 더 나은 개발자가 될 것 같지 않다.
그렇다면 뭘 해야 하지? 몇 가지 생각은 있지만 지금 할 말은 아니다. 일요일 자정이 되기 전에 말하도록 노력해야겠다.
*/ 질문 상자
1) 프레임워크란 정확히 무엇인가? 웹 프레임워크는 무엇을 목적으로 하는가? 다른 프레임워크/웹 프레임워크에는 무엇들이 있는가? 라이브러리와는 어떻게 구분되는가?
2) URL이란 무엇인가? 우리가 브라우저에 URL을 입력할 때도 Django에서와 같은 일들이 일어나는가? 아니라면 어떤 과정이 이루어지나?
3) html의 서식과 내용이 화면에 렌더링되는 과정은 무엇인가? 브라우저 내에 어떠한 해석기가 존재하는가? 어떤 해석기인가?
4) 왜 templates 폴더는 사전에 생성시켜주지 않는 걸까? 무슨 이유가 있을까?
5) 설치된 앱의 목록을 관리자가 직접 등록해줘야 하는 이유가 뭘까? 내 생각에는 일부러 결합을 느슨하게 하려는 것 같다. 다른 프로젝트의 앱을 떼어다 붙일 때, 처리해야 할 일을 최소한으로 만들기 위해서라고 해야 할까? 조금 더 찾아보자.
6) 어떻게 이게 가능할까? URL과 html 사이에서 이루어지는 작업에 대해서 너무 추상적으로만 이해하고 있는 것 같다. 이러한 reload의 원리에 대해 생각해보고, reload가 안 되는 경우에는 무엇이 있는지 알아보면 좋겠다.
'Project > Shall We Django?' 카테고리의 다른 글
Shall We Django? [4] (0) | 2024.03.20 |
---|---|
Shall We Django? [3] (0) | 2024.03.17 |
Shall We Django? [1] (1) | 2024.03.13 |
Shall We Django? [0] - 시작하기에 앞서 (0) | 2024.03.13 |