[블로그 만들기 #1] - DRF로 API 서버 구축하기
2025. 12. 14. 22:24ㆍ📚 Django
📝 [BACK-1] DRF로 블로그 API 서버 구축
Django REST Framework를 활용한 개인 블로그 API 서버 만들기
Django
DRF
REST API
🎯 이번 목표
Django REST Framework를 활용하여 개인 블로그 서비스에 필요한 API 서버를 구축합니다. 카테고리, 게시글, 댓글 모델을 정의하고 데이터를 관리할 수 있는 기본 구조를 만들어봅니다.
⚙️ 프로젝트 초기 설정
1 .gitignore 생성
터미널
# gitignore.io 사이트에서 생성하거나
# 직접 생성
touch .gitignore
.gitignore
# 가상환경
venv/
# Django
*.pyc
__pycache__/
db.sqlite3
media/
# IDE
.vscode/
.idea/
2 가상환경 & Django 설치
터미널
# 가상환경 생성
python -m venv venv
# 가상환경 활성화 (Windows)
venv\Scripts\activate
# 가상환경 활성화 (Mac/Linux)
source venv/bin/activate
# Django 설치
pip install django
3 DRF 설치
터미널
# Django REST Framework 설치
pip install djangorestframework
4 Django 프로젝트 생성
터미널
# 프로젝트 생성
django-admin startproject blog_api_service .
# posts 앱 생성
python manage.py startapp posts
5 settings.py 설정
blog_api_service/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# DRF 추가
'rest_framework',
# posts 앱 추가
'posts',
]
🗄️ 모델 정의
블로그 서비스에 필요한 3가지 모델을 정의합니다: 카테고리(Category), 게시글(Post), 댓글(Comment)
📊 모델 스키마
Category (카테고리)
| 필드명 | 타입 |
|---|---|
PK |
PRIMARY KEY |
name |
Text(250) |
Post (게시글)
| 필드명 | 타입 |
|---|---|
PK |
PRIMARY KEY |
category |
Foreign Key |
title |
Text(100) |
content |
Text(250) |
created_at |
DateTime |
updated_at |
DateTime |
Comment (댓글)
| 필드명 | 타입 |
|---|---|
PK |
PRIMARY KEY |
post |
Foreign Key |
content |
Text(250) |
created_at |
DateTime |
모델 코드 작성
posts/models.py
from django.db import models
class Category(models.Model):
"""카테고리 모델"""
name = models.CharField(max_length=250)
def __str__(self):
return self.name
class Post(models.Model):
"""게시글 모델"""
category = models.ForeignKey(
Category,
on_delete=models.CASCADE,
related_name='posts'
)
title = models.CharField(max_length=100)
content = models.TextField(max_length=250)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
class Comment(models.Model):
"""댓글 모델"""
post = models.ForeignKey(
Post,
on_delete=models.CASCADE,
related_name='comments'
)
content = models.TextField(max_length=250)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'{self.post.title}의 댓글'
🔍 중요 코드 설명
1. ForeignKey 설정
on_delete=models.CASCADE- 부모 데이터 삭제 시 자식 데이터도 함께 삭제related_name='posts'- 역참조 이름 지정 (category.posts.all()로 접근 가능)
2. 자동 시간 필드
auto_now_add=True- 생성 시 자동으로 현재 시간 저장auto_now=True- 수정 시마다 자동으로 현재 시간 갱신
3. __str__ 메서드
- 관리자 페이지나 쉘에서 객체를 읽기 쉬운 형태로 표시
🔄 마이그레이션 실행
정의한 모델을 데이터베이스에 반영합니다.
터미널
# 마이그레이션 파일 생성
python manage.py makemigrations
# 데이터베이스에 적용
python manage.py migrate
✅ 마이그레이션 완료
모델이 성공적으로 데이터베이스에 반영되었습니다. 다음 단계에서는 Serializer와 ViewSet을 작성하여 API를 구현할 예정입니다.
🛠️ Admin 페이지 등록 (선택)
Django 관리자 페이지에서 데이터를 쉽게 관리하기 위해 모델을 등록합니다.
posts/admin.py
from django.contrib import admin
from .models import Category, Post, Comment
admin.site.register(Category)
admin.site.register(Post)
admin.site.register(Comment)
터미널
# 슈퍼유저 생성
python manage.py createsuperuser
# 서버 실행
python manage.py runserver
# http://127.0.0.1:8000/admin 접속
📁 현재 프로젝트 구조
프로젝트 구조
blog_api_service/
│
├── blog_api_service/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
│
├── posts/
│ ├── migrations/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py # ✅ 작성 완료
│ ├── tests.py
│ └── views.py
│
├── venv/
├── .gitignore
├── db.sqlite3
└── manage.py
'📚 Django' 카테고리의 다른 글
| [블로그 만들기 #3-2] - DRF의 DefaultRouter 완벽 이해하기 (0) | 2025.12.15 |
|---|---|
| [블로그 만들기 #3-1] - DRF의 ViewSet 완벽 이해하기 (0) | 2025.12.15 |
| [블로그 만들기 #3] - CORS (Django API와 Vue 연동) (1) | 2025.12.15 |