Foundry
알림 시스템 설계
심화
핵심

보냈다는 것과 도착했다는 것

무엇을 알 수 있고 무엇을 알 수 없나

제공자가 우리 요청을 받아들였다는 것과 사용자가 알림을 봤다는 것은 다릅니다. 이 차이를 구분하지 않으면 지표가 실제보다 좋게 나오고, 문제를 늦게 알게 됩니다.

세 단계를 구분한다

수락과 도달과 확인은 서로 다른 단계이고 뒤로 갈수록 알기 어렵다 세 단계를 구분한다 수락 도달 확인 우리가 아는 것 보고가 오면 안다 앱이 알려 주면 안다 수락을 도달로 기록하면 지표가 실제보다 좋게 나온다 보고가 오지 않는 경우가 많아 도달률은 늘 과소 집계된다 그래서 무엇을 보고 판단하나 수락 실패율은 우리 문제. 도달률 변화는 추세로만 본다 절대값이 아니라 어제와 비교한다
단계우리가 아는 방법
수락제공자가 요청을 받았다호출 응답으로 바로 안다
도달사용자 기기나 메일함에 닿았다제공자가 나중에 알려주면 안다
확인사용자가 열었다앱이나 메일이 알려주면 안다

수락을 도달로 기록하면 지표가 실제보다 좋게 나옵니다. 앱을 지운 사용자에게 보낸 푸시도 수락은 됩니다.

뒤로 갈수록 알기 어렵습니다. 도달 보고는 채널마다 오는 비율이 다르고 늦게 옵니다. 확인은 사용자가 알림을 눌러야 알 수 있고, 알림을 보기만 하고 앱을 따로 켠 경우는 알 수 없습니다.

그래서 무엇을 보고 판단하나

각 단계를 다르게 씁니다.

지표어떻게 보나
수락 실패율우리 문제다. 즉시 대응한다
도달률절대값을 믿지 않고 어제와 비교한다
확인률내용이 좋았는지의 신호로만 본다

수락 실패율만 경보로 쓸 수 있습니다. 도달률은 늘 과소 집계되므로 "도달률 70퍼센트 미만이면 경보" 같은 기준은 계속 울리거나 아무 때도 울리지 않습니다. 대신 어제 대비 급락을 봅니다.

반송을 처리해야 한다

보낼 수 없는 주소로 계속 보내면 제공자가 우리를 의심합니다.

반송대응
영구없는 주소다다시 보내지 않는다. 표시해 둔다
일시지금 받을 수 없다잠시 뒤 다시 시도한다

영구 반송을 무시하는 것이 가장 흔한 사고입니다. 없는 주소로 계속 보내면 제공자가 우리 발송 전체의 신뢰도를 낮추고, 정상 주소로 가는 알림까지 스팸으로 분류됩니다. 한 사용자의 잘못된 주소가 전체 도달률을 떨어뜨립니다.

푸시도 같습니다. 앱을 지운 기기의 토큰은 제공자가 무효라고 알려줍니다. 그 신호를 받아 토큰을 지워야 합니다. 지우지 않으면 하루 5천만 건 중 상당 부분이 존재하지 않는 기기로 나가는 헛일이 됩니다.

재시도를 어디까지 하나

일시 실패는 다시 시도합니다. 그런데 이 재시도가 앞 절의 중복과 만납니다.

넘겼는지 확실하지 않을 때 다시 시도하면 두 번 보낼 수 있다

그래서 재시도 횟수와 간격을 알림 종류에 따라 다르게 둡니다.

알림재시도이유
인증 번호짧게 몇 번만늦게 도착하면 이미 쓸모없다
결제 알림간격을 늘려 여러 번늦어도 의미가 있다
마케팅한 번 실패하면 버린다다시 보낼 값이 없다

시간이 지나 의미가 없어지는 알림은 재시도가 손해입니다. 인증 번호를 5분 뒤에 배달하면 사용자는 이미 다시 요청했고, 두 번째 번호가 유효한 상태에서 첫 번째가 도착해 혼란만 만듭니다.

재시도를 다 써도 실패한 것은 따로 모아 둡니다. 자동으로 더 시도하지 않고 사람이 보는 자리에 둡니다. 같은 이유로 실패한 것이 쌓이면 그것이 제공자 문제인지 우리 문제인지 판단하는 근거가 됩니다.

면접에서 이렇게 나옵니다

Q.제공자가 요청을 받아들였으면 알림이 도착한 것입니까

아닙니다. 수락과 도달과 확인은 서로 다른 단계입니다.

단계
수락제공자가 요청을 받았다
도달사용자 기기나 메일함에 닿았다
확인사용자가 열었다

앱을 지운 사용자에게 보낸 푸시도 수락은 됩니다. 없는 메일 주소로 보낸 메일도 수락은 됩니다.

수락을 도달로 기록하면 지표가 실제보다 좋게 나오고, 문제를 사용자 문의로 알게 됩니다.

흔한 실수: 도달률에 절대 기준으로 경보를 거는 것. 도달 보고는 오지 않는 경우가 많아 늘 과소 집계됩니다. 경보는 수락 실패율에 걸고, 도달률은 어제 대비 급락으로 봅니다.

Q.없는 주소로 계속 보내면 무엇이 문제입니까

제공자가 우리 발송 전체의 신뢰도를 낮춥니다. 정상 주소로 가는 알림까지 스팸으로 분류됩니다.

반송대응
영구 반송다시 보내지 않는다. 표시해 둔다
일시 반송잠시 뒤 다시 시도한다

한 사용자의 잘못된 주소가 전체 도달률을 떨어뜨립니다. 그래서 영구 반송은 받는 즉시 발송 대상에서 빼야 합니다.

푸시도 같습니다. 앱을 지운 기기의 토큰은 제공자가 무효라고 알려주므로 그 신호로 토큰을 지웁니다.

흔한 실수: 일시 반송과 영구 반송을 같은 실패로 묶는 것. 영구를 재시도하면 신뢰도를 잃고, 일시를 버리면 보낼 수 있었던 알림을 잃습니다. 구분이 곧 대응입니다.

Q.인증 번호 발송이 실패하면 몇 번까지 다시 시도하시겠습니까

짧은 간격으로 몇 번만 하고 버립니다. 시간이 지나면 그 알림의 의미가 사라집니다.

인증 번호를 5분 뒤에 배달하면 사용자는 이미 다시 요청했습니다. 두 번째 번호가 유효한 상태에서 첫 번째가 도착해 혼란만 만듭니다.

알림재시도
인증 번호짧게 몇 번만
결제 알림간격을 늘려 여러 번
마케팅한 번 실패하면 버린다

재시도 정책은 알림의 유효 기간에서 나옵니다.

흔한 실수: 재시도를 전 채널 공통 설정 하나로 두는 것. 그러면 늦게 도착해도 의미 있는 알림에 맞춰 길게 잡거나, 급한 알림에 맞춰 짧게 잡습니다. 어느 쪽이든 절반은 잘못된 정책이 됩니다.

Q.재시도를 모두 소진한 알림을 어떻게 처리하시겠습니까

자동으로 더 시도하지 않고 따로 모아 사람이 보는 자리에 둡니다.

계속 자동 재시도하면 두 가지가 나빠집니다. 실패하는 요청이 정상 발송의 처리량을 잠식하고, 실패가 보이지 않아서 원인을 고치지 않습니다.

같은 이유로 실패한 것이 쌓이면
그것이 제공자 문제인지 우리 문제인지 판단하는 근거가 된다

모아 둔 것을 보면 특정 채널만 실패하는지, 특정 템플릿만 실패하는지가 드러납니다.

흔한 실수: 모아 두기만 하고 보지 않는 것. 쌓이는 자리는 만들었는데 아무도 확인하지 않으면 없는 것과 같습니다. 쌓이는 양에 경보를 걸어야 그 자리가 작동합니다.

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

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

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