
WHY?
두 번째 Django 기초 정리는 사용자의 요청에 처음으로 만나는 URL이다.
URL 이란?
URL(Uniform Resource Locator 또는 통칭 web address)은 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다. 즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다. 쉽게 말해서, 웹 페이지를 찾기위한 주소를 말한다. 흔히 웹 사이트 주소로 알고 있지만, URL은 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크상의 자원을 모두 나타낼 수 있다. 그 주소에 접속하려면 해당 URL에 맞는 프로토콜을 알아야 하고, 그와 동일한 프로토콜로 접속해야 한다.
https://ko.wikipedia.org/wiki/URL
즉, URL은 우리가 살고 있는 집 주소와 같이 인터넷상의 웹 페이지를 찾기 위한 주소를 말한다. 웹 페이지에서 우리가 원하는 페이지로 이동하기 위해 URL을 사용해서 페이지를 찾는다고 생각하면 된다.
Django에서 URL
Django에서 URL을 설정하기 위해서 urls.py 파일에 URL패턴을 작성한다. Django 프로젝트를 생성하게 되면 프로젝트 앱 폴더 안에 urls.py가 자동으로 생성되어 있는 것을 볼 수 있다.
아래 코드는 test_project 이름의 프로젝트 생성 후 프로젝트 앱 폴더 안의 urls.py의 코드이다.
# test_project/urls.py
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
urlpatterns 리스트에 URL 패턴을 정의한다. 기본적으로 Django에서는 admin 페이지를 제공하기 때문에 자동으로 admin 페이지에 대한 URL이 정의되어 있는 것을 볼 수 있다.
URL 패턴의 분리
test_app 이름의 앱을 생성한다. test_app 과 관련된 URL 패턴을 작성할 때 test_project의 urls.py 파일에서 패턴을 정의하는 것은 바람직하지 못하다. 이를 해결하기 위해서 URL패턴을 분리시키는 과정이 필요하다.
# test_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('test_app.urls')),
]
urlpatterns 리스트에 URL 패턴 하나가 추가되었다.
path('', include('test_app.urls'))
path, include 함수에 대한 설명은 밑에서 설명하고, 이 코드는 동작은 test_app의 urls.py에 정의되어 있는 URL패턴을 현재 파일에 포함시킨다고 생각하면 된다.
즉, test_app에 관련된 URL패턴은 test_app 하위의 urls.py 파일에 정의하고 프로젝트 앱인 test_project 하위의 urls.py 파일에서 include을 사용해 URL패턴을 포함시킨다.
만약 앱이 여러 개가 존재 한다면 그 앱에 관련된 URL패턴을 프로젝트 앱의 urls.py에서 관리하게 된다면 코드가 복잡해지고 가독성이 떨어지게 된다. 이 문제를 해결하기 위해서 URL패턴을 분리해서 정의한다.
다음과 같이 test_app의 URL패턴을 정의할 수 있다.
# test_app/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
참고로, url과 view 연결은 후에 작성하겠다. 이번 포스팅에는 url에 관련된 내용을 작성할 계획이다.
path 함수
path함수는 일반적으로 2개의 인자가 필요하다. 첫 번째 인자는 '경로'이고, 두 번째 인자는 'view'이다. 추가로 name 인자를 사용하면 URL패턴에 원하는 이름을 설정할 수 있다.
- 경로는 URL패턴을 가진 문자열을 말한다.
- view는 Django의 views.py에서 정의한 view 메소드와 연결한다.
- name은 URL에 원하는 이름을 지정하여 명확하게 URL패턴을 참조할 수 있게한다.
include 함수
include함수는 URL패턴을 계층적으로 관리하게 한다.
Django를 사용해서 프로젝트를 진행하다 보면 작은 프로젝트는 하나의 앱으로 충분할 수 있지만, 큰 프로젝트를 만들게 되면 많은 앱이 필요하다. 프로젝트 크기가 커지면 필요한 URL패턴도 많아지는데 그 URL패턴을 하나의 파일에서 전부 관리하게 되면 가독성이 떨어지고 유지보수면에서 좋지 않다.
이 상황을 해결하기 위해서 include함수를 사용해 여러 개의 파일에서 URL패턴을 관리할 수 있게 한다. 그 여러 개의 파일의 URL패턴을 하나의 파일로 합치는 과정을 include함수가 한다고 생각하면 이해하기 쉽다.
incude함수는 인자값에 '[앱 이름].urls'를 입력한다.
아래 코드에서 include함수를 사용해서 test_app 앱의 urls.py에 정의된 URL패턴을 test_project의 urls.py에 포함시켰다.
# test_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('test_app.urls')),
]
참고
Django 공식 페이지
'Web Framework > Django' 카테고리의 다른 글
[Django] 기초 정리하기 (1) : 프로젝트 시작과 가상 환경 설정 (0) | 2022.11.14 |
---|