🔗 Django URL 설정 완벽 가이드

2025. 5. 14. 15:00·기술블로그-Django편

🔗 Django URL 설정 완벽 가이드

Django 웹 프레임워크에서 URL 설정은 사용자 요청을 적절한 View로 연결하는 핵심 역할을 합니다. 이 글에서는 URL 엔드포인트, path(), include()의 개념과 사용법을 예제와 함께 시각적, 흐름 중심으로 정리합니다.


1️⃣ URL 엔드포인트란?

**엔드포인트(endpoint)**는 사용자가 웹사이트에 접속할 때 사용하는 URL의 종착지를 의미합니다. 이 엔드포인트는 Django에서 각각의 view 함수 또는 클래스와 연결됩니다.

🧭 예:

  • example.com/posts/ → 게시글 리스트 보기
  • example.com/posts/3/ → 게시글 상세 보기 (ID = 3)

🔗 이처럼 URL은 사용자의 요청을 라우팅해주는 통로입니다.


2️⃣ urlpatterns 구조 이해하기

모든 Django 프로젝트는 기본적으로 urlpatterns라는 리스트를 통해 URL과 뷰(view)를 연결합니다.

📌 기본 구조 예시

# blog/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('<int:pk>/', views.post_detail, name='post_detail'),
]

🔍 설명

요소 의미

path() URL 패턴을 정의하는 함수
'' 루트 URL (ex. /blog/)
<int:pk>/ 동적 URL: 정수형 파라미터 pk를 받음
name URL 이름 지정, 템플릿에서 reverse() 가능

3️⃣ URL Include 사용법

Django에서는 앱 단위로 URL 파일을 분리하고, 메인 config/urls.py에서 include()를 통해 불러오는 방식으로 관리합니다.

📌 예제: config/urls.py

# config/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),  # ✅ blog 앱의 URL 연결
]

✅ 장점

  • 앱마다 urls.py를 나누어 유지보수가 편리함
  • 기능별로 URL을 논리적으로 분리 가능

4️⃣ path 함수의 구체적 사용법

path() 함수는 URL 패턴을 정의하며 다음과 같은 인자를 받습니다:

path(route, view, kwargs=None, name=None)

인자 설명

route URL 경로 문자열, <int:id> 등 포함 가능
view 연결될 함수 또는 클래스 기반 뷰
kwargs 추가적으로 전달할 딕셔너리 데이터
name URL 이름 지정 (reverse 함수나 템플릿에 유용)

📌 실전 예제

path('post/<int:pk>/', views.post_detail, name='post_detail')
  • /post/3/처럼 URL에서 pk값(예: 3)을 받아서 views.post_detail(pk=3)으로 전달
  • name='post_detail'로 지정하면 템플릿에서 {% url 'post_detail' pk=3 %}로 호출 가능

5️⃣ include 함수의 구체적 사용법

include()는 다른 URLconf 파일을 중첩해서 불러올 때 사용합니다. 일반적으로 앱별로 urls.py를 만든 후, config/urls.py에서 모듈별로 include 처리합니다.

예시 구조

project/
├── config/
│   └── urls.py
├── blog/
│   └── urls.py

📌 config/urls.py

path('blog/', include('blog.urls'))

📌 blog/urls.py

urlpatterns = [
    path('', views.post_list),
    path('<int:id>/', views.post_detail),
]

✅ 흐름

  • /blog/ → blog.urls 로 이동
  • /blog/3/ → blog의 post_detail 뷰 호출

🧠 실전 팁 & 주의사항

✅ **URL 이름(name)**을 꼭 지정하세요 → 템플릿에서 url 태그, reverse() 함수에서 사용합니다.

✅ URL 이름은 중복되지 않도록 앱별 prefix나 네임스페이스 사용을 고려하세요.

❌ 하나의 urls.py에 모든 path를 몰아넣지 마세요 → include로 분리하는 것이 유지보수에 용이합니다.


🎯 요약 정리

  • path()는 URL과 view를 연결하는 함수
  • include()는 다른 앱의 URLconf를 메인에 포함시키는 함수
  • urlpatterns에 등록된 패턴만 사용자 요청을 처리할 수 있음
  • name 속성을 잘 활용하면 템플릿이나 리다이렉트에서 매우 유용

 

'기술블로그-Django편' 카테고리의 다른 글

🛠️ Django ORM 완벽 가이드  (0) 2025.05.14
📝 Django Form 기본 정리  (0) 2025.05.14
⚙️ Django Function-Based View (FBV) 완전 이해하기  (0) 2025.05.14
🧩 Django Jinja 템플릿 완전 가이드  (0) 2025.05.14
🧱 Django Database Model 완전 정복  (0) 2025.05.14
'기술블로그-Django편' 카테고리의 다른 글
  • 🛠️ Django ORM 완벽 가이드
  • 📝 Django Form 기본 정리
  • ⚙️ Django Function-Based View (FBV) 완전 이해하기
  • 🧩 Django Jinja 템플릿 완전 가이드
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (739) N
      • Python (32)
      • 프로젝트 (63) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    btscomeback
    youngprofessionals
    college reunions
    lawsuitculture
    hotcoffeecase
    btsjungkook
    oliveoilhealth
    global politics
    chinanightlife
    bts
    americaparty
    basalcellcarcinoma
    뷔
    remittance
    btsreunion
    btsdischarge
    livebroadcast
    RM
    americanlaw
    titaniumcase
    self-growth
    classaction
    homebartrend
    urbantrends
    galaxys25ultra
    smartphonedurability
    trumpmuskclash
    life reflection
    newpoliticalparty
    travel ban
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
🔗 Django URL 설정 완벽 가이드
상단으로

티스토리툴바