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는 리스트나, 튜플 형태로 써야 하는데, 이를 위해서 하나의 디렉토리만 설정하더라도 ',' 를 사용해서 표현해주어야 합니다.
'Python > Django' 카테고리의 다른 글
이미지 업로드: Django ImageField # Ajax (0) | 2023.01.26 |
---|---|
Django Template filter: {% with %} (0) | 2023.01.25 |
Django: Database data dump # json으로 데이터 백업, 복구 (0) | 2023.01.17 |
ORM queries: .aggregate() (0) | 2023.01.13 |
values_list(), values() method in Django (0) | 2023.01.09 |