본문 바로가기
Study/Django

[Django] Django에서 올바르게 404 not found 에러 응답하기

by ngool 2024. 10. 17.

클라이언트가 어떠한 요청을 보냈을 때, 요청한 데이터가 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)”라는 원인 불명의 에러를 제공하기 보다, 적절한 예외 처리를 통해 클라이언트에게 보다 정확한 에러 현황을 전달하는 것이 클라이언트가 문제를 이해하고 대응함에 있어 더 효율적이기 때문입니다.