라우팅이란, 네트워크에서 경로를 선택하는 프로세스이다. 컴퓨터 네트워크는 노드라고 하는 여러 시스템과 이러한 노드를 연결하는 경로 또는 링크로 구성된다. 상호 연결된 네트워크에서 두 노드 간의 통신은 여러 경로를 통해 이루어질 수 있다. 라우팅은 미리 정해진 규칙을 사용하여 최상의 경로를 선택하는 프로세스이다.
Django 웹 애플리케이션에서 URL 패턴과 라우팅의 관계에 대해 알아보자. URL 패턴은 웹 애플리케이션의 다양한 URL 요청을 특정 뷰 함수 또는 클래스로 라우팅(경로 지정)하는 역할을 한다. 다시 말해, URL 패턴은 클라이언트 요청이 어떤 뷰로 보내질지를 정의하는 중요한 구성 요소이다.
라우팅은 클라이언트가 특정 URL로 요청을 보내면, 웹 애플리케이션이 해당 요청을 어떤 뷰로 연결하고 처리할지를 결정하는 프로세스를 가리킨다. URL 패턴은 이 라우팅 프로세스를 제어하고 정의하는데 사용된다.
Django에서 URL 패턴을 urlpatterns
리스트에 정의하고, 각 패턴은 특정 URL 경로와 그 URL 경로에 해당하는 뷰를 연결한다.
- URL 경로(문자열 패턴)를 정의하고 해당 경로로 들어온 요청을 처리할 뷰를 지정한다.
- 이러한 URL 패턴들은 Django 애플리케이션의
urls.py
파일에서 설정하며, 이 파일은 웹 애플리케이션의 주요 URL 패턴을 정의하는 중요한 파일이다.
Function-based views는 Django에서 가장 기본적인 뷰 타입이다. 뷰는 Python 함수로 정의되며, HTTP 요청을 처리하고 응답을 생성하는 함수이다.
예를 들어, 'my_app' 앱의 'views' 모듈에 'home'이라는 함수 기반 뷰가 있다고 가정하면, 다음과 같이 해당 뷰를 URL 패턴에 연결할 수 있다.
from my_app import views
urlpatterns = [
path('', views.home, name='home'),
]
Class-based views는 Django에서 뷰를 클래스로 정의하는 방법이다. 클래스 기반 뷰는 클래스 내의 메서드를 사용하여 HTTP 요청을 처리한다.
다른 앱인 'other_app'의 'Home' 클래스 기반 뷰를 URL 패턴에 연결하는 경우의 코드 예시이다.
from other_app.views import Home
urlpatterns = [
path('', Home.as_view(), name='home'),
]
Django 애플리케이션은 여러 앱으로 구성될 수 있으며, 각 앱은 자체 URL 패턴을 가질 수 있다. 즉, 각각의 앱에 URL패턴(urls파일)을 가질수 있다는 뜻이다.
'blog'앱에 자체적인 URL패턴을 가지려면, 앱 내에 urls파일을 만들어야 한다. 이때, 대소문자, 스펠링이 유의해야 한다. 'blog' 앱의 URL 패턴을 포함하는 코드 예시이다.
from django.urls import include, path
urlpatterns = [
path('blog/', include('blog.urls')),
]
이렇게 정의된 URL 패턴을 사용하면 Django 애플리케이션은 특정 URL 경로로 요청이 들어오면 해당 URL 패턴에 따라 적절한 뷰를 호출하게 된다. 이는 Django 웹 애플리케이션의 라우팅 및 뷰 관리를 구성하는 중요한 부분이다. 자세한 내용은 Django의 공식 문서를 참조하여 파악할 수 있다.
참고
https://aws.amazon.com/ko/what-is/routing/