많을수록 더 빠르게 대량 푸시 발송

많을수록 더 빠르게 대량 푸시 발송

많을수록 더 빠르게 대량 푸시 발송

Kafka 기반 메시지 큐와 Cassandra 분산 저장소를 활용한 고성능 모바일 푸시 배치 시스템

Kafka 기반 메시지 큐와 Cassandra 분산 저장소를 활용한 고성능 모바일 푸시 배치 시스템

Kafka 기반 메시지 큐와 Cassandra 분산 저장소를 활용한 고성능 모바일 푸시 배치 시스템

Services

Services

개발

개발

Tech Spec

Tech Spec

Kafka, Cassandra, Firebase

Kafka, Cassandra, Firebase

모바일 사용자 수가 폭발적으로 증가함에 따라, 대량의 푸시 알림을 신속하고 안정적으로 전송하는 시스템의 중요성은 점점 커지고 있습니다. 특히 서비스가 수십만, 수백만 사용자에게 동시에 알림을 보내야 하는 경우, 기존 방식으로는 한계에 부딪히기 쉽습니다.


크린토피아 모바일 앱을 구축하면서, 저희는 바로 이 문제를 직면했습니다. 하루 수만 건 이상의 푸시 알림을 처리하는 데 있어 전통적인 REST 기반 API 처리 방식으로는 병목과 실패율을 감당할 수 없었습니다. 이에 따라, Apache Kafka와 Apache Cassandra를 조합한 확장형 알림 시스템을 설계하고 구현하게 되었습니다.



기존 알림 시스템의 한계

크린토피아 앱은 다양한 프로모션, 예약 알림, 주문 상태 변경 등 수많은 이벤트 기반 푸시 메시지를 전송해야 했습니다. 초기에는 단순한 FCM 연동 서버로 푸시를 전송했으나, 다음과 같은 문제들이 지속적으로 발생했습니다:

  • 트래픽 피크 시간대에 푸시가 누락되거나 지연 전송됨

  • 사용자 수 증가에 따라 서버 부하가 급증

  • 알림 전송 이력과 실패 로그를 신뢰성 있게 저장할 수 없는 구조

  • 특정 시간에 수만 건을 일괄 전송할 수 없는 설계

이러한 문제를 해결하기 위해, 시스템 전반의 알림 전송 흐름을 비동기 처리 기반으로 재설계하기로 결정했습니다.




Kafka와 Cassandra로 구조화된 아키텍처

Kafka: 실시간 메시지 스트리밍의 핵심

Apache Kafka는 고성능, 확장성, 내결함성을 갖춘 분산 메시징 플랫폼입니다. 수백만 건의 메시지를 처리할 수 있는 구조 덕분에, 푸시 알림 요청을 비동기적으로 큐잉하고 병렬 처리하는 데 최적이었습니다.

Kafka 도입을 통해 다음과 같은 효과를 얻을 수 있었습니다.

  • 토픽 기반 메시지 분산 처리: 푸시 요청을 다양한 워커 서버가 병렬 처리 가능

  • 순서 보장과 메시지 유실 방지: 메시지 로그 기반 재처리 기능

  • 스케줄링과 시간 지정 전송 구현 용이


Cassandra: 초고속 쓰기 성능의 분산형 NoSQL

푸시 메시지의 전송 기록과 사용자 디바이스 토큰을 안전하게 저장하려면, 쓰기 성능이 뛰어나고 확장 가능한 데이터베이스가 필요했습니다. 이에 선택한 기술이 바로 Apache Cassandra입니다.

주요 선정 이유는 다음과 같습니다:

  • 분산 구조 기반의 쓰기 최적화 성능

  • 토큰, 로그 등 대규모 데이터를 수평 확장으로 저장

  • 중앙 장애 지점(Single Point of Failure)이 없음


이 조합은 결과적으로 푸시 트래픽의 폭주에도 견딜 수 있는 견고한 인프라를 구성하게 해주었습니다.



Kafka와 Cassandra 중심의 푸시 처리 파이프라인

새롭게 설계한 구조는 다음과 같은 흐름으로 작동합니다.



  1. 관리자 또는 백오피스에서 푸시 메시지를 작성 및 요청

  2. Cassandra에 저장된 사용자 대상의 푸시 토큰 조회

  3. 해당 메시지를 Kafka의 특정 푸시 토픽에 발행

  4. Kafka Consumer 역할의 워커 서버가 메시지를 병렬 수신

  5. 각 수신 메시지에 대해 디바이스 토큰을 Cassandra에서 조회

  6. 토큰을 기반으로 FCM(APNs 포함)을 통해 푸시 전송

  7. 전송 결과(성공/실패)를 Cassandra에 로그로 저장


구조상의 핵심 포인트
  • Kafka Partition을 다수로 나누어 Worker 서버를 수평 확장 가능

  • 푸시 전송 실패 시 재처리 로직 구현 (재시도/Dead Letter Queue)

  • 스케줄링 기반 푸시 예약 처리도 Kafka 메시지 큐 기반으로 처리


이러한 구조는 이벤트 트리거 기반 알림과 예약 알림을 모두 처리할 수 있는 유연한 아키텍처를 제공합니다.




안정성, 속도, 확장성의 세 가지 확보

새로운 시스템을 도입한 이후, 다음과 같은 실질적 성과를 확인할 수 있었습니다:

  • 1초당 평균 5,000건 이상의 푸시 알림 처리 가능

  • 전송 로그와 토큰 관리의 정합성 보장

  • 메시지 처리 병목이 제거되어 API 서버 부하 40% 감소

  • 관리자 웹에서 실시간 통계 시각화 및 전송 결과 조회 가능


뿐만 아니라, 서비스 확장 시 별도의 재설계 없이 Worker 서버와 Partition 수를 조정하는 것만으로도 손쉽게 확장 가능하다는 점이 큰 장점이었습니다.



Kafka와 Cassandra의 조합이 만든 유연하고 확장 가능한 알림 플랫폼

Kafka는 빠르고 안정적인 메시지 처리를 가능하게 했으며, Cassandra는 탄탄한 데이터 기반을 제공했습니다. 두 기술 모두 처음 다루기엔 진입장벽이 높지만, 한번 안정적으로 구성되면 최소한의 유지보수로도 강력한 퍼포먼스를 발휘합니다.


앞으로 푸시 외에도 이메일, 문자, 알림함 등 다양한 채널로 확장할 수 있는 기반이 마련되었으며, 모든 메시지 시스템은 이 동일한 Kafka-Cassandra 아키텍처 위에서 유연하게 확장될 예정입니다.

모바일 사용자 수가 폭발적으로 증가함에 따라, 대량의 푸시 알림을 신속하고 안정적으로 전송하는 시스템의 중요성은 점점 커지고 있습니다. 특히 서비스가 수십만, 수백만 사용자에게 동시에 알림을 보내야 하는 경우, 기존 방식으로는 한계에 부딪히기 쉽습니다.


크린토피아 모바일 앱을 구축하면서, 저희는 바로 이 문제를 직면했습니다. 하루 수만 건 이상의 푸시 알림을 처리하는 데 있어 전통적인 REST 기반 API 처리 방식으로는 병목과 실패율을 감당할 수 없었습니다. 이에 따라, Apache Kafka와 Apache Cassandra를 조합한 확장형 알림 시스템을 설계하고 구현하게 되었습니다.



기존 알림 시스템의 한계

크린토피아 앱은 다양한 프로모션, 예약 알림, 주문 상태 변경 등 수많은 이벤트 기반 푸시 메시지를 전송해야 했습니다. 초기에는 단순한 FCM 연동 서버로 푸시를 전송했으나, 다음과 같은 문제들이 지속적으로 발생했습니다:

  • 트래픽 피크 시간대에 푸시가 누락되거나 지연 전송됨

  • 사용자 수 증가에 따라 서버 부하가 급증

  • 알림 전송 이력과 실패 로그를 신뢰성 있게 저장할 수 없는 구조

  • 특정 시간에 수만 건을 일괄 전송할 수 없는 설계

이러한 문제를 해결하기 위해, 시스템 전반의 알림 전송 흐름을 비동기 처리 기반으로 재설계하기로 결정했습니다.




Kafka와 Cassandra로 구조화된 아키텍처

Kafka: 실시간 메시지 스트리밍의 핵심

Apache Kafka는 고성능, 확장성, 내결함성을 갖춘 분산 메시징 플랫폼입니다. 수백만 건의 메시지를 처리할 수 있는 구조 덕분에, 푸시 알림 요청을 비동기적으로 큐잉하고 병렬 처리하는 데 최적이었습니다.

Kafka 도입을 통해 다음과 같은 효과를 얻을 수 있었습니다.

  • 토픽 기반 메시지 분산 처리: 푸시 요청을 다양한 워커 서버가 병렬 처리 가능

  • 순서 보장과 메시지 유실 방지: 메시지 로그 기반 재처리 기능

  • 스케줄링과 시간 지정 전송 구현 용이


Cassandra: 초고속 쓰기 성능의 분산형 NoSQL

푸시 메시지의 전송 기록과 사용자 디바이스 토큰을 안전하게 저장하려면, 쓰기 성능이 뛰어나고 확장 가능한 데이터베이스가 필요했습니다. 이에 선택한 기술이 바로 Apache Cassandra입니다.

주요 선정 이유는 다음과 같습니다:

  • 분산 구조 기반의 쓰기 최적화 성능

  • 토큰, 로그 등 대규모 데이터를 수평 확장으로 저장

  • 중앙 장애 지점(Single Point of Failure)이 없음


이 조합은 결과적으로 푸시 트래픽의 폭주에도 견딜 수 있는 견고한 인프라를 구성하게 해주었습니다.



Kafka와 Cassandra 중심의 푸시 처리 파이프라인

새롭게 설계한 구조는 다음과 같은 흐름으로 작동합니다.



  1. 관리자 또는 백오피스에서 푸시 메시지를 작성 및 요청

  2. Cassandra에 저장된 사용자 대상의 푸시 토큰 조회

  3. 해당 메시지를 Kafka의 특정 푸시 토픽에 발행

  4. Kafka Consumer 역할의 워커 서버가 메시지를 병렬 수신

  5. 각 수신 메시지에 대해 디바이스 토큰을 Cassandra에서 조회

  6. 토큰을 기반으로 FCM(APNs 포함)을 통해 푸시 전송

  7. 전송 결과(성공/실패)를 Cassandra에 로그로 저장


구조상의 핵심 포인트
  • Kafka Partition을 다수로 나누어 Worker 서버를 수평 확장 가능

  • 푸시 전송 실패 시 재처리 로직 구현 (재시도/Dead Letter Queue)

  • 스케줄링 기반 푸시 예약 처리도 Kafka 메시지 큐 기반으로 처리


이러한 구조는 이벤트 트리거 기반 알림과 예약 알림을 모두 처리할 수 있는 유연한 아키텍처를 제공합니다.




안정성, 속도, 확장성의 세 가지 확보

새로운 시스템을 도입한 이후, 다음과 같은 실질적 성과를 확인할 수 있었습니다:

  • 1초당 평균 5,000건 이상의 푸시 알림 처리 가능

  • 전송 로그와 토큰 관리의 정합성 보장

  • 메시지 처리 병목이 제거되어 API 서버 부하 40% 감소

  • 관리자 웹에서 실시간 통계 시각화 및 전송 결과 조회 가능


뿐만 아니라, 서비스 확장 시 별도의 재설계 없이 Worker 서버와 Partition 수를 조정하는 것만으로도 손쉽게 확장 가능하다는 점이 큰 장점이었습니다.



Kafka와 Cassandra의 조합이 만든 유연하고 확장 가능한 알림 플랫폼

Kafka는 빠르고 안정적인 메시지 처리를 가능하게 했으며, Cassandra는 탄탄한 데이터 기반을 제공했습니다. 두 기술 모두 처음 다루기엔 진입장벽이 높지만, 한번 안정적으로 구성되면 최소한의 유지보수로도 강력한 퍼포먼스를 발휘합니다.


앞으로 푸시 외에도 이메일, 문자, 알림함 등 다양한 채널로 확장할 수 있는 기반이 마련되었으며, 모든 메시지 시스템은 이 동일한 Kafka-Cassandra 아키텍처 위에서 유연하게 확장될 예정입니다.

Green 3D object

AI 전환의 처음부터 끝까지

전문가들이 조직의 AI 전환을 위한 전과정에서 최적의 서비스를 제공합니다 

Green 3D object

AI 전환의 처음부터 끝까지

전문가들이 조직의 AI 전환을 위한 전과정에서 최적의 서비스를 제공합니다 

Green 3D object

AI 전환의 처음부터 끝까지

전문가들이 조직의 AI 전환을 위한

전과정에서 최적의 서비스를 제공합니다 

contact@hyper-x.ai

© 2025. All rights reserved. HyperX

하이퍼엑스

서울특별시 성동구 왕십리로 137 성동청년 창업이룸센터 229호