-
Notifications
You must be signed in to change notification settings - Fork 0
험난한 ERD 그리기
- 사용자는 email, password를 이용해 회원가입/로그인 할 수 있다.
- 사용자는 kakao 소셜 로그인을 통해 회원가입/로그인 할 수 있다.
- 이후에 naver, google 로그인 등을 추가할 수 있다.
- 확장 가능성을 위해
oauth_provider
테이블을 분리 - 자체 회원가입 유저와 일단 하나의 user 테이블에 저장하게 되어 oauth_provider_id가 null인지 여부로 자체 회원가입과 소셜 회원가입 사용자를 구분한다.
- 사용자는 다른 사용자를 팔로우할 수 있다.
- 사용자는 여러 그룹에 속할 수 있다.
- 한 명의 사용자는 여러 그룹에 속할 수 있고, 하나의 그룹에는 여러 사용자가 속할 수 있다.
- N:M 관계를 표현하기 위해 중간에
user_group
이라는 junction table 추가
- 사용자는 프로필 사진을 설정할 수 있다.
- 사진과 같은 컨텐츠의 경우 사용자의 프로필, 그룹의 대표 이미지, 피드의 첨부파일 등 여러 곳에서 재사용할 수 있도록
content
테이블로 분리 - user 테이블은 profile_id라는 이름으로 content 테이블의 id를 fk로 갖는다.
- 사용자의 정보를 조회할 때 프로필 사진의 링크를 얻기 위해 content 테이블을 join하여 path를 불러오도록 한다.
- 사진과 같은 컨텐츠의 경우 사용자의 프로필, 그룹의 대표 이미지, 피드의 첨부파일 등 여러 곳에서 재사용할 수 있도록
사용자와 그룹은 각각 하나의 calendar
를 갖는다.
현재는 그룹 기능이 존재하지 않아 event_member에서 사용자의 일정을 불러오기 때문에 calendar를 사용하고 있지 않지만 그룹 기능이 추가되면 그룹의 일정을 불러오는데 사용될 것 같다.
일정에 필요한 내용들은 아래와 같다.
- 제목
- 시작일, 종료일
- 참여 가능 여부
- 일정 공지
- 반복 설정
- 반복 주기 / 반복 빈도 / 반복 종료일
- 색
- 메모
- 공개 여부
우리의 서비스에서 일정은 소유자 본인만의 것이 아니라 다른 사람들도 일정 멤버로 초대하거나 참여할 수 있다.
이렇게 일정을 공유하게 되면서 일정 소유자만이 수정하고 설정할 수 있는 속성
과 일정 멤버 각자가 개인별로 설정할 수 있는 속성
두 가지로 나뉘게 되었다.
-
일정 소유자만이 설정 가능
- 제목
- 시작일
- 종료일
- 참여 가능 여부
- 일정 공지
- 반복 설정
-
일정 멤버 개인별 설정 가능
- 색
- 메모
- 공개 여부
이렇게 나뉜 두 속성을 하나의 event 테이블에 저장하게 된다면, 일정에 참여하는 사용자마다 event 테이블에 새로운 레코드가 추가될 것이다. 이 경우 중복된 데이터가 많아지고 일정 소유자가 일정의 제목이나 날짜와 같은 주요 속성을 수정했을 때 각각의 일정 멤버들의 event까지 찾아서 하나하나 수정해줘야 한다.
⇒ 개인 별로 설정 가능한 속성은 따로 빼자!
그렇게 event
테이블과 detail
테이블로 분리되었다!
추가적으로 일정에 참여한 사람이 누구누구인지, 누가 소유자이고 누가 참여자인지, 어떤 detail을 갖고 있는지 등을 저장하기 위한 event_member
테이블이 추가되었다.
- event
- 일정 소유자만이 설정 가능한 일정 내용으로 일정 멤버들과 공유된다.
- detail
- 개인별로 설정 가능한 일정 내용
- event_member
- event - user - detail을 모두 연결
- 해당 user의 authority (OWNER/MEMBER)
MeetMeet은 반복 일정도 지원한다!
하나의 반복 일정은 같은 반복임을 알고 있어야 하기에 반복 시작, 종료일, 반복 주기에 대한 정보를 갖고 있는 repeat_policy
테이블을 추가하고 repeat_policy의 id를 fk로 event
테이블에 추가해줬다.
마지막으로 일정에 초대하면 초대 받은 사용자에게 푸시알림이 가고 해당 알림을 통해 일정 초대를 수락하거나 거절할 수 있다.
⇒ 누가(sender), 누구를(receiver), 어떤 이벤트에(event) 초대했는지 알아야 하고, 해당 초대가 수락되었는지 거절되었는지 여부(status)를 알아야 한다.
fcm 알림을 구현하며 알림의 상태를 저장해야할 필요성을 느껴 아래와 같이 알림 상태를 6가지로 나타내는 status
테이블을 추가하게 되었다.
- 일정에는 피드를 작성할 수 있고, 피드에는 이미지, 동영상을 업로드하고 글을 작성할 수 있다.
- 피드 하나에 이미지와 동영상이 최대 10개까지로 여러 개 올라간다.
-
content
테이블은 위에서 말했다시피 사용자 프로필, 피드, 그룹 이미지 등 여러 곳에서 재사용할 수 있도록 하기 위해 따로 만들어두었기에feed_content
테이블을 추가했다.
- 피드에는 댓글을 작성할 수 있다.
- Week1 - Day01
- Week1 - Day02
- Week1 - Day03
- Week1 - Day04
- Week2 - Day01
- Week2 - Day02
- Week2 - Day03
- Week2 - Day04
- Week3 - Day01
- Week3 - Day02
- Week3 - Day03
- Week3 - Day04
- Week4 - Day01
- Week4 - Day02
- Week4 - Day03
- Week4 - Day04
- Week4 - Day05
- Week5 - Day01
- Week5 - Day02
- Week5 - Day03
- Week5 - Day04
- Week6 - Day01
- Week6 - Day02