Django 앱에서 CSS 변경 사항이 반영되지 않는 원인
분야
- 프로그래밍/소프트웨어 개발
대상자
- Django 프레임워크를 사용하는 웹 개발자
- 정적 파일(HTML/CSS/JS) 관리에 어려움을 겪는 개발자
- 난이도: 초보~중간 수준
핵심 요약
- *Django 앱에서 CSS 변경 사항이 반영되지 않는 주요 원인은 정적 파일 처리 메커니즘과 경로 설정입니다.**
- STATIC_URL 설정이 올바르지 않거나 collectstatic 명령어를 실행하지 않아 정적 파일이 서버에 배포되지 않음
- static 디렉토리 구조가 잘못 구성되어 CSS 파일이 정적 파일 서버에 등록되지 않음
- 개발 서버는 정적 파일을 자동으로 제공하지만, production 서버에서는 반드시 collectstatic을 실행해야 함
- STATIC_ROOT 경로 설정이 누락되거나 잘못 지정되어 파일 수집이 실패함
섹션별 세부 요약
1. 정적 파일 처리 메커니즘
- Django는 STATIC_URL 설정을 통해 정적 파일을 제공하며, 개발 단계에서는 runserver가 자동으로 정적 파일을 제공함
- STATIC_ROOT는 production 서버에서 정적 파일을 수집할 경로로, collectstatic 명령어 실행 시 STATIC_ROOT 디렉토리에 파일이 병합됨
- collectstatic은 정적 파일을 배포 서버에 복사하는 필수 단계로, 누락 시 CSS/JS 파일이 서버에 전달되지 않음
2. 정적 파일 경로 설정 오류
- static 디렉토리가 INSTALLED_APPS에 등록되지 않거나, STATIC_URL이 '/'로 설정되어 있음
- STATIC_ROOT 경로가 'static' 폴더가 아닌 다른 경로로 지정되어 있거나, collectstatic 실행 시 경로가 존재하지 않음
- STATICFILES_DIRS 설정이 누락되어 로컬 개발 시 정적 파일이 제대로 수집되지 않음
3. 개발 vs Production 서버 동작 차이
- 개발 서버(runserver)는 정적 파일을 자동으로 제공하지만, collectstatic은 production 서버에서만 실행해야 함
- STATIC_ROOT 경로가 'static' 폴더로 설정되어 있으면, collectstatic 명령어 실행 시 해당 폴더에 파일이 병합됨
- STATIC_URL 설정이 '/'로 되어 있으면, CSS 파일이 루트 경로에서 제공되며, STATIC_ROOT 경로가 'static'일 경우 파일이 제대로 로드되지 않음
결론
Django 앱에서 CSS 변경 사항이 반영되지 않는 주요 원인은 정적 파일 처리 설정입니다.
- STATIC_URL과 STATIC_ROOT 경로를 정확히 설정하고, collectstatic 명령어를 반드시 실행해야 함
- 개발 단계에서는 runserver가 자동으로 정적 파일을 제공하지만, production 서버에서는 collectstatic 실행이 필수
- STATICFILES_DIRS 설정을 통해 로컬 개발 시 정적 파일 수집 경로를 명시하고, collectstatic을 통해 배포 서버에 파일을 병합해야 함
- STATIC_URL이 '/'로 설정된 경우, CSS 파일이 루트 경로에서 제공되므로, STATIC_ROOT 경로가 'static'일 경우 파일이 제대로 로드되지 않음.