Django는 파이썬으로 작성된 강력한 웹 프레임워크로, 데이터베이스를 모델링하는 매우 유연한 방법을 제공합니다. Django의 모델 클래스는 데이터베이스의 테이블을 정의하고, 각 필드는 데이터베이스의 열을 나타냅니다. 이번 강좌에서는 Django 모델에서 다양한 필드 유형과 데이터 간의 관계를 설정하는 방법에 대해 알아보겠습니다.
1. Django 모델 소개
Django의 모델은 django.db.models.Model
를 상속받아 정의됩니다. 모델 설계를 통해 우리가 어떤 데이터를 저장하고 어떤 관계를 가질지를 설정할 수 있습니다. 모델 필드는 다음과 같은 다양한 데이터 유형을 지원합니다:
- CharField
- TextField
- IntegerField
- DateTimeField
- EmailField
- FileField, ImageField 등
2. 필드 유형
각 필드는 특정한 속성을 가지며, 이러한 속성을 통해 데이터의 유효성과 제약을 설정할 수 있습니다. 다음은 일반적으로 사용되는 필드 유형들입니다.
2.1 CharField
문자열 필드로, 주로 짧은 텍스트를 저장하는 데 사용됩니다. max_length
속성이 필수입니다.
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
2.2 TextField
긴 텍스트를 저장할 수 있는 필드입니다. max_length
속성이 필요하지 않습니다.
class BlogPost(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
2.3 IntegerField
정수를 저장하기 위한 필드입니다.
class Comment(models.Model):
post = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
likes = models.IntegerField(default=0)
3. 데이터베이스 관계 설정
Django에서는 데이터 간의 관계를 설정할 수 있는 여러 가지 방법을 제공합니다. 주로 사용되는 관계는 다음과 같습니다.
3.1 OneToOneField
OneToOneField는 서로 다른 두 모델 간의 1:1 관계를 설정할 때 사용합니다. 예를 들어, 사용자가 프로필을 가지는 경우에 사용할 수 있습니다.
class UserProfile(models.Model):
user = models.OneToOneField(Author, on_delete=models.CASCADE)
bio = models.TextField()
avatar = models.ImageField(upload_to='avatars/')
3.2 ForeignKey
ForeignKey는 1:N 관계를 설정할 때 사용합니다. 예를 들어, 한 명의 저자가 여러 개의 포스트를 가진다고 가정해봅시다.
class Author(models.Model):
name = models.CharField(max_length=100)
class BlogPost(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
content = models.TextField()
3.3 ManyToManyField
ManyToManyField는 N:M 관계를 설정할 때 사용합니다. 예를 들어, 여러 개의 태그가 여러 개의 블로그 포스트에 연관될 수 있습니다.
class Tag(models.Model):
name = models.CharField(max_length=30)
class BlogPost(models.Model):
title = models.CharField(max_length=100)
tags = models.ManyToManyField(Tag)
4. 실습: 블로그 어플리케이션 모델 설계
이제 실습을 통해 위의 개념을 종합적으로 이해해보겠습니다. 간단한 블로그 게시물과 관련된 여러 모델을 설계해보겠습니다.
class Author(models.Model):
name = models.CharField(max_length=100)
class Tag(models.Model):
name = models.CharField(max_length=30)
class BlogPost(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
author = models.ForeignKey(Author, on_delete=models.CASCADE)
tags = models.ManyToManyField(Tag)
created_at = models.DateTimeField(auto_now_add=True)
5. 마이그레이션
모델을 정의한 후에는 마이그레이션을 통해 데이터베이스에 반영해야 합니다. 다음 명령어를 통해 마이그레이션을 생성하고 실행할 수 있습니다.
$ python manage.py makemigrations
$ python manage.py migrate
6. Django Admin을 통한 모델 관리
Django Admin을 사용하면 모델을 쉽게 관리할 수 있습니다. Admin에 모델을 등록해보겠습니다.
from django.contrib import admin
from .models import Author, Tag, BlogPost
admin.site.register(Author)
admin.site.register(Tag)
admin.site.register(BlogPost)
7. 결론
이와 같이 Django에서는 다양한 필드 유형과 관계를 설정할 수 있는 방법을 제공합니다. 이는 데이터베이스 모델링 시 유연성과 강력함을 보장합니다. 본 강좌를 통해 Django 모델의 설계에 대한 깊이 있는 이해를 했길 바라며, 자신만의 어플리케이션을 개발하는 데 도움이 되었으면 합니다.
더 많은 정보를 원하시면 Django 공식 문서를 참조하시기 바랍니다.