반응형

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)이라는 과정을 거쳐야 모델의 정의가 실제 데이터베이스 테이블로 반영됩니다.

🛠️ 마이그레이션 순서

  1. python manage.py makemigrations - 모델 변경 사항을 기반으로 마이그레이션 파일을 생성해요.
  2. 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.pyTEMPLATES 설정에 'APP_DIRS': True가 되어 있는지 확인
  • 앱 이름이 INSTALLED_APPS에 포함되어 있어야 함

🌐 브라우저에서 확인해보기

이제 python manage.py runserver 명령으로 개발 서버를 실행하고, 브라우저에서 http://127.0.0.1:8000/todos/ 주소로 접속해보세요.

등록한 데이터가 목록으로 출력된다면... 성공입니다! 🎉

이 과정을 통해 데이터베이스 모델 생성 → Admin 등록 및 입력 → View에서 데이터 조회 → Template에서 출력까지 전체 웹 애플리케이션 흐름을 완성해본 셈이에요.

마무리하며 🧩

지금까지 우리는 Django에서 모델을 생성하고 데이터를 출력하는 전 과정을 순차적으로 경험해 봤습니다. 처음에는 복잡하게 느껴질 수 있지만, 한번 흐름을 타고 나면 의외로 논리적이고 직관적인 걸 느끼셨을 거예요.

전체 흐름을 요약하면 다음과 같습니다:

  1. 모델 정의 (models.py)
  2. 마이그레이션으로 DB에 반영
  3. Admin에 모델 등록 및 슈퍼유저 생성
  4. 뷰 함수에서 QuerySet으로 데이터 조회
  5. 템플릿에 데이터 넘기고 브라우저에 출력

이제 여러분은 Django 웹 개발에서 가장 기본이 되는 MVT(Model-View-Template) 패턴의 흐름을 완전히 이해한 셈입니다. 앞으로 더 복잡한 프로젝트를 다룰 때도 이 흐름은 그대로 유지되며, 이 토대를 기반으로 기능만 점점 확장되니까요.

다음 글에서는 모델 간 관계 설정(ForeignKey 등)과 리스트 정렬, 필터링 등의 고급 QuerySet 사용법까지 이어서 다뤄볼 예정이에요. 계속해서 함께 성장해봐요! 😊

반응형

+ Recent posts