10장 : 알림 시스템 설계

알림 시스템은 최근 많은 프로그램이 채택한 인기 있는 기능으로, 모바일 푸시 알림, SMS 메시지, 이메일 세 가지로 분류할 수 있다.

1단계 : 문제 이해 및 설계 범위 확정

2단계 : 개략적 설계안 제시 및 동의 구하기

알림 유형별 지원 방안

iOS 푸시 알림

안드로이드 푸시 알림

위와 비슷한 절차로 전송된다. APNS 대신 FCM(Firebase Cloud Messageing)을 사용한다.

SMS 메시지

SMS 메시지를 보낼 때는 보통 트윌리오(Twilio), 넥스모(Nexmo)같은 제 3사업자의 서비스를 많이 이용한다.

Email

  • 요약

연락처 정보 수집 절차

  • 알림을 보내려면 모바일 단말 토큰, 전화번호, 이메일 주소 등의 정보가 필요하다. 사용자가 앱을 설치하거나 계정을 등록하면 API 서버는 해당 사용자의 정보를 수집하여 데이터베이스에 저장한다.

알림 전송 및 수신 절차

  • 문제점

    • SPOF

    • 규모 확장성 : 한 대 서비스로 푸시 알림에 관계된 모든 것을 처리하므로, 데이터베이스나 캐시 등 중요 컴포넌트의 규모를 개별적으로 늘릴 방법이 없다.

    • 성능 병목 : 알림을 처리하고 보내는 것은 자원을 많이 필요로 하는 작업이다.

  • 개선된 버전

  • 1부터 N까지의 서비스 : 알림 시스템 서버의 API 를 통해 알림을 보낼 서비스들.

  • 알림 서버

    • 알림 전송 API

    • 알림 검증

    • 데이터베이스 또는 캐시 질의

    • 알림 전송

      • Email 형태의 알림을 보내는 데 사용하는 API example

      POST https://api.example.com/v/sms/send

      Request body

  • 캐시 (cache) : 사용자 정보, 단말 정보, 알림 템플릿(template) 등을 캐시한다.

  • 데이터베이스(DB) : 사용자, 알림, 설정 등 다양한 정보를 저장한다.

  • 메시지 큐(message queue) : 시스템 컴포넌트 간 의존성을 제거하기 위해 사용한다. 다량의 알림이 전송되어야 하는 경우를 대비한 버퍼 역할도 한다.

  • 작업 서버(workers) : 메시지 큐에서 전송할 알림을 꺼내서 제 3자 서비스로 전달하는 역할을 담당하는 서버다.

  • 제 3자 서비스(third-party service)

  • iOS, 안드로이드, SMS, 이메일 단말

3단계 : 상세 설계

안정성

  • 데이터 손실 방지

  • 알림 중복 전송 방지

추가로 필요한 컴포넌트 및 고려사항

  • 알림 템플릿

  • 알림 설정 : 사용자는 이미 너무 많은 알림을 받고 있어서 쉽게 피곤함을 느낀다.

  • 전송률 제한

  • 재시도 방법

  • 푸시 알림과 보안

  • 큐 모니터링

  • 이벤트 추적

수정된 설계안

  • 알림 서버에 인증(authentication)과 전송률 제한(rate-limiting) 기능이 추가되었다.

  • 전송 실패에 대응하기 위한 재시도 기능이 추가되었다. 전송에 실패한 알림은 다시 큐에 넣고 지정된 횟수만큼 재시도한다.

  • 전송 템플릿을 사용하여 알림 생성 과정을 단순화하고 알림 내용의 일관성을 유지한다.

  • 모니터링과 추적 시스템을 추가하여 시스템 상태를 확인하고 추후 시스템을 개선하기 쉽도록 하였다.

Last updated