[내일배움캠프 Spring 4기 - 칸반보드 프로젝트] 77일차 TIL - 연관관계 없이 테이블 설계

서예진·2024년 3월 21일
0

오늘의 학습 코드

📕연관관계 없이 테이블 설계

  • 이번 프로젝트의 주제는 칸반보드이다. 트렐로를 많이 참고했다.
  • 필수 구현 사항은 다음과 같다.
  • 사용자 관리 기능
    • 로그인 / 회원가입 기능
    • 사용자 정보 수정 및 삭제 기능
  • 보드 관리 기능
    • 보드 생성
    • 보드 수정
      • 보드 이름
      • 배경 색상
      • 설명
    • 보드 삭제
      • 생성한 사용자만 삭제를 할 수 있습니다.
    • 보드 초대
      • 특정 사용자들을 해당 보드에 초대시켜 협업을 할 수 있어야 합니다.
  • 컬럼 관리 기능
    • 컬럼 생성
      • 보드 내부에 컬럼을 생성할 수 있어야 합니다.
      • 컬럼이란 위 사진에서 Backlog, In Progress와 같은 것을 의미해요.
    • 컬럼 이름 수정
    • 컬럼 삭제
    • 컬럼 순서 이동
      • 컬럼 순서는 자유롭게 변경될 수 있어야 합니다.
        • e.g. Backlog, In Progress, Done → Backlog, Done, In Progress
  • 카드 관리 기능
    • 카드 생성
      • 컬럼 내부에 카드를 생성할 수 있어야 합니다.
    • 카드 수정
      • 카드 이름
      • 카드 설명
      • 카드 색상
      • 작업자 할당
      • 작업자 변경
    • 카드 삭제
  • 카드 상세 기능
    - [ ] 댓글 달기
    - 협업하는 사람들끼리 카드에 대한 토론이 이루어질 수 있어야 합니다.
    - [ ] 날짜 지정
    - 카드에 마감일을 설정하고 관리할 수 있어야 합니다.

  • 나는 컬럼 관리 기능, 카드 관리 기능, 날짜 지정 기능을 맡았다.

📕연관관계 없이 테이블 설계


  • 이번 프로젝트에서는 @ManyToOne과 같은 어노테이션을 사용해서 연관관계를 매핑하는 방식이 아닌 연관관계를 끊고 진행해보자는 의견이 나왔다.
  • 원래의 그동안 진행했던 프로젝트에서는 어노테이션을 통해 객체를 참조했다.즉, Board 객체가 User 객체를 참조한다면 Board 객체안에는 @ManyToOne으로 User 객체가 존재한다.
  • 이번 프로젝트에서 진행하고자 하는 방식은 Board 객체는 User 객체를 참조하지만 UserId를 컬럼으로 가지고 있는 방식이다.
  • 어노테이션을 적용하는 방식은 강한 결합으로 객체 참조를 통한 탐색 방법과 객체를 삭제하고자 할 때, 연관된 객체가 먼저 삭제 되어야 삭제하고자 하는 객체를 삭제할 수 있다는 점이 비효율적이라고 생각했다. 애초에 객체를 참조하는 것은 제약 조건이기 때문이다.
  • 반면에, 참조하는 객체의 Id 값을 컬럼으로 가지고 있으면 약한 결합으로 repository를 통해서 탐색해야하며 객체를 삭제하고싶을 때 등 제한 조건이 없다.
  • 위와 같은 의논을 거쳐 완성된 ERD는 아래와 같다. 테이블 간의 선은 테이블 간의 관계를 이해하기 쉽게 하기 위해 그었다.

profile
안녕하세요

0개의 댓글