STOVE DEVCAMP 3기/알림 서비스

[알림 서비스] 알림 서비스 데이터베이스 설계

sw_develop 2023. 3. 10. 02:59

📌 선정 데이터베이스 및 이유

1) 선정 데이베이스 : MongoDB

2) 선정 이유

A. 알림 데이터가 문서 데이터베이스에 적합함

  • 하나의 알림 객체에서 데이터를 부분적으로 사용하는 경우가 없다.
  • 각 알림 데이터는 독립적으로, 중복되는 데이터가 없어 별도 정규화가 필요하지 않다.
  • schema-less 구조로 유연한 스키마 대응이 가능하다.
    • 알림 관련 스펙은 구조의 변경이 잦을 수 있음

B. TTL(time-to-live) 인덱스를 지원함

  • 특정 일자 이후의 알림은 보이지 않게 한다면, 알림 데이터를 모두 쌓아둘 필요는 없음

C. DB 인프라 팀에서 지원함

참고

https://engineering.linecorp.com/ko/blog/LINE-integrated-notification-center-from-redis-to-mongodb

3) MongoDB 내부 구성

버전

  • 5.0 (인프라팀에서 지원하는 MongoDB 데이터베이스 버전)

배포형태

  • default인 standalone 사용함
  • 하지만, 서비스 운영 시에는 적합하지 않아 레플리카 셋, 샤딩된 클러스터를 사용하는 것 권장함
  • 참고

스토리지 엔진

  • MongoDB 4.2 버전부터 MMAPv1 스토리지 엔진은 deprecated 됨
  • default로 WiredTiger 스토리지 엔진을 사용함

 

📌 데이터 모델링

  • 임베디드 방식을 사용해 sender, receiver, data, token 서브 도큐먼트를 임베디드시킴

notification

_id ObjectId document 고유 id
type String 알림 유형 (ex. 리트윗, 팔로잉, 멘션 등)
sender document 알림 송신자
  • id
String 유저 고유 id
  • name
String 이름
  • profile_pic_url
String 프로필 사진 url
receiver document 알림 수신자
  • id
String 유저 고유 id
data    
  • id
String 트윗 고유 id
  • content
String 트윗 내용
created_at Date document 생성 시간

device

_id ObjectId document 고유 id
user_id String 유저 고유 id
push_notification_opt Boolean 알림 설정 여부 (ON/OFF)
token document 디바이스별 고유 token (FCM에서 발급)
  • value
String token 값
  • timestamp
Date token 타임스탬프 (갱신 날짜)
created_at Date document 생성 시간
updated_at Date document 업데이트 시간

 

참고

https://meetup.nhncloud.com/posts/276

https://www.blog-dreamus.com/post/flo-tech-mongodb-%EB%8F%84%EC%9E%85%EA%B8%B0