STATIC_URL / STATIC_ROOT / STATICFILES_DIRS > 장고 DJango

장고 DJango

기타 STATIC_URL / STATIC_ROOT / STATICFILES_DIRS

페이지 정보

본문

settings.py 파일에 꼭 지정해야하는 요소들이 몇개 있는데 의외로 헷갈리는 것중의 하나가 얘들이다. 
  • STATIC_URL = /static/  >> 웹브라우저가 정적인 파일을 찾을 수 있는 경로 
  • STATIC_ROOT =  /staticfiles/ >> 웹사이트를 서버에서 운용중일 경우에는 웹서버가 정적파일을 서빙하는 것이 바람직한데 그 목적으로 분리해서 지정된 디렉토리다.  >> 정적 파일 수정/생성/삭제시  collectstatic 명령어로 static의 내용을  staticfiles에 복제한다. 동일한 파일은 당연히 덮어쓰기.  
  • STATICFILES_DIRS = /static/ >> 개발자가 작업하는 정적파일 원본 저장소. 개발중에는 STATIC_ROOT를 생성/복제할 필요가 없다. 
    (STATICFILE_DIRS라고 되어 있어서 staticfiles 와 헷갈릴 수 있다. 주의) 

  • 서버 운영후에 웹브라우저가 접속하는 STATIC_URL 즉 https://www.*****.com/static/의 실제 서버의 물리적인 디렉토리는 /staticfiles/ 이다. 러니까 STATIC_URL과 STATICFILES_DIRS 가 가리키는 /static/은 문자는 같지만 같은 디렉토리가 아니라는 것. ㅋㅋㅋ 
    • 물론 NginX 같은 웹서버의 해당 웹사이트 설정에  location을 지정해야한다. 
    • 로컬에서 개발중일 때는 DEBUG=True로 설정하고 작업하는데 이때는  STATIC_ROOT 즉 /staticfiles/가 없어도 되고 collectstatic을 하지 않아도 된다. DEBUG=True 상태에서 runserver (내장서버)를 실행하면 장고가 알아서 그냥 css/js 파일등을 STATICFILES_DIRS 즉 /static/에서 연결하기 때문이다. 
    • 원래 장고가 css/js 등 정적인 파일들을 장고 시스템 외부로 분리한 이유는 편리성/속도/보안의 이유가 있었다. 정적 파일을 왜 굳이 장고가 핸들링해? 웹서버가 서빙하면 되지? ... 
  • 참고로 STATIC_URL, STATIC_ROOT / STATICFILES_DIRS 는 일종의 장고 전용 예약어이므로 그렇게 써야한다.  하지만  지정 디렉토리는 꼭 그럴 필요가 없는데 다들 이렇게 헷갈리게 쓰는 걸까? 초보 개발자들을 막으려는 진입 장벽?? ㅋㅋ  그냥 하던대로 하다보니까 그렇게 됐다는 게 정설이고 이젠 굳어져서 바꾸기도 어렵고 굳이 바꿀 필요 가 없는 것 뿐이다. ㅎㅎ  또 이걸 임의대로 바꾸면 다른 개발자들은 헷갈릴 수밖에 없으니 그냥 관용적으로 하던 건 하는 게 현명하다.