본문 바로가기
Programming/Django

🐍 [Django 5.2 + S3 연동 에러 기록] STATICFILES_STORAGE가 무시되고 계속 로컬 staticfiles 디렉토리에만 저장될 때 (해결 완료!)

by Mandy's 2025. 8. 1.

 

✨ 문제 요약

Django 5.2.4에서 AWS S3를 정적 파일 저장소(STATICFILES_STORAGE)로 사용하려고 설정했는데, python manage.py collectstatic을 실행할 때마다 계속 이렇게 나왔다.

0 static files copied to '/Users/mj/Documents/my_site/staticfiles', 134 unmodified.

심지어 python manage.py shell에서 확인해도...

from django.contrib.staticfiles.storage import staticfiles_storage
print(staticfiles_storage.__class__)
# 출력: <class 'django.contrib.staticfiles.storage.StaticFilesStorage'>

👉 이건 Django가 여전히 기본 로컬 FileSystemStorage를 쓰고 있다는 뜻.
아무리 STATICFILES_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"를 설정해도 무시되는 상태.


🔍 삽질한 흔적들

  • STATICFILES_STORAGE, DEFAULT_FILE_STORAGE 설정을 수십 번 바꿈
  • INSTALLED_APPS에 "storages"도 정상 등록
  • collectstatic에 --clear, -v 3 다 써봄
  • 심지어 Django 5.2 공식문서도 다시 뒤져봄...
  • 키, 버킷, 리전 설정도 모두 정상

결론: 코드엔 문제가 없었다. 내 환경이 문제였다.


🧠 원인: Django 4.2부터 바뀐 static/media storage 방식

Django 4.2 이후부터는 STATICFILES_STORAGE와 DEFAULT_FILE_STORAGE를 직접 설정하는 것권장되지 않고, 대신 STORAGES 설정 딕셔너리를 써야 한다.

내 코드에서는 STATICFILES_STORAGE를 분명히 설정했지만, Django는 무시하고 있었다.
왜냐하면 5.2에서는 STORAGES 키가 우선순위가 더 높기 때문.


✅ 해결 방법

결국 아래처럼 STORAGES를 명시해주니까 정상적으로 S3로 collectstatic이 작동했다.

STORAGES = {
    "default": {
        "BACKEND": "storages.backends.s3.S3Storage",
        "OPTIONS": {
            "access_key": AWS_ACCESS_KEY_ID,
            "secret_key": AWS_SECRET_ACCESS_KEY,
            "bucket_name": AWS_STORAGE_BUCKET_NAME,
            "region_name": AWS_S3_REGION_NAME,
            "querystring_auth": False,
        },
    },
    "staticfiles": {
        "BACKEND": "storages.backends.s3.S3Storage",
        "OPTIONS": {
            "access_key": AWS_ACCESS_KEY_ID,
            "secret_key": AWS_SECRET_ACCESS_KEY,
            "bucket_name": AWS_STORAGE_BUCKET_NAME,
        },
    },
}

그리고 기존 설정 중 이런 것들은 이제 필요 없어졌다:

# 더 이상 필요 없음
# STATICFILES_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
# DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"

🔥 교훈

  • Django 버전 바뀌면 공식 문서를 꼭 다시 보자
  • STATICFILES_STORAGE만으로는 이제 충분하지 않다
  • S3 연동이 잘 안 되면 print(staticfiles_storage.__class__)부터 해보자
  • 도움주신 영재님께 무한 감사를...

✅ collectstatic 성공 모습

Uploading 'admin/css/base.css' to s3://django-blog-course-mj/static/admin/css/base.css
Uploading 'blog/post.css' to s3://django-blog-course-mj/static/blog/post.css
...

이제 내 버킷에 정적 파일이 하나둘 업로드되는 걸 보는 기쁨...
이 맛에 Django 한다 😊


🙌 혹시 나처럼 Django 최신 버전 + AWS S3 연동 문제 겪는 분이 있다면
꼭 STORAGES 설정을 확인하세요!

해결 완료!!