서론
요구사항 분석 및 기능 도출
데이터 모델링
이번 글에서는 요구사항을 분석해 서비스에 필요한 기능을 도출하고, 백엔드 개발의 첫 단계라고 할 수 있는 데이터 모델링을 진행해보겠습니다.
일정(To-do)을 생성, 열람, 갱신, 삭제할 수 있다.
일정의 순서를 변경할 수 있다.
일정에 태그(or 라벨)을 부여해 그룹을 만들 수 있다.
일정을 검색하거나, 필터링할 수 있다.
일정에 알람 기능을 설정할 수 있다.
일정에 메모를 남길 수 있다.
채용공고를 일정에 추가할 수 있다.
자신의 개인정보를 변경할 수 있다.
사용자 회원가입 및 인증 / 인가
일정 CRUD
일정 검색 기능
일정 알람 기능
채용공고 열람 기능
채용공고 일정 추가 기능
User: 서비스 사용자
Task: 사용자가 등록한 일정
priority: 화면에 출력될 순서
status: [미진행 / 진행 중 / 완료]
Tag: 일정에 부여되는 태그
TaskTagRelation: 일정과 태그 간의 매개 테이블
Alarm: 일정에 설정되는 알람
Job: 사람인 API를 활용해 가져올 채용공고
python manage.py startapp todo
: todo 리스트 기능을 제공하는 app 생성
url 등록
projectname/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('todo/', include('todo.urls')),
]
todo/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name = "index"),
]
"todo/"로 들어오는 요청은 todo app의 urls.py에서 처리
todo/models.py
from django.db import models
from django.contrib.auth.models import User
class Task(models.Model):
class statusType(models.TextChoices):
INCOMPLETE = "incomplete", "미진행"
ONGOING = "ongoing", "진행 중"
COMPLETE = "complete", "완료"
title = models.CharField(max_length = 255)
description = models.TextField()
due_date = models.DateField()
priority = models.IntegerField()
status = models.CharField(choices = statusType.choices, max_length = 32)
memo = models.CharField(max_length = 255)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
def __str__(self):
return self.title
class Meta:
db_table = "task"
class Tag(models.Model):
task_set = models.ManyToManyField(to = "Task", through = "TaskTagRelation")
name = models.CharField(max_length = 255)
class Meta:
db_table = "tag"
class TaskTagRelation(models.Model):
task = models.ForeignKey(to = "Task", null = False, on_delete = models.CASCADE)
tag = models.ForeignKey(to = "Tag", null = False, on_delete = models.CASCADE)
class Meta:
db_table = "task_tag_relation"
class Alarm(models.Model):
task = models.ForeignKey(to = "Task", null = False, on_delete = models.CASCADE)
alarm_datetime = models.DateTimeField()
projectname/settings.py
INSTALLED_APPS = [
...
'todo.apps.TodoConfig',
]