본문 바로가기
개발 관련/데이터베이스 설계

[ERD 설계] 인스타그램 - ERD 설계

by domo7304 2022. 4. 7.

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

 

ERDCloud

 

www.erdcloud.com

해당 링크로 들어가서 instagram을 클릭하면 ERD 를 확인할 수 있다.

완성된 ERD

구현에서 우선시 해야할 것들을 최대한 작게 가져가면서 ERD를 생각했더니 확실히 더 작은 규모의 ERD 가 나온 것 같다. 자료형, null 허용 여부나 데이터의 생성, 수정시간 등은 구현하며 정해주면 되므로 굳이 ERD 에 모두 넣지는 않았다.

'개발 관련 > 데이터베이스 설계' 카테고리의 다른 글

[ERD 설계] 오늘의집 - ERD 설계  (1) 2022.01.07

댓글