파이썬 장고 모델(ORM): 데이터베이스 설계 및 구현 방법
이 글에서는 장고를 사용하여 간단한 블로그 시스템의 데이터베이스를 설계하고 구현하는 방법에 대해 알아보겠습니다. ‘Post’ (게시글)와 ‘Comment’ (댓글)라는 두 가지 모델을 만들어 보겠습니다.
1. ORM (Object-Relational Mapping) 이해
장고의 ORM은 모델을 사용하여 데이터베이스의 테이블을 정의하고, 모델 인스턴스를 통해 테이블의 레코드를 조작할 수 있게 해줍니다. 이를 통해 SQL 쿼리를 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있습니다. 이는 데이터베이스 작업을 보다 효율적이고 오류를 적게 만들어 줍니다.
2. Post 모델 정의
‘Post’ 모델은 블로그 게시글을 나타냅니다. 이 모델은 제목, 내용, 작성일, 작성자 등의 필드를 포함합니다. 다음은 ‘Post’ 모델의 기본 구조입니다.
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_date = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
여기서 ‘CharField’는 글자 수가 제한된 텍스트를, ‘TextField’는 긴 텍스트를 나타냅니다. ‘DateTimeField’에 ‘auto_now_add=True’ 옵션을 주면 게시글이 생성된 시점의 시각이 자동으로 저장됩니다. ‘ForeignKey’는 다른 모델에 대한 참조(여기서는 작성자)를 나타냅니다.
3. Comment 모델 정의
‘Comment’ 모델은 각 게시글에 달리는 댓글을 나타냅니다. 이 모델은 댓글 내용과 해당 댓글이 속한 게시글의 참조를 포함합니다. 다음은 ‘Comment’ 모델의 기본 구조입니다.
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
‘ForeignKey’를 사용하여 ‘Comment’ 모델이 ‘Post’ 모델에 연결되는 것을 볼 수 있습니다. 이는 ORM의 핵심 기능 중 하나로, 관계형 데이터베이스의 테이블 간 관계를 객체 지향적으로 표현할 수 있게 해줍니다.

4. 앱 등록하기
새로 생성한 ‘myapp’ 앱을 장고 프로젝트에 등록해야 합니다. 이렇게 하면 장고가 앱의 존재를 인식하고, 모델을 데이터베이스와 연결할 수 있습니다. 앱을 등록하려면 ‘config/settings.py’ 파일을 열고 ‘INSTALLED_APPS’ 설정에 앱의 구성 클래스를 추가합니다. 다음은 ‘myapp’ 앱을 등록하는 방법입니다.
INSTALLED_APPS = [
'myapp.apps.MyappConfig', # 이 부분 추가
'django.contrib.admin',
'django.contrib.auth',
...
]
‘myapp.apps.MyappConfig’는 ‘myapp’ 앱의 설정 클래스를 가리킵니다. 이 클래스는 ‘myapp/apps.py’ 파일에 정의되어 있으며, 장고에 앱의 존재와 구성을 알려주는 역할을 합니다. 이렇게 앱을 등록한 후에는 장고 프로젝트가 앱의 모델을 인식하고, 관련된 데이터베이스 테이블을 생성할 준비가 됩니다.

5. 데이터베이스 테이블 생성하기
모델을 정의한 후, 실제 데이터베이스에 테이블을 생성하기 위해 장고의 마이그레이션 시스템을 사용합니다. 먼저, python manage.py makemigrations
명령어를 실행하여 모델 변경사항에 대한 마이그레이션 파일을 생성합니다. 이 파일은 모델의 변경사항을 데이터베이스 스키마 변경으로 변환하는 역할을 합니다. 그 후, python manage.py migrate
명령어를 사용하여 실제 데이터베이스에 테이블을 생성합니다. 다음은 이 과정을 수행하는 명령어입니다.
python manage.py makemigrations
python manage.py migrate
이 명령들을 실행하면, 장고는 모델의 정의를 바탕으로 데이터베이스 스키마를 생성하거나 업데이트합니다. 이 과정을 통해 ‘myapp’ 앱의 ‘Post’와 ‘Comment’ 모델에 해당하는 테이블이 데이터베이스에 생성됩니다. 이제 이 테이블들을 사용하여 데이터를 저장하고 조회할 수 있습니다.

▼ DB Browser for SQLite 에서 테이블 생성 확인

☞ 이 글을 통해 장고의 모델과 ORM에 대한 기본적인 이해를 얻을 수 있으며, 이는 장고로 데이터 중심의 웹 애플리케이션을 개발하는 데 필수적인 지식입니다.
관련 이전 게시글
이 글이 도움이 되셨다면 공유 부탁드립니다!