Django는 웹 애플리케이션을 신속하게 개발할 수 있도록 설계된 고수준의 파이썬 웹 프레임워크입니다. Django의 핵심 특징 중 하나는 ORM(Object-Relational Mapping)을 통한 간편한 데이터베이스 작업입니다. 이 글에서는 Django 모델 생성과 마이그레이션 과정을 자세히 설명하고, 예제 코드를 통해 이해를 돕겠습니다.
1. Django 모델이란?
모델은 Django의 데이터베이스 구조를 정의하는 클래스입니다. 모델은 데이터베이스의 테이블을 나타내며, 클래스의 속성은 테이블의 필드를 나타냅니다. Django의 ORM을 통해 모델 클래스를 사용하면 SQL 쿼리를 직접 작성하지 않고도 데이터베이스에 접근할 수 있습니다.
1.1 모델 정의 예제
간단한 블로그 애플리케이션을 위한 ‘Post’ 모델을 정의해 보겠습니다. 이 모델은 블로그 게시글의 제목, 내용, 작성자, 작성일 등의 정보를 포함합니다.
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200) # 제목 필드
content = models.TextField() # 내용 필드
author = models.CharField(max_length=100) # 작성자 필드
created_at = models.DateTimeField(auto_now_add=True) # 작성일 필드
def __str__(self):
return self.title # 객체의 문자열 표현
2. 모델 생성 과정
모델을 정의한 후, 해당 모델을 데이터베이스에 반영하기 위해 마이그레이션(migration) 과정을 거쳐야 합니다. 마이그레이션은 모델을 데이터베이스 테이블로 변환하는 과정입니다.
2.1 앱 생성
먼저 Django 프로젝트에 앱을 만들어야 합니다. 앱은 Django 프로젝트 내에서 특정 기능을 수행하는 모듈입니다. 터미널에서 아래 명령어를 실행하여 ‘blog’라는 이름의 앱을 생성합니다.
python manage.py startapp blog
2.2 모델 등록
생성한 앱의 models.py
파일에 ‘Post’ 모델을 추가한 후, Django 프로젝트의 settings.py
파일에 앱을 등록해야 합니다.
# settings.py 파일 수정
INSTALLED_APPS = [
# ...
'blog',
]
3. 마이그레이션 생성
모델을 정의하고 앱을 등록하면, 다음으로는 마이그레이션 파일을 생성해야 합니다. 마이그레이션 파일은 모델과 데이터베이스 스키마 간의 차이를 나타내는 파일입니다. 터미널에서 아래와 같은 명령어를 실행합니다.
python manage.py makemigrations
3.1 마이그레이션 확인
마이그레이션을 성공적으로 생성하면 blog/migrations
폴더에 새 파일이 생성된 것을 확인할 수 있습니다. 이 파일은 모델의 변경 사항을 기록하며, 데이터베이스에 적용될 SQL 문을 포함하고 있습니다.
4. 마이그레이션 적용
마이그레이션 파일이 생성된 후, 이 파일을 데이터베이스에 적용하여 테이블을 생성합니다. 다음 명령어를 입력합니다.
python manage.py migrate
4.1 마이그레이션 확인
마이그레이션이 잘 적용되었는지 확인하기 위해 Django 셸에 진입하고, 모델을 가져와 쿼리를 실행해 볼 수 있습니다.
python manage.py shell
from blog.models import Post
# 데이터베이스에 Post 테이블이 생성되었는지 검증
print(Post.objects.all())
5. 데이터 추가 및 조회
마이그레이션이 완료되면, 데이터를 데이터베이스에 추가하고 조회할 수 있습니다. 아래처럼 Django 셸에서 데이터를 추가해보겠습니다.
post = Post(title='첫 번째 게시글', content='안녕하세요, 이것은 첫 번째 게시글입니다.', author='홍길동')
post.save() # 데이터베이스에 저장
# 모든 Post 객체 조회
all_posts = Post.objects.all()
print(all_posts)
6. 마이그레이션의 역할
마이그레이션은 개발 과정에서 데이터베이스 스키마를 쉽게 관리할 수 있게 도와줍니다. 새로운 필드를 추가하거나 기존 필드를 수정할 때마다 마이그레이션을 수행하여 데이터베이스 상태를 일관되게 유지할 수 있습니다.
6.1 모델 수정 후 마이그레이션
예를 들어, ‘Post’ 모델에 ‘게시글 공개 여부’를 나타내는 ‘is_published’ 필드를 추가한다고 가정해보겠습니다. 다음과 같이 모델을 수정한 후, 다시 마이그레이션을 진행합니다.
class Post(models.Model):
# 기존 필드...
is_published = models.BooleanField(default=True) # 공개 여부 필드
변경 후 마이그레이션 파일을 생성하고 적용합니다.
python manage.py makemigrations
python manage.py migrate
7. 데이터베이스 관리
Django는 SQLite, PostgreSQL, MySQL 등 다양한 데이터베이스를 지원합니다. 데이터베이스를 설정하기 위해 settings.py
파일의 DATABASES
설정을 수정해야 합니다.
7.1 PostgreSQL 설정 예시
PostgreSQL 데이터베이스를 사용하는 경우, settings.py
에서 다음과 같이 설정합니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
8. 결론
이 글에서는 Django에서 모델을 생성하고 마이그레이션하는 과정에 대해 자세히 설명했습니다. Django의 ORM을 활용하면 데이터베이스 작업을 쉽고 효율적으로 수행할 수 있습니다. 앞으로 다양한 모델을 생성하고, 어플리케이션을 확장해 나가는 과정에서 마이그레이션의 중요성을 깨닫게 될 것입니다.
더 나아가, Django의 강력한 기능인 Admin 인터페이스, Serializer, Form 등을 배워가며 데이터 처리를 더욱 간편하게 할 수 있습니다. Django를 통해 웹 개발의 다양한 영역을 탐험하시길 바랍니다!