Django 모델 생성과 데이터 출력 완전 정복
데이터를 눈으로 확인할 수 있어야 진짜 실력이죠!
Django 모델부터 화면 출력까지 직접 해보는 실습, 지금 시작해볼까요?
안녕하세요, 여러분!
오늘은 Django 프로젝트에서 데이터 모델을 정의하고, 그 데이터를 실제 웹 페이지에서 출력하는 전 과정을 함께 살펴보려 해요.
예전엔 막연하게 느껴졌던 모델 정의와 마이그레이션, 그리고 admin에서 데이터 입력하고 템플릿에서 출력하는 흐름이 이제는 훨씬 친숙하게 느껴질 거예요.
이 글에서는 TodoItem 또는 BlogPost 같은 간단한 모델을 정의해서, admin 사이트에서 데이터를 넣고, 뷰 함수와 템플릿을 통해 화면에 출력하는 과정까지 단계별로 진행해볼 거예요.
목차
1. 모델 정의하기 🧱
자, 이제 Django에서 가장 핵심이라고 할 수 있는 모델(Model)을 만들어볼 차례예요.
모델은 데이터베이스 테이블과 1:1로 매칭되는 클래스로, 우리가 다룰 데이터를 어떤 형태로 저장하고 사용할지를 정의해줍니다.
📝 모델 클래스 생성
예를 들어, 간단한 할 일(Todo) 목록을 만들고 싶다고 해봅시다.
이럴 땐 다음처럼 TodoItem
모델을 정의할 수 있어요:
from django.db import models
class TodoItem(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
이 모델을 한 줄씩 살펴보면 다음과 같습니다:
필드 | 설명 |
---|---|
title |
할 일의 제목 (문자열, 최대 200자) |
content |
자세한 설명을 담을 수 있는 텍스트 필드 |
created_at |
데이터가 생성된 시간 (자동 저장) |
📁 모델 파일 저장 위치
모델 클래스는 보통 각 앱의 models.py
파일에 작성합니다.
예를 들어, 앱 이름이 todo라면 todo/models.py
에 위 코드를 추가해 주세요.
- models.py는 각 앱 안에 존재하며 데이터 구조를 정의하는 핵심 파일이에요.
-
__str__()
메서드는 admin이나 쉘에서 객체를 문자열로 표시할 때 유용합니다.
이렇게 간단한 모델 하나만 정의해도, Django는 이걸 기반으로 데이터베이스 테이블을 만들고 다양한 기능을 자동으로 제공해줘요. 정말 멋지지 않나요?
2. 마이그레이션 수행하기 🔄
모델을 만들었다고 해서 곧바로 데이터베이스에 테이블이 생기는 건 아니에요.
Django에서는 마이그레이션(migration)이라는 과정을 거쳐야 모델의 정의가 실제 데이터베이스 테이블로 반영됩니다.
🛠️ 마이그레이션 순서
python manage.py makemigrations
- 모델 변경 사항을 기반으로 마이그레이션 파일을 생성해요.python manage.py migrate
- 실제로 데이터베이스에 테이블을 만들거나 수정해요.
직접 터미널에서 한 번 입력해볼까요?
# 마이그레이션 파일 생성
$ python manage.py makemigrations
# DB에 실제 반영
$ python manage.py migrate
명령어 실행 후 아래와 같이 출력되면 성공입니다 🎉
Migrations for 'todo':
todo/migrations/0001_initial.py
- Create model TodoItem
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, todo
Running migrations:
Applying todo.0001_initial... OK
🚧 잠깐! 이런 에러가 나올 수 있어요
-
App 'todo' could not be found
→ settings.py에 앱 등록 안 했을 가능성! -
No changes detected
→ 모델을 수정한 적이 없을 수도 있어요.
마이그레이션은 한 번만 하고 끝나는 게 아니라, 모델에 변화가 생길 때마다 반복하게 될 작업입니다.
앞으로 자주 만나게 될 명령어니까 익숙해지는 게 좋아요!
3. Admin 사이트에 모델 등록하기 ⚙️
모델을 만들고 마이그레이션까지 완료했다면, 이제는 데이터를 직접 추가해볼 수 있어야겠죠?
Django는 기본적으로 Admin 사이트라는 강력한 기능을 제공합니다.
이걸 통해 직접 데이터를 추가하거나 수정할 수 있어요.
✅ 모델을 Admin에 등록하기
우선 admin.py
파일을 열어 아래처럼 코드를 추가해 주세요.
from django.contrib import admin
from .models import TodoItem
admin.site.register(TodoItem)
이렇게 하면 Admin 페이지에서 TodoItem 모델을 볼 수 있게 됩니다. 아주 간단하죠?
4. 슈퍼유저 생성 및 데이터 추가 👑
Admin에 로그인하려면 슈퍼유저(superuser) 계정을 먼저 만들어야 해요.
아래 명령어를 입력해 관리자 계정을 만들어 봅시다.
$ python manage.py createsuperuser
이제 서버를 실행하고 http://127.0.0.1:8000/admin
에 접속해보세요.
- 로그인하면 TodoItem이 목록에 보일 거예요.
- 클릭해서 새 데이터도 직접 입력할 수 있답니다.
이제 모델을 만들고, Admin에 등록하고, 데이터를 입력하는 기본적인 백엔드 흐름을 완성했어요!
다음은 이 데이터를 뷰(View)와 템플릿(Template)을 통해 웹페이지에서 출력해보는 단계입니다.
5. 뷰 함수에서 QuerySet으로 데이터 조회 📦
Admin에서 입력한 데이터를 웹 페이지에 출력하려면 뷰(View) 함수에서 모델로부터 데이터를 조회해야 해요.
이때 사용하는 게 바로 Django의 ORM 기능 중 하나인 QuerySet입니다.
💡 QuerySet이란?
QuerySet은 데이터베이스에서 가져온 객체들의 집합이에요.
SQL을 직접 쓰지 않고 파이썬 문법으로 데이터를 조회할 수 있도록 도와줍니다.
예를 들어 TodoItem.objects.all()
은 TodoItem 테이블의 모든 데이터를 불러오는 명령어랍니다.
🛠 뷰 함수에서 QuerySet 사용하기
자, 이제 views.py
파일에서 실제로 데이터를 가져오는 코드를 작성해볼게요.
from django.shortcuts import render
from .models import TodoItem
def todo_list(request):
todos = TodoItem.objects.all() # QuerySet: 전체 데이터 조회
return render(request, 'todo/list.html', {'todos': todos})
-
TodoItem.objects.all()
은 등록된 모든 할 일을 가져옵니다. -
render()
함수는 데이터를 HTML 템플릿과 함께 반환해요.
🔗 URLconf에 뷰 연결하기
뷰 함수를 만들었으면 해당 함수에 접근할 수 있도록 urls.py
에도 경로를 연결해줘야 합니다. 다음 코드를 todo/urls.py
또는 프로젝트의 urls.py
에 추가해 주세요.
from django.urls import path
from . import views
urlpatterns = [
path('todos/', views.todo_list, name='todo_list'),
]
이제 브라우저에서 http://127.0.0.1:8000/todos/
주소로 접속하면, 뷰 함수가 동작하며 템플릿에 데이터를 전달하게 됩니다.
🧠 실전 활용 팁
-
.order_by('-created_at')
으로 최신 항목부터 정렬할 수 있어요. -
.filter()
를 활용하면 특정 조건만 골라볼 수도 있어요.
지금까지 배운 내용은 Django의 데이터 흐름에서 가장 중요한 부분 중 하나입니다. 뷰 함수는 데이터와 템플릿 사이의 다리 역할을 하며, 이를 제대로 이해해야 Django를 진짜 잘 다룰 수 있게 돼요.
6. 템플릿에서 목록 출력 및 브라우저 확인 🖥️
이제 마지막 단계예요! 뷰에서 전달한 QuerySet 데이터를 템플릿 파일에 출력해보겠습니다. 이렇게 하면 우리가 만든 모델 데이터를 브라우저에서 직접 볼 수 있게 되죠.
📄 템플릿 파일 생성하기
우선 앱 폴더 안에 templates
폴더를 만들고, 그 안에 todo
폴더를 생성한 후 list.html
이라는 파일을 만듭니다. 예시 경로는 다음과 같아요:
todo/
├── templates/
│ └── todo/
│ └── list.html
그리고 list.html
에는 아래처럼 작성해 주세요.
Todo 목록
할 일 목록
{% for item in todos %}
{{ item.title }}
{{ item.content }}
{{ item.created_at }}
{% empty %}아직 등록된 항목이 없습니다.
{% endfor %}
Django의 템플릿 언어인 {% for %}
와 {{ }}
를 활용해서 데이터를 반복 출력하고 있어요. 실제 데이터가 없을 경우엔 {% empty %}
블럭이 작동합니다.
📌 설정 점검 리스트
-
settings.py
의TEMPLATES
설정에'APP_DIRS': True
가 되어 있는지 확인 - 앱 이름이
INSTALLED_APPS
에 포함되어 있어야 함
🌐 브라우저에서 확인해보기
이제 python manage.py runserver
명령으로 개발 서버를 실행하고, 브라우저에서 http://127.0.0.1:8000/todos/
주소로 접속해보세요.
등록한 데이터가 목록으로 출력된다면... 성공입니다! 🎉
이 과정을 통해 데이터베이스 모델 생성 → Admin 등록 및 입력 → View에서 데이터 조회 → Template에서 출력까지 전체 웹 애플리케이션 흐름을 완성해본 셈이에요.
마무리하며 🧩
지금까지 우리는 Django에서 모델을 생성하고 데이터를 출력하는 전 과정을 순차적으로 경험해 봤습니다. 처음에는 복잡하게 느껴질 수 있지만, 한번 흐름을 타고 나면 의외로 논리적이고 직관적인 걸 느끼셨을 거예요.
전체 흐름을 요약하면 다음과 같습니다:
- 모델 정의 (
models.py
) - 마이그레이션으로 DB에 반영
- Admin에 모델 등록 및 슈퍼유저 생성
- 뷰 함수에서 QuerySet으로 데이터 조회
- 템플릿에 데이터 넘기고 브라우저에 출력
이제 여러분은 Django 웹 개발에서 가장 기본이 되는 MVT(Model-View-Template) 패턴의 흐름을 완전히 이해한 셈입니다. 앞으로 더 복잡한 프로젝트를 다룰 때도 이 흐름은 그대로 유지되며, 이 토대를 기반으로 기능만 점점 확장되니까요.
다음 글에서는 모델 간 관계 설정(ForeignKey 등)과 리스트 정렬, 필터링 등의 고급 QuerySet 사용법까지 이어서 다뤄볼 예정이에요. 계속해서 함께 성장해봐요! 😊
'Python > Python 웹프로그래밍' 카테고리의 다른 글
[Django-08] 장고(Django)로 쉽고 빠르게 Todo 리스트 앱 만들기 (0) | 2025.04.27 |
---|---|
[Django-07] CRUD 구현과 Todo 앱 개발 (0) | 2025.04.26 |
[Django-05] Django데이터베이스 연동과 ORM 이해 (0) | 2025.04.21 |
[Django-04] 첫 Django 앱 생성과 간단한 페이지 구현 (0) | 2025.04.21 |
[Django-03] Django 앱 구조와 URL·뷰·템플릿 완전 정복 (0) | 2025.04.20 |