NoSQL 넷플릭스 데이터모델링

김익현·2022년 8월 23일
0

wecode

목록 보기
33/35
post-thumbnail

내맘대로 생각해서 만들어본 넷플릭스 모델링

1. 넷플릭스가 무슨 서비스를 제공하는가?

  • DVD 영상 대여 및 판매 / 온라인 스트리밍서비스 ( OTT )
  • 프로필별 시청기록을 바탕으로 맞춤 동영상 추천
  • 기기별 맞춤 스트리밍

2. 각 부분 데이터 기록

  • 유저 부분
    • 아이디, 비밀번호, 전화번호, 구독 등급, 신용카드 정보, 핸드폰번호
  • 프로필 부분
    • 이름, 섬네일이미지, 관람연령, 자동재생여부, 언어, 시청기록, 찜한 콘텐츠
  • 비디오 부분
    • 타이틀, 줄거리 요약, 등급, 배우, 장르, 시즌개수, 시즌 회차별 줄거리요약, 시즌 회차별 재생시간

3. 데이터 NoSQL식으로 만들어보기 ( 문서형식 )

유저 부분

{
	"_id": 12321412,
  "password": "asdasda@123",
  "email": "ikkim01@gmail.com",
  "phone": "010-3378-4331",
  "credit_card": "1234-1234-1232-1234",
  "membership": "standard"
}

프로필 부분

{
	"name": "이켠",
  "thumbnail_images": "https://www.images.com",
  "age": "all",
  "autoPlay": true,
  "language": "KOR",
  "watching_history": [
        {
          "video_id": 21314231, //FK
          "season": 1,
          "episode": 4,
          "watching_time": 34,
          "device": "mobile"
        },
        {
          "video_id": 2131412331,
          "season": 3,
          "episode": 1,
          "watching_time": 32,
          "device": "PC"
        }
      ],
    "wish_video": [{ "video_id": 2131412331 }, { "video_id": 2131412331123 }]
}

비디오 부분

[
	{
    "_id": 453564,
    "title": "기묘한 이야기",
    "type": "series",
    "release_date": "2022-08-08",
    "subtitle": "인디애나주의 작은 마을에서 행방불명된 소년. 이와 함께 미스터리한 힘을 가진 소녀...",
    "age": 15,
    "actor": [
      { "actor_id": 982312 },
      { "actor_id": 923812 },
      { "actor_id": 923823 }
    ],
    "genre": [
      { "Genre_id": "SF" },
      { "Genre_id": "Teen" },
      { "Genre_id": "Horror" }
    ],
    "_seasons": {
      "season_1": [
        {
          "_id": 21314123,
          "name": "윌 바이어스의 실종",
          "image": "https://images.com",
          "description": "이 이야기는 ...",
          "duration": 46
        },
        {
          "_id": 21314123,
          "name": "윌 바이어스의 실종",
          "image": "https://images.com",
          "description": "이 이야기는 ...",
          "duration": 46
        }
      ],
    }
  },
]

4. 잘못생각한 부분 파악 ( FireStore 기준 )

  • 이 화면에서 시청기록 및 찜한 컨텐츠 내용을 불러올 필요가 있나??
  • 내 시청기록과 비디오 장르를 어떻게 비교하여 보여줄 것인가??
  • NoSQL은 데이터 저장은 싸지만 데이터를 불러오고 열람할때 돈이 든다!! ( 최대한 덜 열람 )

5. 재 모델링 ( 컬랙션과 문서 기준 )

ex)유저정보 컬랙션 > 유저 문서 1, 유저 문서 2, 유저 문서 3 … > 유저 1의 프로필들 컬랙션 > 프로필 1 문서, 프로필 2 문서, 프로필 3 문서… > 프로필 1의 시청기록 컬랙션 > 시청기록 1 문서, 시청기록 2 문서, …

느낀점

  • 프론트 개발자로서 데이터베이스를 구성해본다는게 쉽지 않았다😢
  • 넷플릭스는 와이드컬럼스토어 유형을 주로 쓴다고 하는데 문서 유형으로 짜보려니 힘들었다…
  • 이제 살짝 데이터 구조가 눈에 보이기 시작!! 화이팅🔥
profile
놀땐 화끈하게 놀고, 할땐 부끄럽지않게 확실하게 하자!!

0개의 댓글