자, Django 프로젝트를 진행하다 보면 늘상 마주치는 골칫거리 중 하나죠? 바로 static 파일과 media 파일 관리입니다. CSS, JavaScript, 이미지 같은 static 파일과 사용자가 직접 업로드하는 사진이나 문서 같은 media 파일… 둘 다 중요한데, 헷갈리기 쉽고, 특히 배포할 때 문제가 툭툭 튀어나와서 정말 곤혹스러울 때가 많아요. 저도 처음엔 엄청 헤맸거든요. 그래서 제 경험을 바탕으로, 여러분이 덜 헤매도록 쉽게 정리해 드릴게요!
먼저, 핵심 개념부터 확실히 짚고 넘어가야죠. static 파일은 말 그대로 정적인 콘텐츠입니다. 웹사이트의 디자인이나 기능을 위해 필요한 파일들이고, 프로젝트 개발 과정에서 미리 준비해 놓는 거죠. CSS 파일이나 이미지 파일 같은 것들이 대표적이에요. Django는 STATIC_URL 설정을 이용해서 이 파일들을 관리합니다. 반면 media 파일은 사용자가 업로드하는 이미지, 문서, 동영상 같은 동적인 콘텐츠입니다. 웹사이트가 운영되는 동안 계속해서 변할 수 있죠. Django는 MEDIA_URL과 MEDIA_ROOT 설정으로 이 파일들을 관리하고요. 이 부분, 헷갈리시면 안 됩니다! static은 개발자가 미리 준비하고, media는 사용자가 만들어내는 거라고 생각하면 쉬워요.
자, 그럼 실제 코드를 보면서 더 자세히 알아볼까요? settings.py 파일을 봅시다. 여기서 STATIC_URL, STATICFILES_DIRS, MEDIA_URL, MEDIA_ROOT를 설정하는데, 저는 보통 프로젝트 루트에 static 폴더와 media 폴더를 만들어서 사용해요. 그리고 중요한 게 있는데, 배포할 때 static 파일들을 한 곳에 모아야 한다는 거예요. 그래서 STATIC_ROOT 설정도 해줘야 합니다. 이 부분 놓치면 배포하고 나서 404 에러 뜨면서 멘붕 오는 거 순식간이죠. 경험담입니다…ㅠㅠ
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
]
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / "media"
STATIC_ROOT = BASE_DIR / "collected_static"
그리고 urls.py에도 설정을 추가해야 해요. static() 함수를 이용해서 static 파일과 media 파일 경로를 연결해 주는 거죠. 이 부분도 빼먹으면 안 돼요!
from django.conf import settings
from django.conf.urls.static import static
# ... 다른 코드 ...
urlpatterns = [
# ... 다른 URL patterns ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
템플릿 파일에서는 {% static '파일경로' %} 와 {% media '파일경로' %} 태그를 사용해서 파일들을 불러오면 됩니다. 예를 들어, base.html에서 이미지를 표시하려면 이렇게 하면 되겠죠. 아, 그리고 static 태그는 static 파일용, media 태그는 media 파일용이라는 거 잊지 마세요!
<img src="{% static 'images/logo.png' %}" alt="Logo">
<img src="{% media 'uploads/user_image.jpg' %}" alt="User Image">
배포 전에 꼭 python manage.py collectstatic 명령어를 실행해서 STATIC_ROOT에 static 파일들을 모아주는 것도 잊지 마세요! 이거 안 하면 배포 후에 static 파일이 안 보이는 황당한 상황을 맞이하게 될 수도 있어요. 그리고 웹 서버(Nginx나 Apache)에서도 STATIC_ROOT와 MEDIA_ROOT에 대한 접근 권한을 잘 설정해줘야 합니다. 특히 MEDIA_ROOT는 사용자가 파일을 업로드할 수 있도록 쓰기 권한을 주는 게 필수적이에요. 이 부분 설정 잘못하면 404 에러 뜨는 건 기본이고, 심지어 보안 문제까지 발생할 수 있으니, 정말 신경 써서 설정해야 합니다. 그리고 STATIC_URL과 MEDIA_URL이 서로 겹치지 않도록 주의해야 한다는 것도 꼭 기억하세요!
마지막으로, 사용자 업로드 파일에는 악성 코드가 숨어있을 수 있으니, 항상 업로드 파일 검증 및 보안 조치를 철저히 해야 한다는 점을 강조하고 싶어요. 이 부분은 정말 중요한 보안 사항이니까 절대 소홀히 해서는 안 됩니다.
이렇게 static과 media 파일 관리를 제대로 하면 Django 프로젝트 배포가 훨씬 수월해집니다. 하지만 실제 배포 환경은 각각 다르기 때문에, 웹 서버의 설명서를 참고해서 설정을 꼼꼼하게 확인하고, 배포 전에 충분히 테스트하는 것을 잊지 마세요! 저도 처음엔 엄청 헤맸지만, 이제는 꽤 익숙해졌답니다. 여러분도 충분히 할 수 있어요! 화이팅!
댓글
댓글 쓰기