[장고] 슬러그(slug) 활용하기
웹 개발에서 URL은 단순히 리소스의 위치를 나타내는 역할을 넘어 사용자 경험과 SEO(검색 엔진 최적화) 측면에서도 중요한 요소입니다. 특히, 블로그나 뉴스 사이트와 같이 콘텐츠가 주기적으로 업데이트되는 경우, URL 구조는 사용자와 검색 엔진 모두에게 직관적이어야 합니다. 이때 중요한 역할을 하는 것이 바로 슬러그(slug)입니다.
슬러그란 무엇인가?
슬러그(slug)는 주로 신문, 잡지, 뉴스 기사 등에서 제목을 짧고 간결하게 나타내기 위해 사용하는 방식입니다. 웹에서는 제목을 URL에 포함시키는 형태로 활용되며, 단어 사이의 띄어쓰기를 하이픈(-)으로 대체하여 사용합니다. 예를 들어, "스타벅스에서 커피를 주문하는 방법"이라는 제목의 슬러그는 "스타벅스에서-커피를-주문하는-방법"이 됩니다. 이를 통해 사용자는 URL만 보고도 해당 페이지의 내용을 유추할 수 있습니다.
또한, 슬러그는 단순한 띄어쓰기보다 보안 측면에서도 더 안전합니다. URL에 포함된 공백이나 특수 문자는 코드에 영향을 미칠 수 있기 때문에, 하이픈을 사용하는 것이 일반적입니다.
장고에서 슬러그 구현하기
장고(Django)에서 슬러그를 활용하려면, 모델에 슬러그 필드를 추가하는 것이 첫 번째 단계입니다. 장고는 SlugField를 제공하여 슬러그를 쉽게 관리할 수 있습니다.
모델 작성
아래는 슬러그 필드를 모델에 추가하는 예제입니다.
from django.db import models
from django.utils.text import slugify
from django.urls import reverse
class Post(models.Model):
slug = models.SlugField(unique=True, max_length=100, allow_unicode=True)
title = models.CharField(max_length=50)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title, allow_unicode=True)
super(Post, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse("posts:detail", kwargs={"slug": self.slug})
위 코드에서 SlugField는 슬러그를 저장하는 필드로, 유일한 값이 되도록 설정(unique=True)하고, 최대 길이를 100자로 제한하였습니다. allow_unicode=True를 통해 한글도 입력할 수 있도록 하였습니다.
슬러그 필드를 추가할 때 주의할 점은, 기본값 없이 필드를 추가하면 에러가 발생한다는 것입니다. 이를 해결하기 위해 null=True를 추가하거나 기존 데이터를 미리 처리해야 합니다.
슬러그 자동 생성
슬러그는 글이 저장될 때 자동으로 생성됩니다. 이를 위해 save 메서드를 오버라이드하여 slugify 함수를 사용합니다. slugify 함수는 제목을 슬러그로 변환해줍니다.
마이그레이션 적용
모델 변경 사항을 데이터베이스에 반영하기 위해 마이그레이션을 생성하고 적용합니다.
$ python3 manage.py makemigrations
$ python3 manage.py migrate
관리자 페이지 설정
슬러그를 관리자 페이지에서 관리하기 위해 admin.py 파일에 설정을 추가합니다.
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('pk', 'title', 'slug',)
prepopulated_fields = {'slug': ('title',)}
prepopulated_fields를 설정하면 제목을 입력할 때 자동으로 슬러그가 생성됩니다.
URL 패턴 설정
슬러그를 URL 패턴에 반영하기 위해 urls.py 파일을 수정합니다. 한글 슬러그의 경우 정규표현식을 사용하여 에러를 방지할 수 있습니다.
from django.urls import path, re_path
from .views import PostDetailView, PostListView
app_name = 'posts'
urlpatterns = [
path('lists/', PostListView.as_view(), name="list"),
re_path(r'^(?P[-\w]+)/$', PostDetailView.as_view(), name="detail"),
]
영어만 사용하는 경우 간단하게 설정할 수 있습니다.
path('/', PostDetailView.as_view(), name="detail"),
결론
슬러그는 사용자와 검색 엔진 모두에게 친화적인 URL을 만들기 위한 중요한 도구입니다. 장고에서는 이를 쉽게 구현할 수 있도록 다양한 기능을 제공하며, 이를 통해 블로그나 뉴스 사이트와 같은 콘텐츠 중심의 웹 애플리케이션에서 큰 이점을 얻을 수 있습니다. 적절한 슬러그 사용으로 더 나은 사용자 경험과 SEO 최적화를 달성하시기 바랍니다.