Staic 파일의 처리
💡 Static File
개발 리소스로서의 정적인 파일을 말한다.(js, css, image. 등)
Django는 One project, Multi App 구조를 가진다.
우선 하나의 APP을 위한 static파일은 app_name/static/app_name경로에 둡니다.
그리고 프로젝트 전반적으로 사용되는 static파일은 settings.STATICFILES_DIRS에
지정된 경로에 둡니다.
마지막으로 다수 디렉토리에 저장된 static파일은 collectstaic
멸령을 통해
settings.STATIC_ROOT에 지정한 경로로 모아서 (복사)해서 서비스에 사용합니다.
💡 Static 경로 설정
1. STATIC_URL
static
각 static 파일에 대한 URL Prefix
템플릿 태그 {% static “경로” %} 에 의해서 참조되는 설정
위 설정은 언제라도/프로젝트 마다 변경될 수 있다.
따라서 하드 코딩하는 것보다 Prefix를 하여 방지.
2. STATICFILES_DIRS
프로젝트 전반적으로 사용되는 static파일은 settings.STATICFILES_DIRS에
지정된 경로에 둔다.
os.path.join(BASE_DIR , ‘project_name’ , ‘static)
File System Loader에 의해 참조되는 설정
3. STATIC_ROOT
다수 디렉토리에 저장된 static 파일은 collectstatic 명령을 통해,
settings.STATIC_ROOT에 지정한 경로로 모아서 복사해서 서비스에 사용한다.
- os.path.join(BASE_DIR, ‘static’)
python manage.py collectstatic
여러 디렉토리에 나눠 저장된 static파일들의 위치는 "현재 장고 프로젝트"만이 알고 있다.
즉, 외부 웹서버는 전혀 알지 못한다.
위 명령어는 외부 웹서버에서 Finder의 도움없이도 static파일을 서빙하기 위함이다.
(한 디렉토리에 모여 있기 때문에 Finder의 도움이 필요가 없다.)
💡 개발 환경에서 static 파일 서빙
개발 서버를 쓰고, settings.DEBUG = True 일 때만 지원한다.
그러나 개발 서버를 쓰지 않고 settings.DEBUG = False일 경우에는
별도로 static 서빙 설정을 해줘야한다.
static을 서빙하는 방법은 3가지가 있다.
1. 클라우드 정적 스토리지 or CDN 서비스를 활용
2. apache/nginx 웹 서버를 통한 서빙
3. 장고를 통한 서빙 ⇨ whitenoise 라이브러리 활용
💡 배포시 static 파일 처리
1. 서비스용 settings에 배포 static 설정
2. 관련 클라우드 스토리지 설정, 혹은 apache/nginx static 설정
3. 개발이 완료된 static파일을, 한 디렉토리로 복사(/static)
4. settings.STATIC_ROOT경로에 복사된 파일들을 배포서버로 복사
5. static 웹서버를 가리키토록 sesttings.STATIC_URL 수정
STATICFILES_STORAGE = “gstore.storages.StaticAzureStorage”
Azure의 storage를 사용할 경우 django-storages-azure 라이브러리를 사용해야한다.