🎬1μ–΅ λͺ…이 μ‚¬μš©ν•˜λŠ” TikTokν˜• μ˜μƒ ν”Όλ“œλ₯Ό μ–΄λ–»κ²Œ λ§Œλ“€κΉŒ?

sangjinsuΒ·2025λ…„ 6μ›” 1일
post-thumbnail

β€” μ‹œμŠ€ν…œ 섀계뢀터 μ‹€μ‹œκ°„ 데이터 μ²˜λ¦¬κΉŒμ§€ 기술적으둜 νŒŒν—€μΉ˜κΈ°

System Design: Building TikTok-Style Video Feed for 100 Million Users

πŸ‘€ μ˜μƒμ— λΉ μ Έλ“œλŠ” 우리, κ·Έ λ’€μ—”?

ν•˜λ£¨ 2μ‹œκ°„ 이상 μš°λ¦¬λŠ” μ˜μƒ μ½˜ν…μΈ λ₯Ό μ†ŒλΉ„ν•©λ‹ˆλ‹€.

TikTok, YouTube Shorts, Instagram λ¦΄μŠ€μ— λΉ μ§„ κ²½ν—˜, λˆ„κ΅¬λ‚˜ ν•œ λ²ˆμ―€μ€ 있죠.

ν•˜μ§€λ§Œ 이 μ˜μƒ ν”Όλ“œ λ’€μ—μ„œλŠ” μ–΄λ–€ 기술이 μˆ¨μ–΄μžˆμ„κΉŒμš”?

  • 수천만 λͺ…μ—κ²Œ κ°œμΈν™”λœ ν”Όλ“œλ₯Ό μ–΄λ–»κ²Œ λΉ λ₯΄κ²Œ μ œκ³΅ν• κΉŒ?
  • μ–΄λ–»κ²Œ μ˜μƒ μ „ν™˜μ΄ λΆ€λ“œλŸ½κ³  λŠκΉ€ 없이 μΌμ–΄λ‚ κΉŒ?
  • μ‚¬μš©μž λ°˜μ‘μ€ μ–΄λ–»κ²Œ μ‹€μ‹œκ°„μœΌλ‘œ 반영될까?

이 κΈ€μ—μ„œλŠ” TikTok μŠ€νƒ€μΌ μ˜μƒ ν”Όλ“œ μ‹œμŠ€ν…œμ„ 직접 μ„€κ³„ν•˜λ©΄μ„œ,

κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­, ν™•μž₯μ„±, μ‹€μ‹œκ°„ 데이터 처리 μ „λž΅κΉŒμ§€ λͺ¨λ‘ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€.


🧩 문제 μ •μ˜

μš°λ¦¬λŠ” λ‹€μŒκ³Ό 같은 μ˜μƒ ν”Όλ“œ μ‹œμŠ€ν…œμ„ μ„€κ³„ν•©λ‹ˆλ‹€:

  • μ‚¬μš©μžλŠ” λ¬΄ν•œ 슀크둀둜 μ˜μƒμ„ μ†ŒλΉ„
  • μ’‹μ•„μš”, λŒ“κΈ€, 곡유 λ“±μ˜ λ°˜μ‘ κΈ°λŠ₯ 제곡
  • μ‚¬μš©μž λ°˜μ‘μ— κΈ°λ°˜ν•œ ML 기반 μΆ”μ²œ
  • 단, ML λͺ¨λΈ μžμ²΄λŠ” λΈ”λž™λ°•μŠ€λ‘œ κ°„μ£Ό

βœ… μš”κ΅¬μ‚¬ν•­ 뢄석

πŸ“Œ κΈ°λŠ₯적 μš”κ΅¬μ‚¬ν•­ (FR)

κΈ°λŠ₯μ„€λͺ…
FR-1μ˜μƒ ν”Όλ“œλ₯Ό λ°›μ•„μ˜¬ 수 μžˆμ–΄μ•Ό 함
FR-2λ¬΄ν•œ 슀크둀 ν˜•νƒœλ‘œ ν”Όλ“œλ₯Ό 탐색 κ°€λŠ₯ν•΄μ•Ό 함
FR-3μ‚¬μš©μž λ°˜μ‘(μ’‹μ•„μš”, λŒ“κΈ€ λ“±)을 μˆ˜μ§‘ν•΄μ•Ό 함

πŸ“Œ λΉ„κΈ°λŠ₯적 μš”κ΅¬μ‚¬ν•­ (NFR)

κ΄€λ ¨ FRμš”κ΅¬μ‚¬ν•­
NFR-1ν”Όλ“œ 응닡 μ‹œκ°„μ€ 500ms 이내
NFR-2μ˜μƒ μ „ν™˜μ€ λŠκΉ€ 없이 μžμ—°μŠ€λŸ¬μ›Œμ•Ό 함
NFR-3μ‚¬μš©μž λ°˜μ‘μ€ λΉ„μš© 효율적으둜 μˆ˜μ§‘λ˜κ³  μ‹€μ‹œκ°„ λ°˜μ˜λ˜μ–΄μ•Ό 함

πŸ‘₯ 핡심 μ—”ν„°ν‹°

πŸ‘€ μ‚¬μš©μž (User)

  • κ°œμΈν™” ν”Όλ“œ 제곡
  • μ‹œμ²­ μ‹œκ°„, μ’‹μ•„μš” 기둝, 곡유 μ—¬λΆ€ λ“± λ°˜μ‘ 데이터 ν™œμš©

πŸŽ₯ μ˜μƒ (Video)

  • 메타데이터 + μ˜μƒ 파일 경둜(CDN)
  • μ—…λ‘œλ” 정보 포함

🀝 μƒν˜Έμž‘μš© (Interaction)

  • μ‹œμ²­ μ‹œκ°„, μ’‹μ•„μš”, λŒ“κΈ€, 곡유 λ“±
  • ML μΆ”μ²œμ— ν™œμš©λ˜λŠ” 핡심 μ‹ ν˜Έ

πŸ“Œ 이 μ—”ν„°ν‹° 관계 λͺ¨λΈμ€ ML μ‹œμŠ€ν…œ μž…λ ₯으둜 μ‚¬μš©λ©λ‹ˆλ‹€.


πŸ”Œ API 섀계

1. μ˜μƒ ν”Όλ“œ μš”μ²­

GET /api/v1/feed?limit=20

2. (κΈ°μ‘΄) 슀크둀 기반 μ˜μƒ μš”μ²­ β†’ κ°œμ„  ν›„ 제거됨

3. μ‚¬μš©μž λ°˜μ‘ 전솑

POST /api/v1/engagement

πŸ— High-Level μ‹œμŠ€ν…œ ꡬ쑰

핡심 μ»΄ν¬λ„ŒνŠΈ

  1. Client: ν”Όλ“œ μ†ŒλΉ„ + λ°˜μ‘ 전솑
  2. Feed Service: ν”Όλ“œ μš”μ²­ 처리, λ°˜μ‘ μˆ˜μ§‘
  3. Ranking Service: ML 기반 ν”Όλ“œ μ •λ ¬
  4. CDN: λΉ λ₯Έ μ˜μƒ 전솑

πŸš€ μ£Όμš” κ°œμ„  μ „λž΅

1. ✨ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ¦¬νŽ˜μΉ˜ + Pagination

  • /feed APIμ—μ„œ μ˜μƒ 묢음(batch) 을 λ°›μ•„ ν”„λ¦¬νŽ˜μΉ˜
  • 슀크둀 쀑 API 호좜 제거 β†’ λΆ€λ“œλŸ¬μš΄ UX

2. 🧠 동적 νŽ˜μ΄μ§€λ„€μ΄μ…˜ (Dynamic Pagination)

  • μ‚¬μš©μžλ³„ μ‹œμ²­ νŒ¨ν„΄μ— 따라 응닡 μ˜μƒ 개수 쑰절
    • 예: ν™œλ°œν•œ μœ μ € β†’ 30개, 적은 μœ μ € β†’ 5개

3. 🚫 μ„œλ²„ μΊμ‹œ 제거

  • Feed Ranking Serviceκ°€ ν”Όλ“œλ₯Ό 맀번 생성
  • μ΅œμ‹  λͺ¨λΈ 반영 및 신선도 κ°œμ„ 

πŸ“Ό μ˜μƒ 전솑 μ΅œμ ν™”

μ „λž΅μ„€λͺ…
CDN지리적 μ—£μ§€ λ…Έλ“œμ—μ„œ λΉ λ₯΄κ²Œ 전달
해상도 뢄리144p~480pκΉŒμ§€ μ μ‘ν˜• 제곡
μ„Έκ·Έλ¨ΌνŠΈ λΆ„ν• μ΄ˆλ°˜λ§Œ λ¨Όμ € λ°›μ•„ λΉ λ₯Έ μ‹œμž‘
Adaptive Streamingλ„€νŠΈμ›Œν¬ 상황에 따라 μžλ™ 쑰절

πŸ”„ λ°˜μ‘ 데이터 μˆ˜μ§‘ μ „λž΅

A. 맀번 전솑

  • μ‹€μ‹œκ°„ 반영 κ°€λŠ₯ν•˜μ§€λ§Œ, λ„€νŠΈμ›Œν¬ λΉ„μš© 증가

B. 배치 전솑

  • μ—¬λŸ¬ λ°˜μ‘μ„ λͺ¨μ•„ ν•œ λ²ˆμ— 전솑 β†’ λΉ„μš© 절감

βœ… ν•˜μ΄λΈŒλ¦¬λ“œ μ „λž΅

  1. 3~5개 λ°˜μ‘μ„ 둜컬 버퍼에 μ €μž₯
  2. 슀크둀 멈좀 / μ•± μ’…λ£Œ / μ‹œκ°„ 초과 μ‹œ 전솑
  3. 둜컬 λ””μŠ€ν¬μ— μ €μž₯ β†’ 데이터 손싀 λ°©μ§€

κ°œμ„ λœ μ‹œμŠ€ν…œ ꡬ쑰


🧠 섀계 μ „λž΅ μš”μ•½

λ¬Έμ œν•΄κ²° μ „λž΅
λ‹€μ–‘ν•œ ν™œλ™λŸ‰Dynamic Pagination
UX μ΅œμ ν™”ν΄λΌμ΄μ–ΈνŠΈ Pre-fetch
μ‹ μ„ λ„μ„œλ²„ μΊμ‹œ 제거 + μ‹€μ‹œκ°„ λž­ν‚Ή
λΉ„μš© νš¨μœ¨μ„±ν•˜μ΄λΈŒλ¦¬λ“œ 배치 전솑

🌍 ν™•μž₯ κ°€λŠ₯μ„±κ³Ό 적용 λΆ„μ•Ό

이 μ„€κ³„λŠ” μ˜μƒ ν”Όλ“œ 외에도 λ‹€μŒ μ˜μ—­μ— μ‘μš© κ°€λŠ₯ν•©λ‹ˆλ‹€:

  • πŸ›’ 이컀머슀 μƒν’ˆ μΆ”μ²œ
  • πŸ“° μ†Œμ…œ λ―Έλ””μ–΄ ν”Όλ“œ
  • ❀️ λ°μ΄νŒ… μ•± λ§€μΉ­

🎯 마무리

TikTok, YouTube Shorts 같은 μ˜μƒ ν”Όλ“œλŠ” λ‹¨μˆœνžˆ λ³΄μ—¬μ§€λŠ” UI μ΄μƒμ˜ λ³΅μž‘ν•œ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.

μ‚¬μš©μžμ˜ λͺ°μž…을 μœ μ§€ν•˜κΈ° μœ„ν•΄, μˆ˜λ§Žμ€ μ„±λŠ₯ μ΅œμ ν™”, μ‚¬μš©μž κ²½ν—˜ κ°œμ„ , ML 기반 μΆ”μ²œ μ „λž΅μ΄ μˆ¨μ–΄ 있죠.


πŸ“š ν•¨κ»˜ 고민해보면 쒋은 주제

  • μ‹€μ‹œκ°„ λž­ν‚Ή μ‹œμŠ€ν…œμ—μ„œ ML λͺ¨λΈ 배포 μ „λž΅μ€?
  • μ½˜ν…μΈ  μΆ”μ²œμ—μ„œ μ½œλ“œ μŠ€νƒ€νŠΈ λ¬Έμ œλŠ” μ–΄λ–»κ²Œ ν•΄κ²°ν• κΉŒ?
  • CDN μ΅œμ ν™” 외에도 P2P μ˜μƒ 전달 λ°©μ‹μ˜ κ°€λŠ₯성은?

profile
κ°œλ°œμ— 집쀑할 수 μžˆλŠ”, 이슈λ₯Ό μ€„μ΄λŠ” ν™˜κ²½μ„ λ§Œλ“€κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

0개의 λŒ“κΈ€