[Django] Model

김동건·2026년 10월 14일
post-thumbnail

1. Model

데이터베이스와 Python 클래스 (객체)로 추상화된 형태로 상호작용한다.

  1. urls.py : 사용자 요청의 시작점이다.
  2. views.py : 요청을 처리하고 models.py 를 통해 데이터를 다룬다.
  3. models.py : 데이터베이스를 정의하고, 데이터베이스와 상호작용한다.
  4. templates : views.py 로부터 받은 데이터를 사용자에게 보여줄 화면을 구성한다.

2. Model class

DB의 테이블을 정의하고 데이터를 조작할 수 있는 기능들을 제공한다.

  • Model 클래스 1개는 DB 테이블 1개에 대응한다.
  • 클래스의 속성(Field)은 DB 테이블의 컬럼(Column)에 대응한다.
  • 객체(인스턴스) 1개는 DB 테이블의 행(Row) 1개에 대응한다.
  • Django ORM을 사용하면 SQL을 직접 작성하지 않고 CRUD 작업을 수행할 수 있다.
    • ORM : 객체 지향 프로그래밍 언어와 관계형 데이터베이스를 연결해주는 기술이다.
    • SQL을 직접 작성하지 않고, Python 코드로 DB를 조작할 수 있게 해주는 기술이다.

생성한 앱에 이미 models.py 가 존재한다. models.py에서 models.Model을 상속받아 정의한다.

Models.py

class Article(models.Model):
    title = models.CharField(max_length=20)
    content = models.TextField()

3. Model Field

DB 테이블의 필드를 정의하고, 데이터 타입 및 제약 조건을 명시한다.

  1. Field types
    • 데이터의 종류(타입)을 정의한다.
    • 주요 필드 유형 문자열 필드
      • CharField , TextField

        숫자 필드

      • IntegerField , FloatField

        날짜/시간 필드

      • DateField , TimeField , DateTimeField

        파일 관련 필드

      • FileField , ImageField

  2. Field options
    • 동작과 제약 조건을 정의한다.
    • 주요 필드 옵션 null blank default
# CharField -> Field types
# max_length -> Field options
title = models.CharField(max_length=10)

4. Migrations

model 클래스의 변경사항 (필드 생성, 수정, 삭제 등)을 DB에 최종 반영하는 방법이다.

  1. 모델 클래스 작성/수정
  2. 마이그레이션 파일 생성 명령어 실행
python manage.py makemigrations
  1. 마이그레이션 파일 생성 확인

생성된 최종 설계 마이그레이션 파일은 임의적으로 수정하지 말고, makemigrations 명령어를 통해 수정하자

# Generated by Django 5.2.18 on 2026-10-14 01:04

from django.db import migrations, models

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Article',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=20)),
                ('content', models.TextField()),
            ],
        ),
    ]
  1. 마이그레이션 파일을 DB에 반영
python manage.py migrate

  1. DB 확인

추가 Migrations 과정

이미 생성된 테이블에 필드를 추가해야한다면

  1. 새로운 필드 작성
class Article(models.Model):
    title = models.CharField(max_length=20)
    content = models.TextField()
    # 생성일, 수정일 필드 추가
    create_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)
  1. 새로운 필드 추가 후 makemigrations 명령어 입력

명령어를 입력하면 아래와 같은 프롬프트가 나온다.

  1. 현재 대화를 유지하면서 직접 기본 값을 입력 → ✅
  2. 현재 대화에서 나간 후 models.py 에 기본 값 관련 설정

그럼 아래와 같이 프롬프트가 나오는데, 날짜 데이터이기 때문에 아무것도 입력하지 않고 엔터를 누르면 Django가 제안하는 기본 값으로 설정된다.

0001_initial 파일을 의존하면서 생성된다.

import django.utils.timezone
from django.db import migrations, models

class Migration(migrations.Migration):

    dependencies = [
        ('articles', '0001_initial'),
    ]

    operations = [
        migrations.AddField(
            model_name='article',
            name='create_at',
            field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
            preserve_default=False,
        ),
        migrations.AddField(
            model_name='article',
            name='update_at',
            field=models.DateTimeField(auto_now=True),
        ),
    ]
  1. migrate 명령어 입력 후 테이블 필드 확인


5. 관리자 인터페이스

Django가 추가 설치 및 설정 없이 자동으로 제공하는 관리자 인터페이스이다.
데이터 베이스 모델의 CRUD 작업을 간편하게 수행할 수 있다.

Django admin 계정 생성

  1. 터미널에서 관리자 계정 생성 명령어 입력
python manage.py createsuperuser
  1. 정보 입력

    • 사용자 이름: 관리자 페이지에 로그인할 때 사용할 아이디를 입력한다.
    • 이메일: 선택 사항이기 때문에 엔터를 눌러 넘어가도 된다.
    • 비밀번호: 로그인할때 사용할 비밀번호를 입력한다.

  2. DB에 생성된 admin 계정 확인

  1. 관리자 인터페이스 페이지 확인

    • 127.0.0.1:8000/admin

처음 로그인 했을때 아무것도 보이지 않는 것이 정상이다. 우리가 만든 모델을 관리하려면 추가 설정이 필요하다.

  1. admin.py 추가 설정
from django.contrib import admin
from .models import Article

# admin 사이트에 우리가 만든 Article 모델 클래스를 등록해야한다.
admin.site.register(Article)

위와 같이 게시글을 작성할 수 있다.

게시글을 작성하고 데이터베이스를 확인해보면

데이터가 들어온 것을 확인할 수 있다!

profile
백엔드를 학습하는 주니어 개발자입니다.

0개의 댓글