대규모 팬아웃: 푸시 vs 풀 전략 in Distributed Systems

발행: (2025년 12월 21일 오후 09:34 GMT+9)
8 min read
원문: Dev.to

Source: Dev.to

현대 시스템은 데이터를 저장하지 못해서 실패하는 것이 아니라, 올바른 데이터를 올바른 소비자에게 적시에 전달하지 못해서 실패합니다.
팬아웃 문제는 분산 시스템에서 가장 근본적인 도전 과제 중 하나이며, 특히 소셜 미디어 피드, 알림 시스템, 메신저 플랫폼, 이벤트‑드리븐 아키텍처에서 두드러집니다.

단일 이벤트가 발생했을 때, 이를 수백만 명의 소비자에게 효율적으로 전달하려면 어떻게 해야 할까요? 주요 전략 두 가지는 다음과 같습니다:

  • Fanout‑on‑Write (Push)
  • Fanout‑on‑Read (Pull)

두 방법 모두 유효하고 널리 사용되지만, 각각 심각한 트레이드‑오프를 동반합니다.

팬아웃 문제

  • 하나의 쓰기 → 다수의 읽기
  • 목표: 사용자가 수백만 명의 팔로워를 가지고 있더라도 모든 팔로워에게 저지연, 개인화된 피드를 제공하는 것.

나이브한 해결책—“그냥 모든 사람에게 게시물을 보내라”—는 다음 문제들 때문에 무너진다:

  • 쓰기 증폭
  • 저장소 폭발
  • 핫 파티션
  • 지연 시간 급증

Fanout‑on‑Write (푸시)

사용자가 콘텐츠를 생성하면 시스템이 즉시 푸시하여 각 팔로워의 사전 계산된 피드에 콘텐츠를 전달합니다.

작동 방식

User posts → System pushes post to N follower feeds

장점

  • 초고속 피드 읽기
  • 예측 가능한 읽기 지연시간
  • 간단한 읽기 쿼리 (단일 조회)

비용 / 트레이드오프

  • 대규모 쓰기 증폭 (예: 팔로워가 1억 명인 유명인이 한 게시물을 올리면 1억 개의 피드 쓰기가 발생)
  • 높은 저장소 사용량
  • 활발한 사용자가 시스템에 과부하를 일으킬 수 있음

Fanout‑on‑Read (Pull)

사용자가 피드를 열면, 시스템은 pull 방식으로 사용자가 팔로우하는 계정들의 최신 게시물을 가져와서 병합하고, 순위를 매기며, 읽는 시점에 필터링합니다.

작동 방식

User opens feed → System pulls content from many sources

장점

  • 쓰기 비용 최소화 (팔로워당 쓰기 없음)
  • 극단적인 팬아웃을 가진 사용자(셀러브리티)에게도 잘 확장됩니다
  • 스토리지 효율적

비용 / 트레이드오프

  • 읽기가 더 복잡하고 비용이 많이 듭니다
  • 푸시 방식에 비해 읽기 지연 시간이 더 깁니다
  • 효율적인 캐시가 어려워집니다

하이브리드 팬아웃 전략

Pure push or pure pull is rare at large scale; most platforms use a hybrid approach.
대규모에서는 순수 푸시나 순수 풀 방식이 드물며, 대부분의 플랫폼이 하이브리드 방식을 사용합니다.

선택적 팬아웃

  • Push for normal users (bounded fanout)
    • 일반 사용자에 대해 푸시 (제한된 팬아웃)
  • Pull for celebrities or high‑fanout content
    • 유명인이나 고팬아웃 콘텐츠에 대해

하이브리드가 효과적인 이유

  • Top ~0.01 % of users generate extreme fanout; pushing their posts would melt storage and queues.
    • 상위 ~0.01 % 사용자가 극단적인 팬아웃을 생성합니다; 이들의 게시물을 푸시하면 저장소와 큐가 과부하됩니다.
  • Precomputation, ranking models, and feed materialization are applied where they provide the most benefit.
    • 사전 계산, 랭킹 모델, 피드 물리화가 가장 효과적인 곳에 적용됩니다.

일반적인 구성

  • Precomputed feed entries (push)
    • 사전 계산된 피드 항목 (푸시)
  • Dynamically fetched content (pull) – e.g., suggested posts, ads, reels
    • 동적으로 가져오는 콘텐츠 (풀) – 예: 추천 게시물, 광고, 릴

도메인별 하이브리드

  • Professional graphs (smaller, denser) → primarily push
    • 전문가 그래프 (작고 밀집) → 주로 푸시
  • Interest‑based feeds (large, sparse) → primarily pull, using recommendation pools and ML‑ranked candidate sets
    • 관심 기반 피드 (크고 희소) → 주로 풀, 추천 풀 및 머신러닝 순위 후보 세트를 사용

소셜 피드 이상의 팬아웃

전략전형적인 사용 사례핵심 특성
푸시 팬아웃모바일 푸시 알림, 비상 경보, 거래 알림, 캐시 무효화, 보안 패치메시지 큐 또는 토픽 기반 퍼브/섭 사용, 속도 제한 필요, 저지연 전달 제공
풀 팬아웃카프카 소비자, 프로메테우스 스크래핑, 드물게 접근되는 자산의 지연 페치소비자가 파티션에서 풀링, 백프레셔, 재생 가능성 및 장애 격리 제공
하이브리드가격 틱(푸시) + 히스토리 데이터(풀), 킬스위치 업데이트(푸시) + 주기적 일관성 검사(풀)대역폭, 지연시간 및 저장 제약을 균형 있게 조정

올바른 Fanout 전략 선택 방법

Fanout‑on‑Write (Push)를 사용할 때:

  • 읽기 지연 시간이 최소이어야 함
  • Fanout 규모가 제한적일 때 (예: 대부분의 사용자)
  • 저장소가 저렴하고 풍부함
  • 예측 가능한 성능이 중요함

Fanout‑on‑Read (Pull)를 사용할 때:

  • Fanout 규모가 무제한일 때 (예: 유명인)
  • 쓰기 비용이 저렴해야 함
  • 소비자 수요가 크게 변동함
  • 하위 서비스 보호를 위해 백프레셔가 필요함

하이브리드 접근법을 사용할 때:

  • 대부분의 사용자에게 저지연 읽기와 극한 Fanout에 대한 확장 가능한 처리가 모두 필요할 때
  • 일부 콘텐츠는 미리 계산하고 나머지는 동적으로 가져올 수 있을 때

Fanout를 물류에 비유하면:

  • Push = 집으로 배달 – 빠르고 예측 가능하지만 비용이 더 많이 듭니다.
  • Pull = 창고 픽업 – 저렴하고 유연하지만 느립니다.
  • Hybrid = Amazon Prime – 고우선순위 항목에 대한 빠른 배송과 나머지에 대한 비용 효율적인 처리를 결합합니다.
Back to Blog

관련 글

더 보기 »

데이터베이스 샤딩 vs 파티션

데이터베이스 샤딩과 파티션의 차이점 데이터베이스 샤딩이란 - Horizontal Data Distribution – 데이터가 shards로 분할되어 각각 별도의 …