-
[가상면접 사례로 배우는 대규모 시스템 설계 기초] 10장. 알림 시스템 설계📕 book/가상 면접 사례로 배우는 대규모 시스템 설계 기초 2026. 1. 19. 12:31
⏰ 알림 시스템
알림 시스템은 고객에게 중요할 만한 정보를 비동기적으로 제공한다.
단순히
모바일 푸시 알림(mobile push notification)에 한정하지 않고 SMS 메시지, 이메일 3가지로 분류할 수 있다.🔖 문제 이해 및 설계 범위
🔍 알림의 종류
- 푸시 알림, SMS 메시지, 이메일
🔍 실시간 시스템
연성 실시간 시스템 (soft real-time)- 알림을 가능한 빨리 전달하지만 부하가 걸렸을 경우 약간의 지연 가능
🔍 지원하는 단말 종류
- iOS 단말, 안드로이드 단말, 랩톱/데스크톱
🔍 사용자에게 보낼 알림은 누가 처리?
- 클라이언트 애플리케이션 프로그램
- 서버 측 스케줄링
🔍 사용자가 알림을 받지 않도록 설정 기능 제공
- 설정을 통해 사용자가 알림을 받지 않을 수 있다.
🔍 하루에 보내야 하는 알림
- 천만 건의 모바일 푸시 알림
- 백만 건의 SMS 메시지
- 5백만 건의 이메일
📌 개략적 설계안 제시 및 동의 구하기
알림 유형별 지원 방안
🍎 iOS 푸시 알림
iOS에서 푸시 알람을 보내기 위해서는 3가지 컴포넌트가 필요하다.

알림 제공자
- 알림 요청을 만들어 애플 푸시 알림 서비스로 보내는 주체
- 요청을 만들기 위해서 다음과 같은 데이터가 필요
- 단말 토큰: 알림 요청을 보내는 데 필요한 고유 식별자
- 페이로드: 알림 내용을 담은 JSON
APNS
- 애플이 제공하는 원격 서비스
- 푸시 알림을 iOS 장치로 보내는 역할
iOS 단말
- 푸시 알림을 수신하는 사용자 단말
📱 안드로이드 푸시 알림
안드로이드 푸시 알림도 비슷한 절차로 전송된다.

- APNS 대신 FCM 을 사용
💬 SMS 메시지
SMS 메시지를 보낼 때는 트윌리오, 넥스모 같은 제3 사업자의 서비스를 많이 이용한다.
- 상용 서비스라 이용 요금을 내야 한다.
✉️ 이메일
- 센드그리드, 메일침프와 같은 사용ㅇ 이메일 서비스 이용
- 전송 성공률도 높고 데이터 분석 서비스도 제공
연락처 정보 수집 절차
알림을 보내기 위해서는 모바일 단말 토큰, 전화번호, 이메일 주소 등의 정보가 필요하다.
사용자가 앱을 설치하거나 처음으로 계정을 등록하면 API 서버는 사용자의 정보를 수집해 DB에 저장한다.

- 이메일 주소와 전화번호는 user 테이블에 저장
- 단말 토큰은 device 테이블에 저장.
- 한 사용자가 여러 단말을 가질 수 있고 알람은 모든 단말에 전송되어야 하기 때문.
알림 전송 및 수신 절차

1-N 까지 서비스
- 서비스 각각은 마이크로서비스일수도 크론잡일 수도 분산 시스템 컴포넌트일 수도 있다.
알림 시스템
- 알림 시스템은 알림 전송/수신 처리의 핵심
제3자 서비스
- 사용자에게 알림을 실제로 전달하는 역할
- 유의할 것은 확장성
- 새로운 서비스틑 통합하거나 기존 서비스를 제거할 수 있어야 한다.
iOS, 안드로이드, SMS, 이메일 단말
- 사용자는 자기 단말에서 알림을 수신한다.
⚠️ 해당 설계의 문제점
문제점 설명 SPOF 알림 서비스에 서버가 한 대인 것은 서버에 장애가 생기면 전체 서비스의 장애로 이어진다. 규모 확장성 한 대 서비스로 푸시 알림에 관계된 모든 것을 처리하기 때문에 DB, 캐시 등 중요 컴포넌트의 규모를 개별적으로 늘릴 방법이 없다. 성능 병목 알림을 처리하고 보내는 것은 자원이 많이 필요할 수 있다. 사용자 트래픽이 많이 몰리는 시간에 시스템 과부하 상태에 빠질 수 있다. 개략적 설계안 (개선 버전)
다음과 같은 방향으로 개선
- DB, 캐시를 알림 시스템의 주 서버에서 분리
- 알림 서버를 증설하고 자동으로 수평적 규모 확장이 이루어지도록 한다.
- 메시지 큐를 이용해 시스템 컴포넌트 사이의 강한 결합을 끊는다.

1-N 까지 서비스
- 알림 시스템의 서버의 API를 통해 알림을 보낼 서비스
알림 서버
- 알림 전송 API: 스팸 방지를 위해 사내 서비스 또는 인증된 클라이언트만 이용 가능
- 알림 검증: 이메일 주소, 전화번호 등에 대한 기본적 검증 수행
- DB, 캐시 질의: 알림에 포함시킬 데이터를 가져오는 기능
- 알림 전송: 알림 데이터를 메시지 큐에 전송
- 알림을 병렬적으로 처리 가능
👀 이메일 알림 API 예시 - POST <
https://api.example.com/v/sms/send>{ "to": [ { "user_id": 123456 } ], "from": { "email": "from_address@example.com" }, "subject": "Hello, World!", "content": [ { "type": "text/plain", "value": "Hello, world!" } ] } }캐시 사용자 정보, 단말 정보, 알림 템플릿 등을 캐시 데이터베이스 사용자, 알림, 설정 등 다양한 정보를 저장 메시지 큐 시스템 컴포넌트 간 의존성을 제거하기 위해 사용. 다량의 알림이 전송되어야 하는 경우를 대비한 버퍼 역할 작업 서버 메시지 큐에서 전송할 알림을 꺼내 제 3자 서비스로 전달하는 역할을 하는 서버 🖥️ 알림 전송 과정
- API를 호출하여 알림 서버로 알림을 보낸다.
- 알림 서버는 사용자 정보, 단말 토큰, 알림 설정 같은 메타데이터를 캐시나 데이터베이스에서 가져온다.
- 알림 서버는 전송할 알림에 맞는 이벤트를 만들어 해당 이벤트를 위한 큐에 넣는다.
- iOS 푸시 알림 이벤트는 iOS 푸시 알림 큐에 넣는다.
- 작업 서버는 메시지 큐에서 알림 이벤트를 꺼낸다.
- 작업 서버는 알림을 제3자 서비스로 보낸다.
- 제3자 서비스는 사용자 단말로 알림을 전송한다.
✅ 상세 설계
안정성
분산 환경에서 운영될 알림 시스템을 설계할 때는 안정성을 확보하기 위한 몇 가지를 반드시 고려해야 한다.
1️⃣ 데이터 손실 방지
- 어떤 상황에서도 알림이 소실되면 안된다.
- 지연또는 순서는 틀려도 되지만 사라지면 곤란하다.
이를 통해서 알림 데이터를 데이터베이스에 보관하고 재시도 메커니즘을 구현해야 한다.
- 알림 로그 데이터베이스를 유지하는 것이 한 가지 방법

2️⃣ 알림 중복 전송 방지
같은 알림이 여러 번 반복되는 것을 완전히 막는 것은 가능하지 않다.
분산 시스템의 특성상 가끔 같은 알림이 중복되어 전송되기도 한다.
- 중복을 방지하는 메커니즘을 도입하고 오류를 신중하게 처리해야 한다.
중복 방지 로직 사례
- 보내야 할 알림이 도착 시 이벤트 ID를 검사하여 이전에 본 적이 있는 이벤트인지 확인
- 중복된 이벤트라면 버리고 그렇지 않으면 알림을 발송
추가로 필요한 컴포넌트 및 고려사항
알림 시스템은 많이 복잡하다.
- 알림 템플릿, 알림 설정, 이벤트 추적, 시스템 모니터링, 처리율 제한 등 필요한 추가 컴포넌트를 알아보자.
📖 알림 템플릿
대형 알림 시스템은 하루에 수백만 건 이상의 알림을 처리한다.
- 이때 알림 메시지 대부분은 형식이 비슷하기 때문에 알림 메시지의 모든 부분을 처음부터 다시 만들 필요가 없도록 템플릿을 사용
⚙️ 알림 설정
사용자가 알림 설정을 상세히 조정할 수 있도록 한다.
- 알림 설정 테이블에 보관
컬럼 타입 설명 user_id bigint channel varchar 알림이 전송될 채널(푸시 알림, 이메일, SMS 등) opt_in boolean 해당 채널로 알림을 받을지의 여부 ⛔ 전송률 제한
사용자에게 너무 많은 알림을 보내지 않도록 하는 방법중 하나는 한 사용자가 받을 수 있는 알림의 빈도를 제한하는 것이다.
- 알림을 너무 많이 보내면 사용자가 알림 기능을 아예 꺼버릴 수 있기 때문
🔁 재시도 방법
제3자 서비스가 알림 전송에 실패했을 경우 해당 알림을 재시도 전용 큐에 넣는다.
- 같은 문제가 계속 발생할 시 개발자에게 alert
🔐 푸시 알림과 보안
iOS와 안드로이드 앱의 경우 알림 전송 API는 appKey와 appSecret을 사용하여 보안을 유지한다.
인증된, 승인된 클라이언트만 해당 API를 사용하여 알림을 보낼 수 있다.
👀 큐 모니터링
알림 시스템을 모니터링할 때 중요한 메트릭중 하나는 큐에 쌓인 알림의 개수이다.
- 이 수가 너무 크면 작업 서버들이 이벤트를 빠르게 처리하고 있지 못하다는 뜻이다.
- 작업 서버를 증설
🐾 이벤트 추적
알림 확인율, 클릭율, 실제 앱 사용으로 이어지는 비율 같은 메트릭은 사용자를 이해하는데 중요하다.
데이터 분석 서비스는 보통 이벤트 추적기능도 제공한다.
- 알림 시스템을 만들기 위해서는 데이터 분석 서비스와도 통합해야 한다.
수정된 설계안

'📕 book > 가상 면접 사례로 배우는 대규모 시스템 설계 기초' 카테고리의 다른 글
[가상면접 사례로 배우는 대규모 시스템 설계 기초] 12장. 채팅 시스템 설계 (1) 2026.01.19 [가상면접 사례로 배우는 대규모 시스템 설계 기초] 11장. 뉴스 피드 시스템 설계 (0) 2026.01.19 [가상면접 사례로 배우는 대규모 시스템 설계 기초] 9장. 웹 크롤러 설계 (0) 2026.01.04 [가상면접 사례로 배우는 대규모 시스템 설계 기초] 8장. URL 단축기 설계 (0) 2026.01.04 [가상면접 사례로 배우는 대규모 시스템 설계 기초] 7장. 분산 시스템을 위한 유일 ID 생성기 설계 (0) 2025.12.25