728x90
반응형
알림 서비스 설계
우리는 왜 알림 서비스가 필요한 이유.
많은 서비스들은 OTP, Email, SMS 등을 통해 알림 서비스를 사용중 이다.
- 금융기관: 사용자에게 비용에 관한 정보 제공.
- 이커머스: 사용자에게 주문에 관한 정보 혹은 구독 서비스 등에 대한 정보 제공
- 플랫폼: 사용자에게 구독, 뉴스, 정보 등에 대한 정보 제공.
기능 요구사항
- 구독한 사용자에게 알림을 보낼 수 있어야 한다.
우선순위
알림이 가능해야 한다.OTP
같은 경우 시간 이슈가 있기 때문에높은 우선 순위
로 고려 되어야 한다.
반대로, 뉴스 등은 낮은 우선 순위로 되어도 된다.Email, SMS, Mobile, Web, Hook
등 알림이 가능 해야 한다.Single/Bulk
로 처리할 수 있는 기능이 있어야 한다.- 같은 알림을 두번 보내지 않는다.
- 모든 알림
결과에 대해서 모두 로깅
를 한다.
(보낸, 열린, 취소, 실패 등)
인프라 요구사항
고가용성
의 구조를 가져야 한다.지연은 최소화
되어야 한다. 특히 OTP 같은 경우.- On-Premise 혹은 Cloud 환경, 모두 유연한 구조로
확장에 유연
하며스케일링
을 할 수 있어야 한다.- On-Premise 경우 VMWare 같은 가상화 이용
수용량 평가
알림 서비스는 단순히 알림만 보내는 기능 뿐만 아니라 회사의 전체 서비스에 대한 규모도 생각 해야 한다.
큰 기업의 같은 경우 몇백만개의 알림을 매일 처리하는 경우도 있다.
예를 들어 FaceBook은 2억명의 유저를 가지고 있는데,
25%가 Active 유저고 그 중 25%만 알림을 허용 했다 가정한다면
1250만 명의 유저에게 알림을 보내야 한다.
1250 만 / 24 / 3600 = 1446
. 즉 매초 1446개의 알림을 처리할 수 있어야 한다.
High-Level 서비스
- IOS 알림 경우, APNs 를 사용할 수 있다.
- Android 알림 경우, GCM(Google Cloud Messaging)을 사용할 수 있다.
- Email 경우, Mailchimp, Getresponse, Active Campaign, stibee 등
- SMS 경우, Twilio, Gabia, SMSTO 등
System Design
알림 Service
로 요청 데이터를 전달해 줄Service
가 있어야 하며Micro-Service, Simple Worker implemented, Cron
등이 될 수 있다.알림 Service
는 알림을 보내고 받을 수 있어야 하며 DB의 유저 정보를 통해payload를 구성하여 Third-party Service를 통해 알림
을 보낼수 있어야 한다.UI/UX 혹은 Rest API로 서비스
를 할 수 있다.
Services
Simple Service
간단한 알림 요청에 대한 처리
Bulk Service
Bulk 알림 요청에 대한 처리
Scheduling Service
스케줄링된 알림 요청에 대한 처리
- Second, Minute, Daily, Weekly, ...
- 기타 정의한 스케줄링 룰
Templates
알림으로 보낼 내용은 OTP, SMS Email 등 상관없이 모두 보낼수 있어야 한다.
추천 Tech Stacks
Design Pattern
- Strategy
- Template
- Builder
- Factory
Infra
- Redis
- Kafka
- Docker
- Kubernetes
Database
MongoDB
- Entity 저장에 있어서 유연한 형태를 가지고 있다.
- Service 특성상 매우 많은 Insert가 발생할 것이고 Insert, Update 상황에서는
MySQL보다 MongoDB가 더 좋은 성능을 가지고 있다.(Select는 반대지만)
Ref
728x90
반응형
'IT' 카테고리의 다른 글
[Kubernetes] OpenLens 설치 (0) | 2023.01.09 |
---|---|
API, 서비스, 도메인 테스트 및 TDD 에서의 기어비 (0) | 2022.12.24 |
WEB RTC (0) | 2021.09.27 |
JWT (JSON Web Token) (0) | 2021.09.27 |
Jenkins Nexus Docker 연동하기 (0) | 2021.09.27 |