Zettelkasten

팬아웃은 push로 미리 꽂고 pull로 즉석에서 합치는데, 유명인만 pull로 빼는 하이브리드가 답이다

·수정 1

요약

  • 피드/타임라인을 만들 때 "팔로우한 사람들의 글을 언제 모아주느냐"가 팬아웃 문제다.
  • push(쓰기 시점)와 pull(읽기 시점)은 비용이 터지는 지점이 정반대라, 둘을 섞은 하이브리드가 실제 해법이다.

본문

두 방식과 정반대로 터지는 비용

push (쓰기 시점 fan-out, fan-out on write)

  • A가 글을 올리면 → 그 즉시 A의 팔로워 전원 피드함에 글을 복사해 꽂아둠
  • 읽을 때는 자기 피드함만 보면 됨 → 읽기 빠름
  • 문제: 팔로워 많은 유저(유명인) 가 글 하나 올리면 팔로워 수만큼 쓰기가 일어남 → 쓰기 폭증(write amplification)

pull (읽기 시점 fan-out, fan-out on read)

  • 글을 올릴 때 아무 데도 안 꽂음
  • 읽을 때 내가 팔로잉한 사람들 글을 일일이 확인해서 모아 합침 → 쓰기 가벼움
  • 문제: 팔로잉을 많이 한 유저 가 피드를 열 때마다 수많은 사람을 조회+머지 → 읽기 폭증

핵심은 두 문제의 축이 정반대라는 것:

  • push가 터지는 건 팔로워(out-degree)가 많은 쪽 — 쓸 때
  • pull이 터지는 건 팔로잉(in-degree)이 많은 쪽 — 읽을 때

하이브리드 — 계정을 둘로 나눈다

기준은 팔로워 수. 임계값을 넘는 계정(유명인)만 다르게 처리한다.

  • 일반 유저 → push. 글 쓰면 팔로워 피드함에 미리 꽂아둠
  • 유명인 → push 안 함. 읽는 시점에 pull

유저가 피드를 열었을 때 최종 화면은:

최종 피드 = (미리 꽂혀 있던 일반 유저 글들)
          + (내가 팔로잉한 유명인의 새 글을 읽는 시점에 pull)
          → 둘을 시간순으로 정렬해서 보여줌

이러면 유명인 글 때문에 팔로워 수만큼 쓰는 폭증을 피하고(유명인은 pull), 일반 유저 글은 미리 꽂혀 있어 읽기가 여전히 빠르다(일반인은 push). 즉 양쪽이 터지는 지점을 각각 피해 간다.

위치

  • Twitter(현 X)가 쓰는 방식으로 알려진 대표적 하이브리드 팬아웃 설계다.
  • 임계값을 팔로워 수만으로 자르는 게 가장 단순한 형태고, 활동성·접속 여부 등을 더 섞기도 한다. (← 추가 학습 포인트)

참고