알림 시스템은 여러 서비스가 함께 쓰는 플랫폼입니다. 그래서 한 서비스의 발송이 다른 서비스의 알림을 밀어내는 것이 이 설계의 중심 문제입니다.
| 항목 | 값 |
|---|---|
| 대상 | 사내 공용 알림 플랫폼 |
| 채널 | 푸시, 메일, 문자 |
| 발송량 | 하루 5천만 건 (평균 초당 578) |
| 피크 | 피크 초당 1만 |
| 중요 알림 | 1분 안에 도착 시도 |
| 마케팅 알림 | 지연 허용 |
| 문자 | 건당 과금 |
| 중복 | 같은 알림을 두 번 보내지 않는다 |
| 수신 거부 | 반드시 지킨다 |
기능 요구사항과 범위 밖
| 구분 | 내용 |
|---|---|
| 이번에 만든다 | 채널별 발송, 우선순위, 수신 설정 확인, 중복 방지, 도달 추적 |
| 범위 밖 | 알림 내용 작성 도구, 발송 대상 추출, 사용자 행동 분석, 앱 안 알림 목록 |
발송 대상 추출을 뺀 것이 중요합니다. "30일 미접속 사용자에게" 같은 조건으로 대상을 뽑는 일은 각 서비스가 합니다. 우리는 받는 사람 목록과 내용을 받아 보내는 일만 합니다.
경계를 이렇게 그으면 우리 시스템이 사용자 데이터베이스를 알 필요가 없습니다.
평균과 피크가 17배 다르다
하루 5천만 건 은 평균 초당 578건입니다. 그런데 마케팅 발송이 시작되면 피크 초당 1만 이 됩니다.
폭주하는 쪽이 급하지 않은 알림이라는 것이 핵심입니다. 비밀번호 재설정 알림이 마케팅 100만 건 뒤에 줄을 서면 1분 안에 도착이라는 요구를 어깁니다.
그래서 급한 것과 급하지 않은 것을 같은 줄에 세우지 않습니다. 이 판단이 뒤의 큐 구조를 정합니다.
숫자가 정하는 것
| 조건 | 강제하는 것 |
|---|---|
| 평균 초당 578 | 처리량은 부담이 아니다 |
| 피크 초당 1만 | 받아 두고 나눠 보내야 한다 |
| 중요 알림 1분 | 우선순위를 나눠야 한다 |
| 문자 건당 과금 | 채널 선택이 곧 비용이다 |
| 중복 금지 | 정확히 한 번은 불가능하다. 감지로 다룬다 |
| 수신 거부 준수 | 발송 직전에 확인해야 한다 |
채널마다 성질이 다르다
한 시스템으로 세 채널을 다루지만 성질이 크게 다릅니다.
| 채널 | 비용 | 도달 | 길이 |
|---|---|---|---|
| 푸시 | 거의 없다 | 앱을 지우면 못 받는다 | 짧다 |
| 메일 | 거의 없다 | 스팸함으로 갈 수 있다 | 길어도 된다 |
| 문자 | 건당 과금 | 가장 확실하다 | 아주 짧다 |
같은 알림을 세 채널로 보내는 것이 기본이 아닙니다. 문자는 비싸고, 세 곳에서 같은 알림을 받으면 사용자가 짜증을 냅니다. 어느 채널로 보낼지가 판단입니다.
수신 거부를 요구사항에 못 박는다
수신 거부는 우리가 정하는 정책이 아닙니다. 마케팅 알림에는 법적 요구가 걸려 있고, 어기면 서비스 전체가 위험해집니다.
그래서 발송 직전에 확인합니다. 대상 목록을 만든 시점과 실제 발송 시점 사이에 사용자가 거부했을 수 있습니다. 목록이 클수록 그 시차가 커집니다.