본문 바로가기
기타/Django

[Practical Django] 03. 웹의 작동방식과 같이 이해하는 URLconfig

by DoBeFree 2022. 5. 15.
반응형

<전체 시리즈 목차>
2022.05.15 - [기타/Django] - [Practical Django] 들어가며
2022.05.15 - [기타/Django] - [Practical Django]01. 데이터분석가를 위한 웹의 이해
2022.05.15 - [기타/Django] - [Practical Django] 02.Django설치 및 기본 구조의 이해
2022.05.15 - [기타/Django] - [Practical Django] 03. 웹의 작동방식과 같이 이해하는 URLconfig

저번 챕터에서는 간단한 웹애플리케이션을 만들어 django 프로젝트의 큰 틀이 어떻게 구성되는지 살펴보았다.

이번 챕터에서는 01. 데이터분석가를 위한 웹의 이해 에서 학습한 웹의 작동 원리에 맞게 Django는 어떤 구조로 어떻게 작동하는지 이해하는것을 목적으로 한다. 이 페이지에서는 큰 틀에서 웹의 작동과 django의 URL, MVT 디자인 패턴에 대해서 설명하고 각 구성요소인 URL, View, Template, Model 은 각각 페이지로 나눠서 학습할 예정이다.

1. 웹의 작동 흐름과 Django

챕터01에서 우리는 웹은 클라이언트의 request를 받아 서버가 html페이지를 response해주는 과정으로 이해했고 그 과정에서 Django는 서버사이드 프로그래밍을 효율적으로 진행할 수 있도록 하는 서버사이드 웹 프레임워크인 점도 학습하였다. 챕터01에서는 웹에대한 이해를 돕기위해 사용자의 입장에서 웹의 작동에 대해서 다뤘다면, 이제부터는 Django를 이해하기 위해 서버의 입장에서 웹의 작동과 그에 따른 Django의 구조에 대해서 학습해보자. 그림은 Django의 Request의 처리가 어떤 과정으로 진행되는지 도식화한 부분으로 request의 흐름에 따라 각 부분을 설명할 예정이다

2. 클라이언트의 요청을 수용하는 urls.py

클라이언트는 URL을 통해서 요청(Request)을 보낸다. 반대로 서버입장에서는 URL로 받은 응답(Request)에 대하여 어떤 응답(Response)을 클라이언트에 전송할지 정해야한다. Django는 클라이언트의 응답(Request)을 프로젝트단의 urls.py에서 수용하고 응답을 위해서 추가적으로 어떤 작업을 수행할지 가장 앞단에서 결정한다.

3. URLConfig를 통해 첫 화면에 Welcome 메시지를 반환하는 웹애플리케이션 개발하기

기본 주소를 입력하여 클라이언트에서 요청을 보내면 “Welcome! This is the 1st page in django project” 라는 메시지를 응답하도록 urls.py를 변경해보자

이를 위해 src/practical_django/urls.py를 아래와 같이 수정한다.

#src/practical_django/urls.py
from django.contrib import admin
from django.urls import path
from django.http import HttpResponse

def index(request):
    return HttpResponse("Welcome! This is the 1st page in django project")

urlpatterns = [
    path('admin/', admin.site.urls),
	path('', index),
	]

4. 서버 가동하기

02.Django설치 및 기본 구조의 이해에서 설명한바와 같이 Django는 개발을 마무리하고 makemigrations와 migrate를 통해 수정을 반영하고, 개발단계에서는 runserver명령어를 통해 웹 서버를 수동으로 작동시켜줘야 한다. 다만, 이번 수정은 데이터 자체의 수정이 아니기 때문에 runserver명령어만 사용해서 웹 서버를 구동해보자

(venv)$ python manage.py runserver
 🦜 만약 오류가 난다면, 챕터 02. Django설치 및 기본구조의 이해 에서 다룬부분이었던 3가지를 체크해보자
1.가상환경 venv가 활성화돼 있는지?
2.venv에 django가 설치되어 있는지?
3.터미널의 명령어를 입력할 때, manage.py파일이 있는 디렉토리에서 명령어를 실행했는가?

<결과1>

브라우저에 127.0.0.1:8000 을 입력하여 요청을 보내면 아래와 같은 페이지를 django는 응답하게 된다.

우리는 브라우저에 127.0.0.1:8000으로 url을 입력하고, 브라우저는 이 주소로 request를 전송하게 된다. urls.py에서는 이 request를 받고 path('', view=index, name = 'index') 에 정의된 index라는 함수를 호출하고 request를 전달하게 된다.

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', view=index, name = 'index'),
]
🦜 django는 urlpatterns 에 path라는 함수를 통해서 어떤 URL로 request가 전달됐는지 확인후 알맞은 response가 나올 수 있도록 request를 전달합니다.

이렇게 urls.py에서 index 로 이동시킨 request는 index함수에서 정의된 "Welcome! This is the 1st page in django project" 라는 response를 브라우저에 반환하여 <그림1-2>와 같은 화면을 브라우저에서 확인할 수 있게된다.

def index(request):
    return HttpResponse("Welcome! This is the 1st page in django project")

즉 urls.py의 역할은 request를 알맞은 response로 전달 될 수 있도록 전달하는 역할을 하는것을 확인할 수 있다.

3. Practice : URLConfig를 통해 about 페이지 개발하기

첫 화면에 Welcome 메시지를 반환하는 부분을 통해 urls.py의 request전달과 response 응답에 대한 전체적인 플로우를 확인했다면

이번에는 127.0.0.1/about 이라는 URL로 Request가 전달됐을 경우 “This Page is a about page” 라는 메시지가 response되도록 urls.py를 수정하여 해당 프로세스를 연습해보자. 위 예제를 잘 따라왔다면 아래와 같은 코드가 아직 남아 있을 것이다.

#src/practical_django/urls.py
from django.contrib import admin
from django.urls import path
from django.http import HttpResponse

def index(request):
    return HttpResponse("Welcome! This is the 1st page in django project")

urlpatterns = [
    path('admin/', admin.site.urls),
		path('', index),
	]

3-1. Reponse 설계하기

우선 어떤 화면을 response할지 정해줘야 한다. 마찬가지로 about이라는 함수를 통해 HttpRespnonse를 설계해보자

about이라는 함수로 request를 받고 "This Page is a about page" 메시지를 response하도록 설계가 끝났다.

#src/practical_django/urls.py
from django.contrib import admin
from django.urls import path
from django.http import HttpResponse

def index(request):
    return HttpResponse("Welcome! This is the 1st page in django project")

# (about예제에 추가된 함수)
def about(request):  
    return HttpResponse("This Page is a about page")

urlpatterns = [
    path('admin/', admin.site.urls),
		path('', index),
	]

3-2. URLconf 설계하기

이제 어떤 response를 진행할지 결정했으니, 127.0.0.1/about 로 request를 받을 수 있도록 URL로 설계해보자. Django는 urlpatterns라는 리스트를 통해 전송된 request의 url패턴을 체크한다. 따라서 urlpatterns 내에 URL경로가 등록될 수 있도록 해야한다.

#src/practical_django/urls.py
from django.contrib import admin
from django.urls import path
from django.http import HttpResponse

def index(request):
    return HttpResponse("Welcome! This is the 1st page in django project")

# (about예제에 추가된 함수)
def about(request):  
    return HttpResponse("This Page is a about page")

urlpatterns = [
    path('admin/', admin.site.urls),
		path('', index),
		path('about', about), # (about예제에 추가된 함수)
	]

<결과2>

브라우저에 127.0.0.1:8000 을 입력하여 요청을 보내면 아래와 같은 페이지를 django는 응답하게 된다.

urlpatterns에 about URL에 대한 설계까지 마무리하며, about 페이지의 Practice는 마무리됐다. 우리가 개발한 프로세스에 따라 우리의 웹애플리케이션은 127.0.0.1/about이라는 request를 받을 경우 about이라는 함수를 호출하고 request를 전달해 about함수 대로 “This Page is a about page” 라는 메시지를 응답한 것이다.

이때, index함수, about함수와 같이 request에 대해 어떤 response를 보내줄지 결정하는 로직을 뷰(View)라고 한다. 지금은 request-response에서 가장 기초적인 django의 흐름 및 urls.py에 대해서 설명하기 위해 urls.py에 모든 과정을 넣었지만 일반적으로 views.py라는 파일을 별도로 만들어 관리한다. 다음 챕터에서는 이 View에 대해서 자세하게 이해하고 연습해보자.

반응형

댓글