Foundry
알림 시스템 설계
중급
핵심

요구사항과 두 종류의 알림

급한 것과 급하지 않은 것을 나눈다

알림 시스템은 여러 서비스가 함께 쓰는 플랫폼입니다. 그래서 한 서비스의 발송이 다른 서비스의 알림을 밀어내는 것이 이 설계의 중심 문제입니다.

항목
대상사내 공용 알림 플랫폼
채널푸시, 메일, 문자
발송량하루 5천만 건 (평균 초당 578)
피크피크 초당 1만
중요 알림1분 안에 도착 시도
마케팅 알림지연 허용
문자건당 과금
중복같은 알림을 두 번 보내지 않는다
수신 거부반드시 지킨다

기능 요구사항과 범위 밖

구분내용
이번에 만든다채널별 발송, 우선순위, 수신 설정 확인, 중복 방지, 도달 추적
범위 밖알림 내용 작성 도구, 발송 대상 추출, 사용자 행동 분석, 앱 안 알림 목록

발송 대상 추출을 뺀 것이 중요합니다. "30일 미접속 사용자에게" 같은 조건으로 대상을 뽑는 일은 각 서비스가 합니다. 우리는 받는 사람 목록과 내용을 받아 보내는 일만 합니다.

경계를 이렇게 그으면 우리 시스템이 사용자 데이터베이스를 알 필요가 없습니다.

평균과 피크가 17배 다르다

평균과 피크가 크게 다르고 폭주하는 쪽이 급하지 않은 알림이다 평균 발송량 초당 578 마케팅 발송이 시작되면 초당 1만. 17배 그런데 이 폭주는 급하지 않은 알림이다 비밀번호 재설정 알림이 그 뒤에 줄을 서면 1분 안에 도착이라는 요구를 어긴다 그래서 급한 것과 급하지 않은 것을 같은 줄에 세우지 않는다

하루 5천만 건 은 평균 초당 578건입니다. 그런데 마케팅 발송이 시작되면 피크 초당 1만 이 됩니다.

폭주하는 쪽이 급하지 않은 알림이라는 것이 핵심입니다. 비밀번호 재설정 알림이 마케팅 100만 건 뒤에 줄을 서면 1분 안에 도착이라는 요구를 어깁니다.

그래서 급한 것과 급하지 않은 것을 같은 줄에 세우지 않습니다. 이 판단이 뒤의 큐 구조를 정합니다.

숫자가 정하는 것

조건강제하는 것
평균 초당 578처리량은 부담이 아니다
피크 초당 1만받아 두고 나눠 보내야 한다
중요 알림 1분우선순위를 나눠야 한다
문자 건당 과금채널 선택이 곧 비용이다
중복 금지정확히 한 번은 불가능하다. 감지로 다룬다
수신 거부 준수발송 직전에 확인해야 한다

채널마다 성질이 다르다

한 시스템으로 세 채널을 다루지만 성질이 크게 다릅니다.

채널비용도달길이
푸시거의 없다앱을 지우면 못 받는다짧다
메일거의 없다스팸함으로 갈 수 있다길어도 된다
문자건당 과금가장 확실하다아주 짧다

같은 알림을 세 채널로 보내는 것이 기본이 아닙니다. 문자는 비싸고, 세 곳에서 같은 알림을 받으면 사용자가 짜증을 냅니다. 어느 채널로 보낼지가 판단입니다.

수신 거부를 요구사항에 못 박는다

수신 거부는 우리가 정하는 정책이 아닙니다. 마케팅 알림에는 법적 요구가 걸려 있고, 어기면 서비스 전체가 위험해집니다.

그래서 발송 직전에 확인합니다. 대상 목록을 만든 시점과 실제 발송 시점 사이에 사용자가 거부했을 수 있습니다. 목록이 클수록 그 시차가 커집니다.

면접에서 이렇게 나옵니다

Q.알림 시스템 설계에서 무엇을 먼저 보시겠습니까

평균과 피크의 차이, 그리고 폭주하는 쪽이 어느 종류인지입니다.

하루 5천만 건 은 평균 초당 578건이라 처리량이 부담이 아닙니다. 그런데 마케팅 발송이 시작되면 피크 초당 1만 이 됩니다.

폭주하는 쪽이 급하지 않은 알림이라는 것이 핵심입니다. 비밀번호 재설정 알림이 마케팅 뒤에 줄을 서면 1분 요구를 어깁니다.

그래서 급한 것과 급하지 않은 것을 같은 줄에 세우지 않습니다.

흔한 실수: 평균 처리량만 보고 설계하는 것. 이 시스템의 어려움은 총량이 아니라 한 서비스의 발송이 다른 서비스의 알림을 밀어내는 것입니다. 여러 서비스가 함께 쓰는 플랫폼이라 더 그렇습니다.

Q.발송 대상 추출을 범위 밖으로 둔 이유가 무엇인가요

우리 시스템이 사용자 데이터베이스를 알 필요가 없어집니다.

"30일 미접속 사용자에게" 같은 조건으로 대상을 뽑는 일은 각 서비스가 압니다. 우리는 받는 사람 목록과 내용을 받아 보내는 일만 합니다.

서비스: 누구에게 무엇을 보낼지 정한다
알림 플랫폼: 받아서 보낸다

경계를 이렇게 그으면 각 서비스의 데이터 모델 변화가 우리에게 오지 않습니다.

흔한 실수: 편의를 위해 조건 기반 발송을 받아들이는 것. "이 조건에 맞는 사용자에게 보내 줘" 를 받으면 모든 서비스의 데이터를 우리가 알아야 하고, 그 순간 플랫폼이 아니라 각 서비스의 일부가 됩니다.

Q.같은 알림을 세 채널로 보내면 안 되나요

기본으로 두면 안 됩니다. 채널마다 성질이 크게 다릅니다.

채널비용도달길이
푸시거의 없다앱을 지우면 못 받는다짧다
메일거의 없다스팸함으로 갈 수 있다길어도 된다
문자건당 과금가장 확실하다아주 짧다

문자는 비용이 들고, 세 곳에서 같은 알림을 받으면 사용자가 짜증을 냅니다. 짜증은 곧 전체 수신 거부로 이어집니다.

흔한 실수: 도달률을 높이려고 여러 채널을 함께 쓰는 것. 중요한 알림에서는 맞지만 기본값으로 두면 비용과 신뢰를 함께 잃습니다. 어느 채널로 보낼지가 알림 종류마다의 판단입니다.

Q.수신 거부를 언제 확인하시겠습니까

발송 직전입니다. 대상 목록을 만든 시점이 아닙니다.

목록을 만든 시점과 실제 발송 사이에 사용자가 거부했을 수 있습니다. 목록이 100만 건이면 발송에 시간이 걸리므로 그 시차가 커집니다.

목록 생성 시점에 확인하면 그 뒤의 거부를 놓친다
발송 직전에 확인하면 시차가 없다

수신 거부는 우리가 정하는 정책이 아니라 법적 요구입니다. 어기면 서비스 전체가 위험해집니다.

흔한 실수: 목록을 만들 때 걸러내고 끝내는 것. 대량 발송에서 첫 건과 마지막 건 사이에 몇 시간이 지날 수 있습니다. 그 사이에 거부한 사용자에게 보내면 어긴 것입니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

읽었으면 문제로 확인해보세요

알림 시스템 설계 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.