본문 바로가기

Python/Django

STATIC_ROOT vs STATICFILES_DIRS

728x90
반응형

Django에서는 static 파일과 관련한 설정에는 5가지가 있고 

STATIC_URL

STATIC_ROOT

STATICFILES_DIRS

STATICFILES_STORAGE

STATICFILES_FINDERS

 

그 중 아래 3가지가 일반적으로 많이 사용이 됩니다.

STATIC_URL

STATIC_ROOT

STATICFILES_DIRS

 

STATIC_URL의 경우, static 경로에 접근하기 위해 설정해주는 url이라 개념적으로 헷갈릴게 거의 없는데,

STATIC_ROOT와 STATICFILES_DIRS 는 둘다 static 파일들을 다룬다는 점에서 헷갈리게 합니다.

 

결론적으로만 말하면

STATIC_ROOT는 배포 단계(deployment)에서 필요하고

STATICFILES_DIRS는 개발 단계(development)에서 필요하다고 보면 됩니다.

 

개발시에는 STATICFILES_DIRS에 static 경로를 잡아서, 이 static 경로 안에서 javascript, css 등을 다루면 되고

배포시에는 python manage.py collectstatic 을 통해서 모든 static 파일들을 한군데에 모아서 배포를 하면 됩니다.

 

 

--- 그럼 왜 이렇게 나눠서 구분이 필요할까? --- 라는 질문이 생기게 됩니다.

Django는 기본적으로 웹을 제작하기 쉽게 해주는 웹프레임워크일 뿐, 웹서버의 기능을 하지 않습니다.

runserver 명령어를 통해 웹서버의 기능을 하기도 하지만, 배포단계에서는 제대로 된 웹서버를 별도로 써야합니다.

대표적으로 Nginx와 같은 웹서버가 정적인 파일들(static files)을 다루게 되는데, 이 웹서버가 STATIC_ROOT로 설정된 디렉토리를 가지고 static file들을 다룬다고 보면 됩니다.

 

요약)

DEBUG = True 인 개발환경에서는 Django가 STATICFILES_DIRS의 경로를 읽게 되고

DEBUG = False 인 배포단계에서는 WebServer(Nginx 등)가 STATIC_ROOT의 경로를 읽게 됩니다.

 

* 주의사항

1) STATICFILES_DIRS에서 사용하는 경로와 STATIC_ROOT에서 지정한 경로는 같으면 안됩니다.

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]

위와 같은 식으로 하면 에러가 발생합니다.

STATIC_ROOT는 static_root 또는 staticfiles 등으로 다르게 설정을 해줘야 합니다.

2) STATICFILES_DIRS는 리스트나, 튜플 형태로 써야 하는데, 이를 위해서 하나의 디렉토리만 설정하더라도 ',' 를 사용해서 표현해주어야 합니다.

728x90
반응형