TroublesShooting

[Django] python manage.py runserver 무한 기다림

배준오 2024. 1. 10. 20:25
반응형

과거에 LG gram으로 작업했던 django 프로젝트를 새로운 PC에 올겨 작업을 하려고 한 상황이였습니다. 새로운 PC에서 기존 프로젝트 환경을 개발을 이어나가려는 와중, runserver를 하니 Performing system checks...에서 계속 로딩중이고 로컬서버가 띄워지지 않는 에러사항을 마주했습니다. (처음에는 메모리 문제인 줄 알고 다른 프로세서들 종료시키고, 재부팅도 해보고 했지만 메모리 문제는 아니였습니다.)

 

Django는 저에게 어떠한 에러로그도 띄워주지 않았기때문에, 어디서 부터 에러가 발생했는지 출력 로그를 통해 에러의 뿌리를 찾아야겠다고 생각했습니다. 먼저 python manage.py runserver를 했기 때문에 runserver.py 부터 들어가서 코드를 살펴보았습니다. 특별하게 실행되지 않는 함수도 없었고, 갑자기 데이터베이스를 migration 해주는 것을 깜빡하고 있었다는 걸 깨달은 후 문제를 해결한줄 알았습니다. 하지만 makemigrations 명령어 또한 아무 반응이 없었습니다. 

 

 

개인 프로젝트였기에 DB도 삭제해보고 이미 Migration된 폴더도 지우고 다시 해봤지만 해결할 수 없었고.. makemigrations.py에서 발생하는 에러의 뿌리를 찾으려고 해당 코드에 출력로그를 찍어보았습니다. 

 

로그를 찍어보니 사용자 정의 관리 명령에 명령행 인수를 추가하는 데 사용하는 add_arguments 함수 이외에는 다 동작하지 않는 문제를 발견했습니다. 

 

해당 파일의 클래스명은 Command로 BaseCommand라는 사용자 정의 관리 명령을 작성할 수 있는 클래스를 상속 받고있었습니다. BaseCommand에서 분명 문제가 발생했거니 하고 해당 클래스의 코드를 확인했습니다. 로그를 찍어보니

명령이 유용한지 확인하는 check함수 아래 메세지를 스타일링 해주는 조건절에서 문제가 발생하고 있다는걸 확인했습니다. 아래와 같은 부분입니다.

에러의 뿌리는 self.stderr.write(msg, lambda x: x)에서 발생하고 있었습니다. try except문으로 에러가 실제로 발생하는지 확인했습니다.

예외가 발생하긴 합니다. No changes detected 라고 마이그레이션이 안됬다고 떠서 바로 마이그레이션 해줍니다.

왜 갑자기 migration이 되는거지? 라고 생각했습니다. 왠걸 runserver도 정상적으로 됩니다. 하지만 왜.. 이유는 찾지 못했습니다. self.stderr.write(msg, lambda x: x)은 에러 스트림을 처리하는 코드인데 구체적인 에러로그를 보니 다음과 같은 운영체제 에러가 출력됩니다.

 

결론은 일단 저 코드에서 스트림 처리를 잘못해서 발생한 이슈였고  try - except문으로 예외처리를 했서 로컬 서버는 구동이 됬습니다.

 

왜 스트림 처리를 잘못하는 건지에 대한 이유는 찾게되면 다시 작성하겠습니다.

반응형