본문 바로가기
Frameworks/Django

[Django] static파일 관리하기

by 젊은오리 2022. 5. 11.
728x90

웹서비스 내부 데이터를 다음과 같이 둘로 나눌 수 있다.

  • static: 미리 준비된 데이터(css, js, img파일)
  • media: 사용자가 업로드한 데이터(웹상에서 동적으로 부여되는 파일)

 

우선 본인도 장고로 프로젝트를 해봤지만, 배포단계를 거치지 않는 바람에 static파일들에 대해서 잘 모른채로 그냥  static 폴더를 만든 다음에 css나 js 파일을 만들어서 당연하다 싶이 사용한 경험이 있다. 후에 장고기반 프로젝트에 꼭 필요하다 싶은 내용일 것 같아 다시 정리를 해보았다. 

장고는 settings.py에서 STATIC_URL, STATICFILES_DIRS, STATIC_ROOT세개로 static파일들을 관리한다. 그럼 다음 세가지의 변수가 무엇을 의미하는지 살펴보자.

 

STATIC_URL

브라우저 상에서 내가 만든 static파일에 접근할 수 있도록 경로를 뜻한다. runserver가 실행되면 모든 {% static %}태그를 STATIC_URL에 등록된 경로로 변경한다.

STATIC_URL = '/static/' 

가령 html에 {% static "img/sample.jpg" %}가 있고 settings.py에 위와 같이 STATIC_URL가 정의되어 있을 경우엔 static/img/sample.jpg의 경로로 브라우저가 정적파일을 찾을 수 있게 한다. 

 

STATICFILES_DIRS

static파일들의 경로를 작성해놓는 곳이다. 개발자가 추가로 작성해야 되는 부분이다.

만약 두개의 application을 만들었고, 그 app아래에 각각의 static파일들을 모아놓은 static폴더가 있다면 위 사진과 같이 한곳에 모아놓을 수 있다. BASE_DIR는 최상위폴더의 위치를 뜻한다. 

 

static파일을 app에서 관리하지 않고 BASE_DIR에서 관리하는 방법은 다음과 같다.

 

 

STATIC_ROOT

static파일들을 복사하여 모아 놓을 경로를 뜻한다.

배포가 아닌 개발을 할때에는 python manage.py runserver로 static파일들을 자동으로 모아주지만 배포를 할 때에는 runserver를 하지 못하므로 모든 static파일들을 모으는 작업이 필요하다.

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

만약 위와 같이 정의했을 경우에 staticfiles라는 폴더 내에 모조리 static파일들을 복사해 넣는다는 뜻이 되고 이후에 명령어  python manage.py collectstatic을 실행할 경우 staticfiles폴더가 자동으로 생성되며 그 안에 static파일들이 copy된다.

728x90

댓글