Django에서 상세 페이지를 구현할 때 가장 흔한 로직은
ID로 객체를 조회하는 것입니다.
post = Post.objects.get(id=post_id)
하지만 해당 ID의 데이터가 존재하지 않는다면
DoesNotExist 예외가 발생하고,
처리를 하지 않으면 **서버 에러(500)**로 이어질 수 있습니다.
1. try-except로 404 처리하기 (기본 방식)
def post_detail(request, post_id):
try:
post = Post.objects.get(id=post_id)
except Post.DoesNotExist:
raise Http404()
return render(request, 'posts/post_detail.html', {'post': post})
이 방식은 동작에는 문제가 없지만 코드가 길어지고 같은 패턴이 여러 뷰에서 반복됩니다.
2. get_object_or_404 사용하기 (권장 방식)
from django.shortcuts import get_object_or_404
def post_detail(request, post_id):
post = get_object_or_404(Post, id=post_id)
return render(request, 'posts/post_detail.html', {'post': post})
Django는 “객체 조회 → 없으면 404 반환” 이라는 패턴이 너무 자주 등장하기 때문에 이를 공용 함수로 미리 만들어 제공합니다.
3. 왜 get_object_or_404가 더 효율적일까?
✅ 코드가 짧고 읽기 쉽다
✅ 실수로 500 에러를 노출할 가능성이 줄어든다
✅ Django가 의도한 예외 처리 방식
✅ 실무에서 가장 많이 사용되는 패턴
4. 정리하면
존재하지 않는 데이터 요청은
서버 에러가 아니라 404로 응답하는 것이 맞고,
Django에서는 get_object_or_404가 그 표준이다.
'Django 프론트& 백엔드 개발' 카테고리의 다른 글
| 유효성 검증을 뒤늦게 추가했을 경우 - Django 유효성 검증 로직 추가 (0) | 2026.01.14 |
|---|---|
| Django 더미 데이터 생성 – django-seed 사용 및 주의점 (0) | 2026.01.14 |
| Django ORM 조회 결과가 없을 때 템플릿에서 처리하는 방법 (if / for 예제) (0) | 2026.01.13 |
| Django 게시글 삭제(Delete) 기능 구현 (0) | 2026.01.11 |
| Django 수정(View)에서 request.POST와 instance를 함께 사용하는 이유 (0) | 2026.01.11 |