URL 정규표현식(Regular Expression)은 특정한 규칙에 따라 문자열 패턴을 정의하고 매칭시키기 위한 표현식
어떠한 값에 특정한 규칙에 따라 정의된 패턴이 발견되면 views에 매칭시켜로 전달해라!
URL 문자열에서 특정 패턴의 값을 캡쳐하여 view에 전달하는 값
path(route="<int:pk>/", view1) # Converter에 의해 변환된 값으로 뷰 함수에 인자를 전달
re_path(route=r"^(?P<pk>\d+)$", view2) # 정규표현식을 통한 매칭만 수행하기에 항상 문자열로 뷰 함수에 인자를 전달
# Converter
class IntConverter: # + uuid, str
return int(value)
urlpatterns = [
path(route="<str:pk>/cover.png", view=views.cover_png), # 불필요한 호출 발생
# pk는 숫자인데 숫자가 아닌 경우에도 매칭되어 ex) /hottrack/hello/cover.png
# - 물론 View에서 404 오류가 발생할 테지만
# - 모든 미들웨어가 호출되고 View가 호출되고 데이터베이스까지 조회하고 나서야 404 오류 응답 => 서버 리소스 낭비
# - 그리고 View 인자를 그대로 Raw SQL 쿼리 작성에 사용될 때 예상치 못한 쿼리로 SQL Injection 공격에 노출될 수도 있습니다. path(route="<str:pk>/cover.png", view=views.cover_png),
# 아래의 경우 숫자 패턴이 아닌 경우에는 매칭되지 않고 다음 패턴을 검사합니다.
# 숫자 패턴인 경우에만 cover_png 뷰를 호출합니다.
path(route="<int:pk>/cover.png", view=views.cover_png),
]