Django에서는 Model을 정의하면 데이터베이스와 소통할 수 있는 API를 자동으로 제공합니다.
이 API를 통해 SQL을 직접 작성하지 않고도 데이터를 조회·생성·수정·삭제할 수 있습니다.
Post.objects.all() # 모든 데이터 조회
Post.objects.get(id=1) # 조건에 맞는 데이터 1개 조회
이처럼 우리가 사용하는 메서드들이 바로 Django Model API입니다.
1. QuerySet이란?
QuerySet은 데이터베이스에서 가져올 “데이터 목록”을 의미합니다.
- Python의 리스트와 비슷한 형태
- 실제 데이터가 아니라 “쿼리 결과를 담고 있는 객체”
- Model과 DB 사이의 중간 결과물
posts = Post.objects.all() # QuerySet 반환
여기서 objects는 Model Manager로, Model과 데이터베이스 사이의 연산을 담당합니다.
2. QuerySet API (여러 개의 데이터 조회)
QuerySet을 반환하는 대표적인 API들입니다.

3. 하나의 데이터를 반환하는 API

4. 기타 자주 쓰는 API

5. 필드 조건 옵션 (Field Lookups)
QuerySet에서 조건을 줄 때는 필드명 뒤에 __옵션을 붙여 사용합니다.
Post.objects.filter(title__icontains='django')
자주 쓰는 옵션만 정리하면 다음과 같습니다.

이 조건들은 모두 DB에서 SQL로 변환되어 실행됩니다.
6. Lazy Evaluation (지연 연산)
Django QuerySet의 가장 중요한 특징은 지연 연산(Lazy Evaluation) 입니다.
qs = Post.objects.filter(id__gte=10)
이 시점에는 ❌ 아직 DB에 쿼리가 실행되지 않습니다.
아래처럼 실제로 데이터가 필요해지는 순간에 쿼리가 실행됩니다.
qs.count()
qs.first()
for post in qs:
print(post)
7. QuerySet 체이닝(Chain)은 안전할까?
여러 Query를 나눠서 작성해도 성능은 동일합니다.
Post.objects.filter(id__gte=10, content__contains='codeit').order_by('-dt_created').last()
posts = Post.objects.filter(id__gte=10)
posts = posts.order_by('-created_at')
post = posts.last()
한 줄로 쓰든 여러 줄로 나누든 최종적으로 동일한 SQL이 한 번 실행됩니다.
그래서 실무에서는 가독성을 위해 여러 줄로 나누는 방식이 더 권장됩니다.
8. 정리하면
Django ORM은
Python 코드로 SQL을 작성하게 해주는 인터페이스이며,
QuerySet은 DB 쿼리를 지연 실행하는 객체이다.
'Django 프론트& 백엔드 개발' 카테고리의 다른 글
| URL Name을 활용한 템플릿 태그 사용법 (0) | 2026.01.10 |
|---|---|
| [트러블슈팅] Django URL 404 에러를 통해 배운 것 - URL Converter 공백 처리 (0) | 2026.01.10 |
| [Model] 하드 코딩을 피하고, Django답게 화면 만들기 (0) | 2026.01.04 |
| [Model] Django 관리자(Admin) 생성과 모델 관리하기 (0) | 2026.01.04 |
| [Model] Django ORM으로 데이터 수정(Update)과 삭제(Delete)하기 (0) | 2026.01.04 |