웹서비스 내부 데이터를 다음과 같이 둘로 나눌 수 있다.
- 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된다.
'Frameworks > Django' 카테고리의 다른 글
[Django] ~ 장고프로젝트 앱 생성까지 진행 (0) | 2022.05.30 |
---|---|
[Django] settings.py에서 SECRET KEY 관리하기 (0) | 2022.05.18 |
[Django] form입력 받는 세가지 방법 (0) | 2022.05.12 |
[Django] 크롤링한 데이터 DB에 저장하기 (0) | 2022.05.04 |
댓글