해결된 질문
작성
·
176
0
안녕하세요,
askcompany 프로젝트 폴더 설정하는 부분에서 몇가지 질문이 있습니다.
1. DEBUG 모드일때만 프로젝트 폴더의 urls.py에 media 관련 url을 추가해주는 이유가 있을까요? 해당 url은 어떤 역할을 하게 되는 것인가요?
2. 프로젝트 폴더의 urls.py에서 사용한 from django.conf import settings과 django github의 django.conf.global_settings.py의 차이가 궁금합니다.
3. 2번의 settings와 프로젝트 폴더에 자동으로 생성된 settings.py의 차이가 궁금합니다.
4. settings를 개발과 운영으로 나눴는데 그렇다면 settings/prod.py에 DEBUG=False와 같은 설정을 바꿔야 하는게 아닌지 궁금합니다.
감사합니다.
답변 1
1
안녕하세요.
1. 장고는 실서비스(settings.DEBUG = False) 에서는 정적파일 서빙을 수행하지 않도록 되어있습니다. 요즘에는 일반적으로 실서비스에서 정적파일 서빙은 nginx, aws s3, cdn 등의 정적파일 서빙에 최적화된 서비스를 이용합니다. 그래서 장고는 정적파일 서빙에 관심이 없으며, DEBUG=True 에서만 개발 편의성을 위해 정적파일 서빙 기능을 제공해주는 것입니다. // urls.py에 MEDIA 관련 세팅을 하시면 settings.MEDIA_URL 주소를 가지는 요청이 들어올 경우, settings.MEDIA_ROOT 경로에서 파일을 찾아서 읽어서 응답을 합니다.
아주 작은 서비스이고 장고에서 직접 정적파일을 서빙코자 하신다면 whitenoise 라이브러리를 사용해보실 수 있습니다. 하지만 보통 nginx를 앞단에 두기에 nginx를 통해 static/media 정적파일 서빙을 하시는 방법이 낫습니다. 혹은 aws s3, cdn 을 쓰구요.
2./3. 장고에서 settings는 2가지가 있습니다. 첫번째는 django.conf.global_settings 이며 장고 프로젝트의 디폴트 설정입니다. 두번째는 우리 프로젝트의 settings이고 디폴트 설정을 덮어쓰기(overwrite)하는 목적입니다. // 그럼 우리는 django.conf.global_settings를 먼저 로딩하고 우리 프로젝트의 settings를 읽어들여 덮어쓰기를 해줘야 하는 데, 이를 django.conf.settings 를 로딩하시면 이러한 로딩/덮어쓰기 과정을 수행해줍니다.
참고로 우리 프로젝트의 settings는 어떤 경로의 파이썬 파일이라도 될 수 있으며, DJANGO_SETTINGS_MODULE 환경변수를 통해 그 경로를 지정해줍니다. manage.py 파일을 열어보시면 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") 와 같은 코드를 보실 수 있습니다. 이는 DJANGO_SETTINGS_MODULE 환경변수가 세팅되어있지 않으면, "mysite.settings"를 디폴트 값으로 사용하겠다는 코드입니다.
4. 그렇습니다. 말씀하신 대로 운영에서는 DEBUG = False 설정이 추가되는 것이 맞습니다. 이후 에피소드에서 DEBUG = False 설정을 추가할 텐데, 이번 에피소드에서는 추가되지 않았네요.
좋은 질문 감사드립니다.
궁금증이 해결되셨다면, 본 질문의 상태를 해결됨으로 변경 부탁드립니다.
화이팅입니다. :-)