클라이언트가 어떠한 요청을 보냈을 때, 요청한 데이터가 DB에 존재하지 않는 경우 django는 404 Not Found 에러를 발생시킵니다.
그러나 코드 작성 방식에 따라, 위와 같은 상황에 404 응답이 아닌 500 응답을 발생시키는 경우가 있습니다.
500 상태 코드는 서버 오류를 의미하므로, 명확한 에러 응답이 아니며, 사용자에게 혼란을 줄 수 있습니다.
이번 포스팅에서 이 문제를 해결하기 위해 Django에서 404 응답을 올바르게 처리하는 방법을 살펴보겠습니다.
Django Shortcuts function
Django는 개발자의 편의를 위해 몇 가지 유용한 shortcuts 함수들을 제공합니다.
- render()
- redirect()
- get_object_or_404()
- get_list_or_404()
이름을 보면 알 수 있듯이, get_object_or_404()와 get_list_or_404() 함수가 바로 404 응답 처리를 위해 사용되는 대표적인 함수들 입니다.
get_object_or_404()
일반적으로 사용되는 .objects.get()처럼 모델 manager objects에서 get()을 호출하지만,
.objects.get()과 다른 점은 해당 객체가 없을 때 기존 DoesNotExist 예외 대신 Http404를 raise 합니다.
get_list_or_404()
일반적으로 사용되는 .objects.filter()처럼 모델 manager objects에서 filter()을 호출하지만,
.objects.filter()과 다른 점은 해당 객체 목록이 없을 때 Http404를 raise 합니다.
적용 전/후 비교
- 적용 전
- 적용 후
왜 사용해야 할까?
클라이언트에게 “서버에 오류가 발생하여 요청을 수행할 수 없다(500)”라는 원인 불명의 에러를 제공하기 보다, 적절한 예외 처리를 통해 클라이언트에게 보다 정확한 에러 현황을 전달하는 것이 클라이언트가 문제를 이해하고 대응함에 있어 더 효율적이기 때문입니다.
'Study > Django' 카테고리의 다른 글
[Django] Locust를 활용한 부하 테스트(Load Testing) (6) | 2024.11.08 |
---|---|
[Django] REST API를 이용하여 게시판 기능 구현하기 (with Postman) (4) | 2024.10.23 |
[Django] Django seed로 테스트 데이터 자동 생성하는 법 (2) | 2024.10.16 |
[Django] Django로 CRUD를 구현해보자 (2) | 2024.09.28 |