● 발생한 이유
category는 posts의 FK이다. 역참조를 이용하여 Category에 속한 post 객체들을 가져오려는 상황에서 posts의 serializers.py에 PostListSerializer class가 정의되어 있고 category 필드가 CategorySerializer를 참조하고 있는 상태이다. 즉 서로를 참조하게 되어 순환 참조 오류가 발생하게 되었다.
categories폴더의 serializers.py의 CategorySerializer class의 post 필드에서 PostListSerializer를 참조하고 있다
이렇듯 서로를 참조하게 되면 계속해서 무한히 재귀적으로 호출하게 되어 메모리 누수나, 변수 값 설정이 잘못되는 문제가 발생하게 된다.
● 해결
운영체제를 공부 할 때 배운 교착상태를 해결하는 방법을 떠올렸고 순환대기 상태를 해소하는 것으로 문제를 해결하기로 하였다. 서로를 참조하는 순환상태 이므로 posts의 serializers.py의 PostListSerializer class의 category 필드는 그대로 CategorySerializer를 참조 하도록 한다.
중요한건 categories의 serializers.py에서 PostListSerializer를 참조하게 하지 않고 views.py 파일의 get_posts_by_category 메소드에서 PostListSerializer를 호출하게 한다.
get_posts_by_cateogry 메소드에서 posts라는 relate_name을 이용하여 Post 모델을 가져온 후 PostListSerializer를 사용하게 한다. 이렇게 함으로써 의존성을 최소화 하였고 결과적으로 순환 참조 오류가 해결 되었다.
'Error Overflow' 카테고리의 다른 글
Git error: failed to push some refs to (0) | 2023.03.06 |
---|---|
카카오 소셜 로그인 구현 오류: Max retries exceeded with url (0) | 2023.02.06 |
Fatal error in launcher: Unable to create process using (Python 재설치, 중복된 환경변수 제거) (1) | 2023.01.22 |
AWS에서 연결을 거부하는 경우 (Nginx, letsencrypt을 사용할 시) (0) | 2022.12.10 |
Django admin page에 들어가려는데 500 Server Error나 DoesNotExist at /admin/login/ 오류가 뜨는 경우 (0) | 2022.10.27 |