어느 정도 기능 구현이 되고나서 push notification에 대한 스키마 설계를 시작하게 되었다.
notification 스키마에는 최소 다음과 같은 내용이 포함되어야한다.
💡 Notification Level
알림의 목적과 중요도에 따라 나뉘는 알림 레벨
- Level 1. 가장 높은 단계의 알림으로 아래의 사진처럼 실시간으로 푸시알림이 뜨는 것
- Level 2. 실시간 푸시 알림은 가지 않지만 앱의 뱃지에 표시되는 알림
- Level 3. 가장 낮은 레벨의 알림으로 실시간 알림, 뱃지 표시 모두 없이 알림 센터에서만 확인할 수 있는 알림
읽음 여부를 나타내는 컬럼으로 처음엔 is_open
과 같은 필드를 추가하려고 했는데, 그렇게 되면 Notification 도큐먼트에 대한 의존성이 높아져 읽음 여부를 판단하기 위해 해당 도큐먼트를 계속 조회/수정해야한다.
따라서 읽음 여부는 알림 생성 날짜
로 판단하기로 했다. 유저 정보에 last_notification_read_datetime
과 같은 필드를 추가하여 유저가 마지막으로 알림을 확인한 날짜가 언제인지를 관리하는 것이다. 이로써 알림 센터에는 last_notification_read_datetime
이 알림 생성 날짜보다 이전이라면 안읽음, 이후라면 읽음으로 처리할 수 있다.
해당 알림이 누구에 의해 어떤 대상에게 보내졌는지에 대한 정보는 별도의 컬렉션으로 관리하여 notification에는 최대한 원소성을 해치지 않도록 하였다. (알림에 필요한 정보라기보다는 로그 개념에 더 가깝다고 판단했다.)
이제 위의 내용을 바탕으로 알림을 위한 별도 서버 운영 또는 카프카로 알림 인프라를 셋팅할 예정인데 이 부분 다음 포스팅에서 다뤄보도록 하겠다!