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 | 알림 송신자 |
|
String | 유저 고유 id |
|
String | 이름 |
|
String | 프로필 사진 url |
receiver | document | 알림 수신자 |
|
String | 유저 고유 id |
data | ||
|
String | 트윗 고유 id |
|
String | 트윗 내용 |
created_at | Date | document 생성 시간 |
device
_id | ObjectId | document 고유 id |
user_id | String | 유저 고유 id |
push_notification_opt | Boolean | 알림 설정 여부 (ON/OFF) |
token | document | 디바이스별 고유 token (FCM에서 발급) |
|
String | token 값 |
|
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