Django에서 slug는 사람이 읽기 쉬운 URL을 만들 때 자주 사용됩니다.
그런데 Book처럼 직접 보여지는 페이지가 아닌, Author 모델 같은 경우에도 굳이 slug를 만들어야 할까요?
이번 글에서는 Author 모델에 slug 필드가 필요한지, 불필요한지 판단할 수 있도록 상황별로 정리해 보았습니다.
✅ slug를 Author에 만들어야 하는 경우
1. 작가 상세 페이지가 존재하는 경우
예를 들어 사용자가 /authors/jk-rowling/ 같은 URL로 작가 정보를 확인할 수 있다면 slug는 꼭 필요합니다.
def get_absolute_url(self):
return reverse("author-detail", args=[self.slug])
→ 검색 최적화(SEO)에도 좋고, 사용자가 URL만 보고도 어떤 작가인지 알 수 있죠.
2. 작가 이름으로 URL을 만들고 싶은 경우
- /authors/j-k-rowling/, /authors/george-orwell/처럼
- 작가 이름을 slugify하여 URL을 구성하면 UX가 더 좋아집니다.
3. 작가 페이지를 검색 또는 링크로 연결할 일이 많은 경우
- 책 상세 페이지에서 "저자: George Orwell" 클릭 시 작가 페이지로 이동
- 블로그나 외부에서 해당 작가 페이지로 직접 링크를 걸 경우
→ slug가 있다면 주소가 더 자연스럽고 기억하기 쉽습니다.
❌ slug를 Author에 만들지 않아도 되는 경우
1. 작가 개별 페이지가 없고, 단순 참조용일 때
- Book에서 author.name만 보여주고 끝이라면
- URL로 작가 정보를 보여줄 일이 없다면 slug는 굳이 필요 없습니다.
2. 작가 이름이 자주 바뀌거나 중복될 수 있는 경우
- 작가가 개명하거나 필명을 바꾸는 경우 slug가 불일치할 수 있습니다.
- slug를 수정하면 URL이 바뀌기 때문에 관리가 번거로워질 수 있습니다.
3. 내부 시스템 또는 REST API 전용인 경우
- Admin이나 API에서 id를 사용하는 경우 slug는 오히려 불필요한 중복 필드일 수 있습니다.
- slug를 기반으로 쿼리하지 않고 pk나 UUID로만 처리한다면 굳이 사용하지 않아도 됩니다.
🧪 정리: 언제 slug를 사용하는 것이 좋을까?
상황 Author에 slug 필요 여부
| 작가 개별 페이지가 존재함 | ✅ 필요 |
| 작가를 클릭하여 페이지로 이동함 | ✅ 필요 |
| SEO가 중요한 서비스 (블로그, 쇼핑몰 등) | ✅ 필요 |
| 내부용 도서관리 시스템 | ❌ 불필요 |
| REST API에서만 사용하는 모델 | ❌ 불필요 |
| 작가 이름이 자주 바뀌거나 중복될 수 있음 | ⚠️ 주의 |
💬 결론
slug는 사람과 검색엔진 모두에게 친화적인 URL을 제공하는 도구입니다.
하지만 그만큼 관리해야 할 점도 있고, 모든 모델에 무조건 사용할 필요는 없습니다.
특히 Author처럼 "연결된 모델"일 경우, 그 모델에 개별적인 라우팅 URL이 존재하는지가 slug 필요 여부를 가르는 핵심 기준입니다.
✨ 추가로 궁금하다면
- slug가 중복되지 않도록 만드는 방법
- slug를 자동으로 생성하고 수정하지 않게 관리하는 팁
- Book과 Author를 함께 활용한 URL 설계 전략
원하신다면 다음 글에서 자세히 다뤄보겠습니다 😊
필요하시면 썸네일 문구, 태그 추천 (#Django, #slug, #URL설계, #모델디자인)도 도와드릴게요!
'Programming > Django' 카테고리의 다른 글
| [Python Django] 🔄 Django Circular & Lazy Relationships 완전 정리 (3) | 2025.07.23 |
|---|---|
| [Python Django] 🐍 Django에서 ManyToManyField .add() 시 발생하는 ValueError 해결하기 (5) | 2025.07.23 |
| [Python Django] 💥 Django Admin prepopulated_fields 오류 해결기: slug 컬럼 없음 에러 (3) | 2025.07.23 |
| [Python Django] The Practical Guide - Admin, Relationship (3) | 2025.07.23 |
| [Python Django] The Practical Guide - Data & Models (3) (3) | 2025.07.22 |