대규모 시스템을 설계하는 것은 많은 개념을 조합하는 일입니다 — 막대한 규모 처리, 적절한 아키텍처·데이터베이스·캐싱 선택, 트레이드오프 관리. 구체적인 예(소셜 미디어 피드)를 사용하면 각 요소가 어떻게 맞물리는지 보여줍니다.
예: 소셜 미디어 뉴스 피드
요구사항: 수백만 사용자; 콘텐츠 게시; 팔로우한 사용자들의 게시물 피드 조회;
읽기 중심 (게시보다 피드 조회가 훨씬 많음); 낮은 latency; 높은 가용성.
상위 수준 구성 요소:
→ 클라이언트 → LOAD BALANCER → 애플리케이션 서버 (무상태, 수평 확장)
→ 데이터베이스 → 사용자/게시물 데이터 (sharding); 팔로우 그래프
→ 캐싱 (Redis) → hot 피드, 게시물, 사용자 데이터 (읽기 중심 부하에 결정적)
→ CDN → 미디어 (이미지/비디오)
→ 메시지 큐 → 비동기 작업 (fan-out, 알림)
핵심 디자인 결정: 피드 생성
FAN-OUT ON WRITE (push) → 사용자가 게시하면 모든 팔로워의 미리 계산된 피드로 push:
✓ 빠른 피드 읽기 (미리 계산됨) ✗ 수백만 팔로워를 가진 사용자에게 비쌈
(쓰기 증폭)
FAN-OUT ON READ (pull) → 요청 시 피드 구성 (팔로우한 사용자들의 게시물 쿼리):
✓ 저렴한 쓰기 ✗ 더 느린 읽기 (요청 시 계산)
HYBRID → 대부분 push; 셀럽(거대한 팔로잉)은 pull → 트레이드오프 균형
→ 특정 규모/패턴에 대한 트레이드오프 분석을 보여줌.
