django static과 media
django에서 static과 media
장고에서는 static과 media, 2가지 종류의 정적파일이 존재한다.
해당 정적 파일들은 웹 서비스에 사용하기 위해 미리 준비해둔 파일이라고 정의 할 수 있다.
스타일마다 차이가 있겠지만 개발 시작 단계에서 settings.py 를 통해 해당 정적파일들에 대한 설정을 미리 한 후에 개발을 시작하는 것이 수월하다.
우선 static에 대해서 알아보자
static file
장고에서 static file 이란 ?
장고에서 static file 이란 다음을 의미한다.
- css, js, image…
- 개발 리소스로서의 정적인 파일
- 수시로 변경되지 않으며 미리 준비되어 고정되어 있는 파일
설정
장고에서는 static file 설정을 위해 크게 3가지의 항목을 사용한다.
각 항목 별로 사용법을 알아보자.
- STATICFILES_DIRS
- 개발 단계에서 사용하는 정적 파일이 위치한 경로를 지정
- 만약 여러 앱에서 서로 다른 경로를 사용한다면 리스트나 튜플의 형태로 다수의 경로 지정해준다.
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
#최상위 경로에 static 디렉토리를 만들었을 경우
- STATIC_URL
- 웹 페이지에서 사용할 정적 파일의 최상위 경로이다.
- 물리적인 파일의 경로가 아닌 웹페이지에서 사용할 수 있는 주소의 최상위를 지정해주는 것이다.
- static 템플릿 태그에서 참조되어 진다.
STATIC_URL = 'static/'
- STATIC_ROOT
python manage.py collectstatic
명령어를 통해 프로젝트 내의 모든 static file을 저장할 경로를 의미한다.- 배포시에만 사용한다고 생각하면 된다.
- STATICFILES_DIRS 과 동일한 경로로 지정하면 안 된다.
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
# 한 곳에 모으는 것이기 때문에 문자열로 값을 줘야한다.
media file
장고에서 media file 이란?
- media file은 유저가 웹에서 업로드한 정적 파일을 의미한다.
- FileFiled, ImageFiled 를 통해 저장된 모든 파일
설정
크게 2가지의 설정이 존재한다.
-
MEDIA_ROOT
-
업로드 된 미디어 파일이 저장될 공간을 지정하는 항목
-
STATIC_ROOT와는 다른 경로여야 한다.
-
image나 file 필드에 upload_to 를 설정을 통해 저장되는 경로의 최상위 경로이다.
- 즉 경로 지정시 생략해야한다.
-
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
- MEDIA_URL
- STATIC_URL 과 마찬가지로 최상위 경로 URL을 지정한다.
- STATIC_URL 과 동일할 수 없다.
urls.py 설정
media file은 static file과 다르게 urlpatterns 에 설정 항목을 넘겨줘야 정상적으로 동작한다.
if settings.DEBUG :
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
주의사항
장고는 웹 서버가 아닌 웹 어플리케이션 서버이다.
실제로 클라이언트에게 정적 파일을 제공하는 것은 웹 서버(아파치,엔진엑스)의 업무이다.
그러나 우린 효율적인 개발을 위해 개발 단계에서만 몇몇 설정으로 정적 파일을 제공할 수 있도록 하는 것 뿐이다.
DEBUG = False , 즉 배포 단계에서는 보통 AWS나 azure 같은 클라우드 서비스를 통해 별도의 서버에 정적파일들을 저장하여 관리한다.
댓글남기기