UMC 2기 4주차 과제로 인스타그램 데이터베이스 설계를 하게 되었다. 과정의 경우, 이전에 작성했던 '오늘의집 - ERD 설계' 때와 마찬가지로 요구사항 분석 (최종적으로 어느 기능까지 구현하고자 할 것인지)을 토대로 논리적 데이터 모델링을 진행했다.
1. 요구사항 분석하기
- 회원가입은 전화번호 or 이메일로 본인인증을 거친다.
- 본인인증 후 이름, 비밀번호를 입력한다. (비밀번호는 6자 이상, 숫자/영문/특수기호 포함)
- 생일을 추가하면 회원가입 완료 (만 14세 이상을 확인, 광고 개인화 등의 목적을 가짐)
- (프로필사진, 이름, 닉네임, 웹사이트, 소개) 는 '오픈 프로필' 에 해당, (이메일, 전화번호, 성별, 생일) 은 '개인정보' 에 해당. 이 중 사용자 이름, 전화번호만 필수항목
- 회원끼리는 팔로워 - 팔로잉 관계가 존재한다.
- 마이페이지는 (닉네임, 프로필사진, 게시물 수, 팔로워 수, 팔로잉 수, 이름, 소개, 각 게시물의 첫 번째 이미지) 가 포함된다. ('스토리' 기능은 일단 배제)
- 프로필 편집에서는 (프로필사진, 이름, 닉네임, 웹사이트, 소개) 를 수정할 수 있다.
- 개인정보 설정에서는 (이메일, 전화번호, 성별, 생일) 을 수정할 수 있다.
- 게시물 작성에는 (본문, 회원태그, 위치, 이미지들) 이 포함된다. ('다른 미디어에도 게시', '고급 설정' 기능은 배제)
- 게시물 작성 - 사람 태그하기에서는 닉네임으로 검색하여 일치하는 회원을 보여주고, 선택할 수 있다. 태그는 여러 회원을 지정할 수 있다.
- 게시물 작성 - 위치 태그에서는 검색어와 일치하는 장소를 보여주고, 선택할 수 있다. (일단은 정확한 위치가 아니더라도 텍스트로 입력할 수 있게만 구현)
- 노출되는 게시물에는 (프로필사진, 닉네임, 게시물 첫 번째 이미지, 좋아요 수, 본문, 사람태그, 위치, 해시태그들) 이 포함된다.
- 게시물 본문을 클릭 시 본문과 댓글이 보인다.
- 댓글에는 (프로필사진, 닉네임, 댓글내용, 태그된 유저, 댓글 좋아요, 대댓글 여부) 가 포함된다.
- 좋아요에는 좋아요를 누른 회원들의 (프로필사진, 닉네임, 이름, 팔로우/팔로잉 여부) 가 포함된다. (팔로잉 중이라면 '팔로잉', 아니라면 '팔로우' 버튼으로 보임)
- 활동에서는 '좋아요' 활동만 구현. 좋아요의 생성일자를 기준으로 오늘, 이번 주, 이번 달에 해당하는 활동을 보여준다. ('회원님이 알 수도 있는', '~님이 사진 ~장을 공유했습니다' 등의 소식형 활동 일단 배제)
- 활동 노출 문구에는 (닉네임, 좋아요 수, 해당하는 게시물 첫 번째 사진, 업로드로부터 지난 시간) 이 포함된다. (지난 시간의 경우 분, 시간, 일, 주 단위로 표현)
정리하자면
- 마이페이지 - 홈, 프로필 편집, 개인정보 수정
- 메인페이지 - 게시물 노출
- 게시물작성
- 활동
위 화면에 대한 데이터베이스를 만들고 API 를 구현할 예정이다.
2. Entity, Attribute 뽑아내기
맨 처음 나열하였던 이미지들을 토대로, Entity 와 Attribute 들을 정의한다. 표를 정리하며 PK, FK, Relation 도 고려하여 작성하였다. Attribute 에 파란색 글씨가 FK 에 해당하며, Entity 의 파란색 글씨는 n:m 관계를 풀기 위한 mapping table 역할을 한다.
Entity | Attribute |
user | 회원 id, 이메일, 비밀번호, 휴대폰번호, 성별, 생일, 이름, 닉네임, 웹사이트, 소개, 프로필이미지 |
post | 게시글 id, 본문, 위치태그, 회원 id |
comment | 댓글 id, 댓글 내용, 부모댓글 id, 회원 id, 게시글 id |
image | 이미지 id, 이미지이름, 게시글 id |
hashtag | 해시태그 id, 해시태그이름 |
post_hashtag | 테이블 id, 게시글 id, 해시태그 id |
user_post_like | 테이블 id, 회원 id, 게시글 id |
user_comment_like | 테이블 id, 회원 id, 댓글 id |
follow | 테이블 id, 팔로잉 id, 팔로워 id |
user_post_tag | 테이블 id, 회원 id, 게시글 id |
user_comment_tag | 테이블 id, 회원 id, 댓글 id |
user : post = 1 : n
user : comment = 1 : n
user : user_post_like = 1: n
user : user_comment_like = 1 : n
user : follow = n : m
user : user_post_tag = 1 : n
user : user_comment_tag = 1 : n
post : comment = 1 : n
post : image = 1 : n
post : post_hashtag = 1 : n
post : post_like = 1 : n
post : user_post_tag = 1 : n
comment : user_comment_like = 1 : n
comment : user_comment_tag = 1 : n
테이블을 관계들을 늘어쓰자면 위와 같이 쓸 수 있다.
https://www.erdcloud.com/u/domo7304
해당 링크로 들어가서 instagram을 클릭하면 ERD 를 확인할 수 있다.
구현에서 우선시 해야할 것들을 최대한 작게 가져가면서 ERD를 생각했더니 확실히 더 작은 규모의 ERD 가 나온 것 같다. 자료형, null 허용 여부나 데이터의 생성, 수정시간 등은 구현하며 정해주면 되므로 굳이 ERD 에 모두 넣지는 않았다.
'개발 관련 > 데이터베이스 설계' 카테고리의 다른 글
[ERD 설계] 오늘의집 - ERD 설계 (1) | 2022.01.07 |
---|
댓글