Phase 8레슨 36

Instagram 아키텍처

Post, Feed, Timeline Fan-out, CDN — 수억 사용자의 사진을 어떻게

💡ELI5·

우편함과 피드

Fan-out on Write (쓰기 시 복사):
  친구A 게시 → [나의 피드][친구B 피드][친구C 피드]에 미리 넣음
  → 내가 피드 열면 이미 준비됨 (빠름)
  → but 친구A가 1만 팔로워면 1만 번 복사 (느림)

Fan-out on Read (읽기 시 조합):
  친구A 게시 → 저장만
  → 내가 피드 열 때 팔로우하는 사람들 최신 게시물을 실시간 조합
  → 빠른 쓰기 but 느린 읽기
💡 비유우편함. Fan-out on Write = 우체부가 각자 우편함에 미리 넣어둠 (열면 바로 있음). Fan-out on Read = 우체국에 쌓아두고, 열 때마다 가져옴 (열 때 시간 걸림).
🔬Deep Dive·

Instagram 아키텍처 진화

초기 (2010):
  Django + PostgreSQL (단일)
  → 사용자 증가

중기:
  + Redis (피드 타임라인)
  + Cassandra (사진 메타데이터)
  + S3 + CDN (사진 저장)
  + Sharding (사용자 DB)

현재:
  + 알고리즘 피드 (랭킹 서비스)
  + GraphQL API
  + 멀티 리전 복제
  + ML 기반 추천
Instagram은 '처음부터 완벽한 분산 시스템'이 아니라, 단일 PostgreSQL에서 시작하여 필요에 따라 점진적으로 분리. 이것이 Evolutionary Architecture의 교과서적 사례.
🔬Deep Dive·

하이브리드 Fan-out

사용자 유형팔로워 수방식이유
일반 사용자< 1천Fan-out on Write쓰기 비용 낮음, 읽기 빠름
인플루언서수백만~수천만Fan-out on Read쓰기 폭발 방지
중간 규모수천~수만선택적 Fan-out비용과 지연의 균형
⚖️Trade-off·

피드 설계의 Trade-off

Fan-out on WriteFan-out on Read
읽기 매우 빠름 (미리 준비)쓰기 매우 빠름 (저장만)
유명인 쓰기 폭발피드 읽기 지연
저장 비용 (피드 복사본)읽기마다 조합 연산
삭제 시 여러 피드 정리 필요실시간 조합이 복잡

❓ 체크포인트 질문

  1. 1.Fan-out on Write와 Fan-out on Read의 차이는?
  2. 2.Instagram이 사진 저장에 CDN을 사용하는 이유는?
  3. 3.인플루언서(수천만 팔로워)의 게시물이 Fan-out on Write의 문제인 이유는?
  4. 4.Instagram이 초기에 단일 PostgreSQL로 시작할 수 있었던 이유는?
  5. 5.피드의 '최신순' 정렬이 단순 timestamp로 안 되는 이유는?