caffeine-library / system-design-interview

🌱 가상 면접 사례로 배우는 대규모 시스템 설계 기초를 읽는 스터디
4 stars 0 forks source link

[keyword] 10장 - 알림 시스템 설계 #31

Closed JasonYoo1995 closed 2 years ago

JasonYoo1995 commented 2 years ago

주제

'10장 - 알림 시스템 설계'을 읽고 내용을 요약하거나,
중요✨ 하다고 생각하는 키워드 및 관련 설명을 코멘트로 달아주세요

연관 챕터

30

@caffeine-library/readers-system-design-interview

JasonYoo1995 commented 2 years ago

알림 시스템

알림을 보내려면 ‘모바일 단말 토큰, 전화번호, 이메일 주소 등’이 필요

기본 설계 구조

설계 구조 보완

개선된 컴포넌트

binchoo commented 2 years ago

책이 고안한 설계를 보면서, 컴포넌트들이 무슨 퀄리티 속성을 만족하려고 등장한 것일까 생각하게 되었습니다. 뭔가 수필 쓰듯이 쓰게 되었네요.


대학 과제로 안드로이드 앱에서 푸시 알림을 수신하기 위해 그 내용을 팠던적이 있다. 당시 생각해낸 알림 보내기란, 앱이 직접 FCM에 쿼리를 날려 기기가 다시 알림을 수신하는 수준이었다. 알림 전송 기능의 참여자는 앱, 기기, FCM 3개 뿐이다.

하지만 이 책(System Design Interview)에서 설계하는 것은 서비스 수준 즉, 알림 서비스이다. 만족해야 할 퀄리티가 있으며, 이를 위해 10개의 컴포넌트가 식별되었다.

서비스의 뼈대 시나리오는 이렇다.

클라이언트 서비스는 다수 존재한다. 클라이언트는 알림을 수신했으면 하는 유저의 ID와 알림 컨텐츠, 타겟 플랫폼을 HTTP 페이로드에 욱여넣고 알림 서버에 요청한다.

알림 서버는 타겟 정보 데이터베이스, 알림 설정 데이터베이스를 참고하여 타겟 플랫폼 별로 마련된 알림 요청 큐에 작업을 넣는다. 작업 서버가 큐에서 이것을 꺼내고 지정된 플랫폼의 제3자 알림 서비스(FCM 따위)에게 알림을 전파한다. 유저의 기기는 곧이어 알림을 수신하게 된다.

다음과 같은 퀄리티가 고려된다.


관점을 역전시켜서 컴포넌트의 존재 의의를 분석할 수 있다.

큐 시스템의 의의

처리율 제한기의 의의