Twitter Table Structure Guide

🐦 트위터 - Cassandra 테이블 설계 가이드

📋 개요

이 문서는 트위터와 같은 대규모 소셜 미디어 플랫폼의 데이터베이스 설계에 대한 종합 가이드입니다.

  • 왜 이렇게 설계해야 하는지

  • 각 테이블의 역할은 무엇인지

  • 어떻게 동작하는지

단계별로 이해할 수 있도록 작성되었습니다.

🤔 왜 Cassandra를 사용하는가?

트위터의 특징

  • 대량의 쓰기: 초당 수십만 개의 트윗 생성

  • 빠른 읽기: 타임라인 조회 시 즉시 응답 필요

  • 수평 확장: 사용자 증가에 따른 서버 확장 필요

  • 시간 기반: 데이터 최신 트윗부터 시간순 정렬 중요

Cassandra의 장점

📊 관계형 DB (MySQL) vs Cassandra

관계형 DB:

  • 복잡한 JOIN 연산 → 느린 읽기 성능

  • 수직 확장 (서버 성능 향상) → 비용 ↗️

  • ACID 보장 → 일관성은 좋지만 성능 ↓

Cassandra:

  • 비정규화된 테이블 → 빠른 읽기 성능 ⚡

  • 수평 확장 (서버 대수 증가) → 비용 효율적

  • 최종 일관성 → 성능 우선, 일관성은 eventual


📊 4개 핵심 테이블 상세 설명

1. 🏠 tweets 테이블 - 트윗의 원본 저장소

역할: 모든 트윗의 "진실의 원천(Source of Truth)"

Java 엔티티:

데이터 예시:

🔍 주요 사용 패턴:

  • POST /tweets: 새 트윗 저장

  • GET /tweets/{tweetId}: 특정 트윗 조회

  • 다른 테이블에서 트윗 상세 정보 참조

⚠️ 중요한 점:

  • 이 테이블은 user_id로 직접 조회하지 않습니다!

  • "특정 사용자의 모든 트윗"은 다른 테이블에서 처리합니다.


2. 👥 followers_by_user 테이블 - 팔로우 관계

역할: "특정 사용자를 팔로우하는 모든 사람들"을 빠르게 찾기

복합 Primary Key 클래스

메인 엔티티

데이터 예시:

🔍 핵심 쿼리:

💡 왜 이렇게 설계했나요?


3. 📱 user_timeline 테이블 - 개인 타임라인 (Fan-out on Write)

역할: 각 사용자의 개인 타임라인을 미리 생성하여 저장

복합 Primary Key 클래스

메인 엔티티

🔄 Fan-out on Write 과정:

1단계: user-A가 "안녕하세요!" 트윗 작성

2단계: user-A의 팔로워들 조회

3단계: 각 팔로워의 타임라인에 트윗 추가

결과 데이터:

🔍 타임라인 조회 (매우 빠름!):

⚡ 성능 특징:

  • 쓰기: O(팔로워 수) - 팔로워 수만큼 쓰기 발생

  • 읽기: O(1) + 조회할 트윗 수 - 매우 빠름!


4. 🌟 celebrity_tweets 테이블 - 인플루언서 트윗 (Fan-out on Read)

역할: 팔로워가 많은 인플루언서의 트윗을 별도 저장

복합 Primary Key 클래스

메인 엔티티

🤔 왜 별도 테이블이 필요한가요?

문제 상황:

해결책: Fan-out on Read:

데이터 예시:


🔄 하이브리드 전략: Fan-out on Write + Fan-out on Read

전체 프로세스 시나리오

시나리오 1: 일반 사용자(user-A)가 트윗 작성

시나리오 2: 인플루언서(아이유)가 트윗 작성

시나리오 3: 사용자(user-1)가 타임라인 조회

성능 비교


🔍 Cassandra 핵심 개념 이해

파티션 키 vs 클러스터링 키

파티션 키 (Partition Key):

클러스터링 키 (Clustering Key):

커서 기반 페이지네이션

기존 OFFSET 방식의 문제점:

Cassandra 커서 방식:


🚀 구현 시 고려사항

1. 인플루언서 판단 기준

2. 배치 처리 최적화

3. 캐시 전략

4. 모니터링 지표


🔧 실제 구현 코드 예시

Repository 계층

Service 계층


💡 트러블슈팅 가이드

자주 발생하는 문제들

1. 타임라인 조회가 느려요

2. Fan-out 쓰기가 너무 느려요

3. 저장 공간이 부족해요

4. 일관성 문제가 발생해요


📚 참고 자료


🎉 마무리

대규모 소셜 미디어 플랫폼의 데이터베이스 설계 원칙의 핵심은 사용 패턴에 맞는 최적화트레이드오프의 균형.

핵심 포인트:

  1. 읽기 최적화: 자주 조회되는 데이터는 미리 계산하여 저장

  2. 쓰기 분산: 비용과 성능을 고려한 하이브리드 전략

  3. 확장성: 사용자 증가에 따른 유연한 아키텍처

Last updated