📌 Django URL 패턴 등록 순서 완전 정리
✅ 1. 왜 URL 순서가 중요할까?
Django는 urlpatterns 리스트를 위에서 아래로 순차적으로 검사합니다.
✔️ 가장 먼저 매칭되는 URL이 있으면 해당 뷰로 이동하고, 이후 항목은 무시합니다.
따라서 동적 패턴은 가장 마지막에 두어야 예상한 라우팅이 정확하게 작동합니다.
✅ 2. 올바른 URL 등록 순서 예시
urlpatterns = [
path('admin/', admin.site.urls), # 1. 정적 경로
path('', views.home_view, name='home'), # 2. 홈
path('short-urls/', views.short_url_create_view), # 3. 폼 처리
path('', include('shortener.urls')), # 4. 앱 URL
path('<str:code>/', views.redirect_view), # 5. ✅ 마지막에 동적 경로
]
❌ 잘못된 예시
urlpatterns = [
path('<str:code>/', views.redirect_view), # ❌ 모든 경로를 가로챔
path('short-urls/', views.short_url_create_view),
]
🔴 이렇게 하면 /short-urls/ 요청도 <str:code>/로 처리됨 → 원하지 않은 라우팅 발생
🧭 시각적 흐름도
[요청: /short-urls/]
↓
1. /admin/ ❌ 불일치
2. / ❌ 불일치
3. /short-urls/ ✅ 일치! → 해당 뷰 실행
4. ... 이후 무시
[요청: /abc/]
↓
1. /admin/ ❌
2. / ❌
3. /short-urls/ ❌
4. /abc/ (동적) ✅ → redirect_view 실행
✅ 요약
등록 순서 설명
정적 URL | 먼저 등록 (/admin/, /short-urls/) |
동적 URL | 반드시 맨 마지막 (<str:code>/) |
✔️ 올바른 순서를 지키면 원하는 URL 경로만 정확히 처리 가능합니다.
✔️ 반대로 순서를 어기면 모든 경로를 동적 패턴이 가로채는 버그 발생할 수 있어요 ⚠️
'기술블로그-Django편' 카테고리의 다른 글
🔍 Django에서 Model.objects.get(code=code)가 뭔 뜻이야? (0) | 2025.05.14 |
---|---|
🧩 Django의 request 객체 쉽게 이해하기 (왜 첫 번째 인자?) (0) | 2025.05.14 |
📨 Django Form 동작 흐름 완전 정리 (0) | 2025.05.14 |
🚦 라우팅(Routing) vs 매핑(Mapping) 완전 정리 (0) | 2025.05.14 |
📡 클라이언트-서버 요청/응답 흐름 완전 정리 (0) | 2025.05.14 |