[PlanTo # 2] 기능 도출 및 데이터 모델링

이원진·2023년 7월 5일
0

Planto

목록 보기
2/9
post-thumbnail
post-custom-banner

목차


  1. 서론

  2. 요구사항 분석 및 기능 도출

  3. 데이터 모델링

0. 서론


이번 글에서는 요구사항을 분석해 서비스에 필요한 기능을 도출하고, 백엔드 개발의 첫 단계라고 할 수 있는 데이터 모델링을 진행해보겠습니다.

1. 요구사항 분석 및 기능 도출


요구사항 분석(사용자)

  • 일정(To-do)을 생성, 열람, 갱신, 삭제할 수 있다.

  • 일정의 순서를 변경할 수 있다.

  • 일정에 태그(or 라벨)을 부여해 그룹을 만들 수 있다.

  • 일정을 검색하거나, 필터링할 수 있다.

  • 일정에 알람 기능을 설정할 수 있다.

  • 일정에 메모를 남길 수 있다.

  • 채용공고를 일정에 추가할 수 있다.

  • 자신의 개인정보를 변경할 수 있다.

기능 도출

  • 사용자 회원가입 및 인증 / 인가

  • 일정 CRUD

  • 일정 검색 기능

  • 일정 알람 기능

  • 채용공고 열람 기능

  • 채용공고 일정 추가 기능

2. 데이터 모델링


ERD

  • User: 서비스 사용자

  • Task: 사용자가 등록한 일정

    • priority: 화면에 출력될 순서

    • status: [미진행 / 진행 중 / 완료]

  • Tag: 일정에 부여되는 태그

  • TaskTagRelation: 일정과 태그 간의 매개 테이블

  • Alarm: 일정에 설정되는 알람

  • Job: 사람인 API를 활용해 가져올 채용공고

    • 별도의 로직을 통해 일정(Task)으로 변환 예정

Django App 생성

  • 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에서 처리

Django 모델링

  • 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',
    ]
    • settings.py에 todo app 등록
post-custom-banner

0개의 댓글