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

템플릿과 내용

무엇을 어떤 형식으로 담을지 누가 정하나

알림의 내용을 누가 만드는지는 사소해 보이지만 결정이 필요합니다. 사내 공용 알림 플랫폼은 여러 서비스가 함께 쓰므로, 문장을 서비스가 만들어 보내는지 우리가 템플릿으로 갖고 있는지에 따라 운영이 달라집니다.

문장을 보내나 값을 보내나

두 방식이 있습니다.

방식서비스가 보내는 것문장을 고칠 때
완성된 문장"홍길동님, 결제가 완료되었습니다"서비스를 배포해야 한다
템플릿 이름과 값템플릿 결제완료, 이름 홍길동우리 쪽만 고친다

후자를 고릅니다. 이유는 문장 수정 빈도입니다. 오타나 어투 수정은 자주 생기고, 그때마다 20개 서비스가 배포해야 하면 아무도 고치지 않습니다.

더 큰 이유는 채널별 형식 차이입니다. 같은 알림을 푸시와 메일과 문자로 보내면 형식이 전부 다릅니다.

채널제약
푸시제목과 한두 줄. 길면 잘린다
메일길이 여유가 있다. 서식과 링크를 쓴다
문자길이에 따라 요금이 달라진다

문장을 서비스가 만들면 서비스가 채널 세 개의 형식을 다 알아야 합니다. 템플릿을 우리가 갖고 있으면 채널별 차이가 우리 안에 머뭅니다.

푸시에 무엇을 담나

푸시 알림은 잠금화면에 보이므로 담는 내용이 곧 노출 범위다 잠금화면. 화면을 켜기만 하면 보인다 출금 알림 홍길동님 계좌에서 43만원 옆 사람도 본다 출금 알림 확인해 주세요 상세는 앱에서 본다 담을지 말지를 알림 종류마다 템플릿에 표시해 둔다

푸시 알림은 잠금화면에 보입니다. 화면을 켜기만 하면 옆 사람도 봅니다.

나쁨: 홍길동님 계좌에서 43만원이 출금되었습니다
나음: 출금 내역이 있습니다. 확인해 주세요

내용을 담으면 편리하지만 본인이 아닌 사람에게 보이는 경로가 됩니다. 그래서 민감한 알림은 사실만 알리고 상세는 앱에서 보게 합니다.

이 판단은 알림 종류마다 다릅니다. 광고는 내용을 다 담아야 눌리고, 금융 알림은 담지 않아야 합니다. 템플릿에 민감 여부를 표시해 두면 새 알림을 추가할 때 그 결정을 하게 됩니다.

템플릿을 고칠 때 무엇이 깨지나

템플릿과 값을 나누면 새 문제가 생깁니다. 템플릿이 요구하는 값과 서비스가 보내는 값이 어긋날 수 있습니다.

어긋남사용자가 보는 것
값이 빠짐빈 자리가 그대로 나간다
값 이름이 다름채워지지 않은 문장이 나간다

이것은 배포 시점이 다르기 때문에 생깁니다. 우리가 템플릿에 값을 하나 추가하면, 그 값을 보내지 않는 서비스의 알림이 즉시 깨집니다.

그래서 템플릿에 필요한 값을 명시하고, 발송 전에 검사합니다. 값이 없으면 보내지 않고 실패로 남깁니다. 빈 자리가 있는 문장을 사용자에게 보내는 것보다 낫습니다.

새 값을 추가할 때는 없어도 되는 값으로 먼저 넣고, 모든 서비스가 보내기 시작한 뒤에 필수로 바꿉니다. 순서를 바꾸면 그 사이의 알림이 전부 실패합니다.

언제 보낼지도 내용의 일부다

같은 문장이라도 도착 시각에 따라 다르게 받아들여집니다. 사용자의 시간대를 알면 그 지역의 낮에 보내고, 모르면 보수적으로 정해야 합니다.

시간대를 모르면 가입 지역이나 최근 접속 시각으로 짐작한다
짐작이 틀리면 새벽에 알림이 간다

중요한 알림은 시각을 따지지 않고 바로 보냅니다. 마케팅 알림만 시간을 지킵니다. 이 구분은 이미 우선순위에서 나눈 것과 같은 선이므로, 같은 표시를 재사용합니다.

면접에서 이렇게 나옵니다

Q.알림 문장을 서비스가 만들어 보내게 하겠습니까 아니면 템플릿을 플랫폼이 갖겠습니까

템플릿을 플랫폼이 갖고 서비스는 값만 보냅니다.

방식문장을 고칠 때
완성된 문장을 받음서비스를 배포해야 한다
템플릿과 값을 받음우리 쪽만 고친다

오타나 어투 수정은 자주 생깁니다. 그때마다 20개 서비스가 배포해야 하면 아무도 고치지 않습니다.

더 큰 이유는 채널별 형식 차이입니다. 푸시는 한두 줄, 메일은 서식과 링크, 문자는 길이가 곧 요금입니다. 문장을 서비스가 만들면 서비스가 채널 세 개의 제약을 다 알아야 합니다.

흔한 실수: 템플릿을 코드에 상수로 두는 것. 그러면 문장 수정에 우리 배포가 필요해서 처음 문제로 되돌아갑니다. 템플릿은 데이터로 둡니다.

Q.푸시 알림에 결제 금액을 담으시겠습니까

민감한 알림에는 담지 않습니다. 푸시는 잠금화면에 보이므로 화면을 켜기만 하면 옆 사람도 봅니다.

나쁨: 홍길동님 계좌에서 43만원이 출금되었습니다
나음: 출금 내역이 있습니다. 확인해 주세요

내용을 담으면 편리하지만 본인이 아닌 사람에게 보이는 경로가 됩니다. 사실만 알리고 상세는 앱에서 보게 합니다.

판단은 알림 종류마다 다릅니다. 광고는 내용을 다 담아야 눌리고 금융 알림은 담지 않아야 합니다.

흔한 실수: 이 판단을 개발자가 그때그때 하는 것. 템플릿에 민감 여부를 표시해 두면 새 알림을 추가할 때 반드시 그 결정을 하게 됩니다. 표시가 없으면 편리한 쪽으로 기울고, 사고가 난 뒤에 알게 됩니다.

Q.템플릿에 새 값을 추가할 때 무엇을 조심해야 하나요

없어도 되는 값으로 먼저 넣고, 모든 서비스가 보내기 시작한 뒤에 필수로 바꿉니다.

우리 배포와 서비스 배포는 시점이 다릅니다. 필수 값을 먼저 추가하면 아직 그 값을 보내지 않는 서비스의 알림이 즉시 전부 실패합니다.

어긋남사용자가 보는 것
값이 빠짐빈 자리가 그대로 나간다
값 이름이 다름채워지지 않은 문장이 나간다

그래서 템플릿에 필요한 값을 명시하고 발송 전에 검사합니다. 값이 없으면 보내지 않고 실패로 남깁니다.

흔한 실수: 값이 없을 때 빈 자리를 그대로 보내는 것. 깨진 문장이 사용자에게 도착하는 것보다 안 보내고 실패로 남기는 편이 낫습니다. 실패는 우리가 보고 고칠 수 있지만 도착한 문장은 되돌릴 수 없습니다.

Q.사용자의 시간대를 모를 때 마케팅 알림을 언제 보내시겠습니까

가입 지역이나 최근 접속 시각으로 짐작하고, 짐작이 약하면 보내지 않고 미룹니다.

시간대를 모르면 짐작한다
짐작이 틀리면 새벽에 알림이 간다

새벽에 도착한 마케팅 알림은 열리지 않을 뿐 아니라 수신 거부와 스팸 신고를 만듭니다. 한 번의 발송으로 그 사용자에게 앞으로 보낼 수 있는 모든 알림을 잃습니다.

중요한 알림은 시각을 따지지 않고 바로 보냅니다. 시간을 지키는 것은 마케팅 알림만입니다.

흔한 실수: 이 구분을 위해 새 표시를 만드는 것. 우선순위에서 이미 급한 것과 급하지 않은 것을 나눴으므로 같은 표시를 재사용합니다. 같은 뜻의 표시가 두 개 있으면 곧 서로 어긋납니다.

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

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

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