해결된 질문
작성
·
45
0
LOGGING ={
'version':1,
'disable_existing_loggers':False,
'handlers':{
'file':{
'level':'DEBUG',
'class':'logging.FileHandler',
'filename':os.path.join(BASE_DIR, 'logs/django.log'),
'formatter':'json',
},
'console':{
'class':'logging.StreamHandler',
'formatter':'json',
},
},
'formatters':{
'json':{
'class': 'pythonjsonlogger.jsonlogger.JsonFormatter',
'format': '%(asctime)s %(levelname)s %(name)s %(message)s',
},
},
'root':{
'handlers':['file','console'],
'level':'DEBUG',
},
'loggers':{
'django':{
'handlers':['file','console'],
'level': 'DEBUG',
'propagate':False,
},
},
runserver 하는 순간 {"asctime": "2025-02-14 20:41:50,823", "levelname": "DEBUG", "name": "django.utils.autoreload", "message": "File C:\\Users\\moon\\miniforge3\\envs\\workout\\Lib\\site-packages\\PIL\\__init__.py first seen with mtime 1739352505.781736"}
이런 변경한 적 없는 것들이 자동리로드 되면서 콘솔에 계속 올라옵니다. 이유가 궁금합니다.
답변 1
0
안녕하세요 ansghltjd9님,
Django의 runserver
를 실행할 때 자동으로 리로드(Auto-reload)가 발생하는 이유는 django.utils.autoreload
가 파일 변경을 감지하는 방식 때문입니다.
Django의 개발 서버 (runserver
)는 코드 변경을 감지하여 자동으로 재시작하는 기능이 있습니다. 이 기능은 django.utils.autoreload
모듈을 사용하여 특정 디렉터리의 파일 변경 여부를 감지합니다. 파일의 변경을 감지하는 주요 방식은 다음과 같습니다.
파일의 수정 시간 (mtime
) 감지
Django는 실행 중인 Python 파일들의 mtime (modified time, 수정 시간)
을 주기적으로 확인합니다.
mtime
이 변경되면 Django는 이를 코드 변경으로 간주하고 자동으로 리로드합니다.
sys.modules를 이용한 파일 추적
Python이 로드한 모든 모듈 (sys.modules
)을 순회하면서 해당 파일의 변경 여부를 확인합니다.
로그에서 보시면 ...
{
"asctime": "2025-02-14 20:41:50,823",
"levelname": "DEBUG",
"name": "django.utils.autoreload",
"message": "File C:\\Users\\moon\\miniforge3\\envs\\workout\\Lib\\site-packages\\PIL\\__init__.py first seen with mtime 1739352505.781736"
}
Django가 PIL
(Pillow 라이브러리)의 __init__.py
파일을 감지하고, 이 파일의 mtime
값(1739352505.781736
)을 처음 인식했다고 로그에 남겼습니다.
보기가 불편하시다면 자동 리로드 기능을 끄고 실행하는 방법도 있습니다.
python manage.py runserver --noreload
이렇게 하면 django.utils.autoreload
가 동작하지 않으므로, 불필요한 리로드를 방지할 수 있습니다.