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 라이브러리를 사용해야한다.