2.1 모델이란?

Django에서 모델은 데이터베이스 스키마를 정의하고 관리하는 데 사용되는 핵심 구성 요소입니다. 모델은 데이터의 구조를 정의하며 데이터베이스의 테이블과 상호작용할 수 있습니다. 이러한 모델은 Django 프로젝트의 각 앱 내에 models.py 파일로 작성하게 됩니다.

이 책에서는 Django 4.2.4버전, PostgreSQL 15.4버전을 기반으로 작성하였으므로 버전이 같지 않다면 에러가 발생할 수 있습니다.

모델의 기본적인 형태

모델의 기본적인 형태는 다음과 같습니다.

# models.py
from django.db import models

class Zoo(models.Model):
    zoo_name = models.CharField(max_length=10)
    info = models.TextField()

class Animal(models.Model):
    name = models.CharField(max_length=20)
    info = models.TextField()
    age = models.IntegerField()
    zoo = models.ForeignKey(Zoo, on_delete=models.CASCADE)
    medical_check = models.BooleanField()
    birth_at = models.DateTimeField(auto_now=True)

위 모델들은 각각 Zoo와 Animal이라는 이름의 모델로 Zoo 모델은 zoo_name이라는 하나의 필드를 가지고 있고 Animal 모델은 name, info, zoo, medical_check, birth_at이라는 총 5개의 필드와 몇 가지 옵션을 가지고 있습니다. 이렇게 모델은 필드와 필드의 옵션으로 구성됩니다.

모델 생성

모델을 생성하기 위해서는 models.py 파일에 모델과 필드를 작성한 이후에 데이터베이스 스키마로 반영하기까지 두 가지 마이그레이션 과정을 거치게 됩니다.

Makemigrations

마이그레이션 과정의 첫 번째는 마이그레이션 파일을 생성하는 작업입니다. Command Line에서 사용하는 makemigrations 명령은 데이터베이스 스키마를 변경하는 모델 변경 사항을 추적하고 이러한 변경 사항을 각 앱의 migrations 폴더에 마이그레이션 파일로 생성하는 역할을 합니다. 이렇게 생성된 마이그레이션 파일은 데이터베이스 스키마를 변경하기 위한 SQL명령문과 Python코드가 포함되어 있으며 다음 과정에서 데이터베이스 스키마를 업데이트하는 데 사용됩니다.

Command Line에서 사용하는 Makemigrations 명령문은 다음과 같습니다.

# bash
python manage.py makemigrations

Migrate

마이그레이션 과정의 두 번째는 생성된 마이그레이션 파일을 기반으로 데이터베이스 스키마에 변경 사항을 적용하는 작업입니다. Command Line에서 사용하는 migrate 명령으로 마이그레이션 파일을 기반으로 데이터베이스 스키마를 업데이트할 수 있습니다. Command Line에서 사용하는 Migrate 명령문은 다음과 같습니다.

# bash
python manage.py migrate

2.2 모델 필드

Django 모델 필드는 데이터베이스 테이블의 열(Column)에 해당하며 모델 클래스 내에서 데이터의 형식과 구조를 정의합니다. 모델 필드는 문자열, 숫자, 날짜, 이메일, 관계 등 다양한 필드 유형이 존재하며 옵션을 사용해 필드의 동작이나 저장될 데이터의 조건 등을 세부적으로 지정할 수 있습니다.