본문 바로가기
카테고리 없음

🌐 Django에서 정적 파일(Static Files)은 어떻게 제공될까?

by Mandy's 2025. 7. 30.

Django 프로젝트를 개발하다 보면, CSS, 이미지, JavaScript 같은 정적 파일들을 어떻게 처리할지 고민하게 됩니다.

특히 개발 환경에서는 잘 작동하지만, 배포하면 깨지는 경우가 많죠. 이 문제의 핵심은 Django가 웹 서버가 아니라는 점에서 출발합니다.


🧩 Django는 웹 서버가 아니다

  • Django는 웹 프레임워크이지 웹 서버가 아닙니다.
  • 웹 서버(Nginx, Apache 등)가 클라이언트의 요청을 받아 Django에게 전달합니다.
  • 그러나 정적 파일 요청은 Django가 처리하지 않습니다.

⚠️ 정적 파일 요청은 기본적으로 실패한다

  • 예: CSS, JS, 이미지 파일 요청
  • 이 파일들은 Django가 자동으로 제공하지 않음
  • 개발 환경에서는 runserver가 임시로 도와줌
  • 하지만 운영 환경에서는 runserver 사용 X → 정적 파일 깨짐 현상 발생

🔧 개발 서버는 특별하다

  • python manage.py runserver는 개발 편의상 정적 파일을 서빙함
  • 이는 실제 운영 서버에서는 전혀 동작하지 않음
  • 정적 파일 처리를 위한 별도 설정이 필요함

✅ 정적 파일 처리 방법 3가지

1️⃣ Django가 직접 정적 파일을 제공하게 설정

  • urls.py에서 static() 설정 추가
  • 예시:
from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
  • 장점: 빠르게 구현 가능
  • 단점: 성능이 낮고 운영 환경에 비효율적

2️⃣ 웹 서버(Nginx 등)를 통해 정적 파일 서빙

  • Nginx에서 /static/ 경로로 요청이 오면, Django에 전달하지 않고 직접 정적 폴더에서 서빙
  • Django는 오직 동적 요청만 처리
  • 장점: 성능 향상, 리소스 분리 가능
  • 단점: 웹 서버 설정 필요 (조금 복잡할 수 있음)

3️⃣ CDN 또는 별도 서버에서 정적 파일 서빙

  • 정적 파일을 전용 서버CDN에 업로드
  • 클라이언트는 CSS나 이미지 파일 요청 시, Django가 아닌 다른 주소로 요청
  • 최고의 성능, 확장성 매우 우수
  • ex) AWS S3 + CloudFront

💬 Django에서 왜 이렇게 따로 처리할까?

정적 파일은 빠르게, 효율적으로, 반복적으로 전송되어야 하기 때문입니다.

  • Django는 템플릿 렌더링, DB 처리 등 무거운 작업 담당
  • 정적 파일 요청까지 맡기면 오히려 비효율
  • 그래서 웹 서버CDN이 이 역할을 대신하는 것이 이상적입니다

🧭 어떤 방식을 선택해야 할까?

상황 추천 방식

개발 중 Django 직접 서빙 (runserver or static() 설정)
소규모 배포 웹 서버에서 정적 파일 서빙
트래픽 많고 확장 필요한 서비스 CDN 또는 전용 정적 파일 서버 사용

🚀 마무리: 성능은 정적 파일 처리 방식에 달렸다!

정적 파일은 단순하지만 웹사이트의 성능을 좌우합니다. Django는 정적 파일을 직접 처리하지 않기에, 웹 서버 설정 또는 외부 서비스와의 연동이 매우 중요합니다.

"모든 사람이 Facebook을 만드는 건 아니다. 하지만 좋은 성능은 모든 서비스가 필요로 한다."