๐Ÿ““ 15์žฅ. ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ์„ค๊ณ„

onyยท2023๋…„ 1์›” 19์ผ
1

๐Ÿ“š book

๋ชฉ๋ก ๋ณด๊ธฐ
9/10
post-thumbnail

1๋‹จ๊ณ„. ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ •

๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ

  • ํŒŒ์ผ ์ถ”๊ฐ€. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ์•ˆ์œผ๋กœ drag-and-drop ๊ฐ€๋Šฅํ•˜๋„๋ก
  • ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
  • ์—ฌ๋Ÿฌ ๋‹จ๋ง์— ํŒŒ์ผ ๋™๊ธฐํ™”. ํ•œ ๋‹จ๋ง์—์„œ ํŒŒ์ผ ์ถ”๊ฐ€ ์‹œ ๋‹ค๋ฅธ ๋‹จ๋ง์—๋„ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”
  • ํŒŒ์ผ ๊ฐฑ์‹  ์ด๋ ฅ ์กฐํšŒ(revision history)
  • ํŒŒ์ผ ๊ณต์œ 
  • ํŒŒ์ผ์ด ํŽธ์ง‘๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ๊ณต์œ ๋˜์—ˆ์„ ๋•Œ ์•Œ๋ฆผ ํ‘œ์‹œ

๋น„๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ

  • ์•ˆ์ •์„ฑ: ์ €์žฅ์†Œ ์‹œ์Šคํ…œ์—์„œ ์•ˆ์ •์„ฑ์€ ๋งค์šฐ ์ค‘์š”. ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฐœ์ƒํ•˜๋ฉด ์•ˆ๋จ
  • ๋น ๋ฅธ ๋™๊ธฐํ™” ์†๋„
  • ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ: ๋„ˆ๋ฌด ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ๋ถˆํŽธ ์ดˆ๋ž˜
  • ๊ทœ๋ชจ ํ™•์žฅ์„ฑ: ์•„์ฃผ ๋งŽ์€ ์–‘์˜ ํŠธ๋ž˜ํ”ฝ๋„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
  • ๋†’์€ ๊ฐ€์šฉ์„ฑ: ์ผ๋ถ€ ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, ๋Š๋ ค์ง€๊ฑฐ๋‚˜, ๋„คํŠธ์›Œํฌ ์ผ๋ถ€๊ฐ€ ๋Š๊ฒจ๋„ ์‹œ์Šคํ…œ์€ ๊ณ„์† ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ

๊ฐœ๋žต์  ์ถ”์ •์น˜

  • ๊ฐ€์ž… ์‚ฌ์šฉ์ž ์˜ค์ฒœ๋งŒ๋ช…. ์ฒœ๋งŒ๋ช…์˜ DAU ์‚ฌ์šฉ์ž.
  • ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ 10GB์˜ ๋ฌด๋ฃŒ ์ €์žฅ๊ณต๊ฐ„ ํ• ๋‹น
  • ๋งค์ผ ๊ฐ ์‚ฌ์šฉ์ž๊ฐ€ ํ‰๊ท  2๊ฐœ์˜ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•œ๋‹ค๊ณ  ๊ฐ€์ •. ๊ฐ ํŒŒ์ผ์˜ ํ‰๊ท  ํฌ๊ธฐ๋Š” ์•ฝ 500KB
  • ์ฝ๊ธฐ:์“ฐ๊ธฐ ๋น„์œจ์€ 1:1
  • ํ•„์š”ํ•œ ์ €์žฅ๊ณต๊ฐ„ ์ด๋Ÿ‰ = ์˜ค์ฒœ๋งŒ ์‚ฌ์šฉ์ž * 10GB = 500ํŽ˜ํƒ€๋ฐ”์ดํŠธ(Petabyte)
  • ์—…๋กœ๋“œ API QPS = ์ฒœ๋งŒ ์‚ฌ์šฉ์ž * 2ํšŒ ์—…๋กœ๋“œ/24์‹œ๊ฐ„/3600์ดˆ = ์•ฝ 240
  • ์ตœ๋Œ€ QPS = OPS * 2 = 480

2๋‹จ๊ณ„. ๊ฐœ๋žต์  ์„ค๊ณ„์•ˆ ์ œ์‹œ ๋ฐ ๋™์˜ ๊ตฌํ•˜๊ธฐ

์„œ๋ฒ„ ๊ตฌ์„ฑ

  • ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๊ณ  ๋‹ค์šด๋กœ๋“œ ํ•˜๋Š” ๊ณผ์ •์„ ์ฒ˜๋ฆฌํ•  ์›น ์„œ๋ฒ„
  • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ, ๋กœ๊ทธ์ธ ์ •๋ณด, ํŒŒ์ผ ์ •๋ณด ๋“ฑ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ํŒŒ์ผ์„ ์ €์žฅํ•  ์ €์žฅ์†Œ ์‹œ์Šคํ…œ. ํŒŒ์ผ ์ €์žฅ์„ ์œ„ํ•ด 1TB์˜ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ๊ฒƒ

API

1. ํŒŒ์ผ ์—…๋กœ๋“œ API

  • ๋‹จ์ˆœ ์—…๋กœ๋“œ : ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘์„ ๋•Œ ์‚ฌ์šฉ
  • ์ด์–ด ์˜ฌ๋ฆฌ๊ธฐ(resumable upload) : ํŒŒ์ผ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฌ๊ณ  ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋กœ ์—…๋กœ๋“œ๊ฐ€ ์ค‘๋‹จ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ์‚ฌ์šฉ
    • ์ด์–ด์˜ฌ๋ฆฌ๊ธฐ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ์„ธ ๋‹จ๊ณ„์˜ ์ ˆ์ฐจ๋กœ ์ด๋ฃจ์–ด์ง
      1. ์ด์–ด์˜ฌ๋ฆฌ๊ธฐ URL์„ ๋ฐ›๊ธฐ ์œ„ํ•œ ์ตœ์ดˆ ์š”์ฒญ ์ „์†ก
      2. ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  ์—…๋กœ๋“œ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง
      3. ์—…๋กœ๋“œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์žฅ์•  ๋ฐœ์ƒ์‹œ์ ๋ถ€ํ„ฐ ์—…๋กœ๋“œ๋ฅผ ์žฌ์‹œ์ž‘

2. ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ API

3. ํŒŒ์ผ ๊ฐฑ์‹  ํžˆ์Šคํ† ๋ฆฌ API

์ง€๊ธˆ๊นŒ์ง€ ๋‚˜์—ดํ•œ ๋ชจ๋“  API ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ํ•„์š”๋กœ ํ•˜๊ณ  HTTPS ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.
SSL(Secure Socket Layer)๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜๋Š” ์ด์œ  : ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ชฉ์ 

ํ•œ ๋Œ€ ์„œ๋ฒ„์˜ ์ œ์•ฝ ๊ทน๋ณต

์—…๋กœ๋“œ ํŒŒ์ผ์ด ๋งŽ์•„์ง€๋ฉด ํŒŒ์ผ ์‹œ์Šคํ…œ ์šฉ๋Ÿ‰ ๋ถ€์กฑํ•˜๊ฒŒ ๋จ..

ํ•ด๊ฒฐ์ฑ…1. ๋ฐ์ดํ„ฐ๋ฅผ ์ƒค๋”ฉ(sharding) ํ•˜์—ฌ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋‚˜๋ˆ„์–ด ์ €์žฅ

์•„๋งˆ์กดS3

  • ๋‹ค์ค‘ํ™” ์ง€์›. ๊ฐ™์€ ์ง€์—ญ ์•ˆ์—์„œ ๋‹ค์ค‘ํ™”๋„ ๊ฐ€๋Šฅํ•˜๊ณ , ์—ฌ๋Ÿฌ ์ง€์—ญ์— ๊ฑธ์ณ ๋‹ค์ค‘ํ™”๋„ ๊ฐ€๋Šฅ : AWS ์„œ๋น„์Šค ์ง€์—ญ(region)์€ ์•„๋งˆ์กด AWS๊ฐ€ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋ฅผ ์šด์˜ํ•˜๋Š” ์ง€๋ฆฌ์  ์˜์—ญ
    • ์—ฌ๋Ÿฌ ์ง€์—ญ์— ๊ฑธ์ณ ๋‹ค์ค‘ํ™”ํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์†์‹ค ๋ง‰๊ณ , ๊ฐ€์šฉ์„ฑ ์ตœ๋Œ€ ๋ณด์žฅ๋จ

๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ : ๋„คํŠธ์ฟผ์œผ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ๋ชฉ์ 
์›น ์„œ๋ฒ„ : ํŠธ๋ž˜ํ”ฝ์ด ํญ์ฆํ•ด๋„ ์‰ฝ๊ฒŒ ๋Œ€์‘ ๊ฐ€๋Šฅ
๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํŒŒ์ผ ์ €์žฅ ์„œ๋ฒ„์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ SPOF(Single Point of Failure) ์„ ํšŒํ”ผ
ํŒŒ์ผ ์ €์žฅ์†Œ : S3๋ฅผ ํŒŒ์ผ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ€์šฉ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ๋ฌด์†์‹ค์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ง€์—ญ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ค‘ํ™”

์œ„์˜ ์‚ฌํ•ญ๋“ค์— ๋งž์ถฐ ์ˆ˜์ •ํ•œ ์„ค๊ณ„์•ˆ

๋™๊ธฐํ™” ์ถฉ๋Œ

๋จผ์ € ์ฒ˜๋ฆฌ๋˜๋Š” ๋ณ€๊ฒฝ์€ ์„ฑ๊ณตํ•œ ๊ฒƒ์œผ๋กœ ๋ณด๊ณ , ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ๋˜๋Š” ๋ณ€๊ฒฝ์€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ
โ†’ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ์ ์— ์‹œ์Šคํ…œ ๋‚ด์—๋Š” ๊ฐ™์€ ํŒŒ์ผ์ด 2๊ฐ€์ง€ ๋ฒ„์ „์œผ๋กœ ์กด์žฌ : ์‚ฌ์šฉ์ž2 ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋กœ์ปฌ ์‚ฌ๋ณธ(local copy) ๊ณผ ์„œ๋ฒ„์— ์žˆ๋Š” ์ตœ์‹  ๋ฒ„์ „
โ†’ ์ด ์ƒํƒœ์—์„œ ์‚ฌ์šฉ์ž๋Š” ๋‘ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น  ์ง€ ์•„๋‹ˆ๋ฉด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ๋Œ€์ฒดํ•  ์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.

Differential Synchronization
Differential Synchronization - Youtube Talk

์ผ๋‹จ์€ ๋ฉ”๋ชจํ•ด๋‘๊ณ  ์ถ”ํ›„์— ์ฝ์–ด๋ณด๊ธฐ๋กœ ํ•œ๋‹ค.

๊ฐœ๋žต์  ์„ค๊ณ„์•ˆ

  1. ๋ธ”๋ก ์ €์žฅ์†Œ ์„œ๋ฒ„(block server) : ํŒŒ์ผ ๋ธ”๋ก์„ ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•˜๋Š” ์„œ๋ฒ„. ๋ธ”๋ก ์ˆ˜์ค€ ์ €์žฅ์†Œ(block-level storage). ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ธฐ์ˆ . ์ด ์ €์žฅ์†Œ๋Š” ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ธ”๋ก์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ €์žฅํ•˜๋ฉฐ ๊ฐ ๋ธ”๋ก์—๋Š” ๊ณ ์œ ํ•œ ํ•ด์‹œ๊ฐ’ ์ด ํ• ๋‹น๋จ. ์ด ํ•ด์‹œ๊ฐ’์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ. ์˜ˆ์‹œ ์„ค๊ณ„์•ˆ์˜ ๊ฒฝ์šฐ ํ•œ ๋ธ”๋ก์€ dropbox์˜ ์‚ฌ๋ก€๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ตœ๋Œ€ 4MB ๋กœ ์ง€์ •
  2. ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ
  3. ์•„์นด์ด๋น™ ์ €์žฅ์†Œ(cold storage) : ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋น„ํ™œ์„ฑ(inactive) ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ
  4. ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ
  5. API ์„œ๋ฒ„ : ํŒŒ์ผ ์—…๋กœ๋“œ ์™ธ์— ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„. ์‚ฌ์šฉ์ž ์ธ์ฆ, ์‚ฌ์šฉ์ž ํ”„๋กœํŒŒ์ผ ๊ด€๋ฆฌ, ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ๋“ฑ์— ์‚ฌ์šฉ
  6. ์•Œ๋ฆผ ์„œ๋น„์Šค : ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•Œ๋ฆฌ๋Š”๋ฐ ์“ฐ์ด๋Š” ๋ฐœ์ƒ/๊ตฌ๋… ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ
  7. ์˜คํ”„๋ผ์ธ ์‚ฌ์šฉ์ž ๋ฐฑ์—… ํ(offline backup queue) : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์† ์ค‘์ด ์•„๋‹ˆ๋ผ ํŒŒ์ผ์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์„ ๋•Œ - ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ด ํ์— ๋‘์–ด ๋‚˜์ค‘์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†ํ–ˆ์„ ๋•Œ ๋™๊ธฐํ™”๋  ์ˆ˜ ์žˆ๋„๋ก...

3๋‹จ๊ณ„. ์ƒ์„ธ ์„ค๊ณ„

๋ธ”๋ก ์ €์žฅ์†Œ ์„œ๋ฒ„

์ •๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ๋˜๋Š” ํฐ ํŒŒ์ผ๋“ค์„ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ํŒŒ์ผ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋ฉด ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์„ ๋งŽ์ด ์žก์•„๋จน๊ฒŒ ๋˜๋Š”๋ฐ.. ์ด๋ฅผ ์ตœ์ ํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋ธํƒ€ ๋™๊ธฐํ™”(delta sync) : ํŒŒ์ผ์ด ์ˆ˜์ •๋˜๋ฉด ์ „์ฒด ํŒŒ์ผ ๋Œ€์‹  ์ˆ˜์ •์ด ์ผ์–ด๋‚œ ๋ธ”๋ก๋งŒ ๋™๊ธฐํ™”
  • ์••์ถ•(compression) : ๋ธ”๋ก ๋‹จ์œ„๋กœ ์••์ถ•ํ•ด ์ฃผ๋ฉด ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ๋งŽ์ด ์ค„์ผ ์ˆ˜ ์žˆ์Œ. ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํŒŒ์ผ ์œ ํ˜•์— ๋”ฐ๋ผ ์ง€์ •.

๋ธ”๋ก ์ €์žฅ์†Œ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ํŒŒ์ผ์„ ๋ธ”๋ก ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์•ผ ํ•˜๊ณ , ๊ฐ ๋ธ”๋ก์— ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด์•ผ ํ•˜๊ณ , ์•”ํ˜ธํ™”๊นŒ์ง€ ํ•ด์•ผ ํ•จ. ์•„์šธ๋Ÿฌ ์ „์ฒด ํŒŒ์ผ์„ ์ €์žฅ์†Œ ์‹œ์Šคํ…œ์œผ๋กœ ๋ณด๋‚ด๋Š” ๋Œ€์‹  ์ˆ˜์ •๋œ ๋ธ”๋ก๋งŒ ์ „์†กํ•ด์•ผ ํ•จ.

๋†’์€ ์ผ๊ด€์„ฑ ์š”๊ตฌ์‚ฌํ•ญ

๊ฐ™์€ ํŒŒ์ผ์ด ๋‹จ๋ง์ด๋‚˜ ์‚ฌ์šฉ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ด๋ฉด ์•ˆ๋จ
๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์บ์‹œ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ธต์—๋„ ๊ฐ™์€ ์›์น™์ด ์ ์šฉ๋˜์–ด์•ผ ํ•จ

๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋Š” ๋ณดํ†ต ์ตœ์ข… ์ผ๊ด€์„ฑ(eventual consistency) ๋ชจ๋ธ ์„ ์ง€์›

๊ฐ•ํ•œ ์ผ๊ด€์„ฑ์„ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ...?

  1. ์บ์‹œ์— ๋ณด๊ด€๋œ ์‚ฌ๋ณธ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ์›๋ณธ(master)์ด ์ผ์น˜
  2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณด๊ด€๋œ ์›๋ณธ์— ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์บ์‹œ์— ์žˆ๋Š” ์‚ฌ๋ณธ์„ ๋ฌดํšจํ™”

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์Šคํ‚ค๋งˆ ์„ค๊ณ„์•ˆ

์—…๋กœ๋“œ ์ ˆ์ฐจ

๋‘ ๊ฐœ ์š”์ฒญ์ด ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ „์†ก๋œ ์ƒํ™ฉ

์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์€ ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ.
๋‘ ๋ฒˆ์งธ ์š”์ฒญ์€ ํŒŒ์ผ์„ ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ๋กœ ์—…๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ.
โ†’ ์ „๋ถ€ ํด๋ผ์ด์–ธํŠธ1 ์ด ๋ณด๋‚ธ ๊ฒƒ

  1. ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

    • ํด๋ผ์ด์–ธํŠธ1 ์ด ์ƒˆ ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ ์ „์†ก
    • ์ƒˆ ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ์—…๋กœ๋“œ ์ƒํƒœ๋ฅผ ๋Œ€๊ธฐ์ค‘(pending)์œผ๋กœ ๋ณ€๊ฒฝ
    • ์ƒˆ ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์—ˆ์Œ์„ ์•Œ๋ฆผ ์„œ๋น„์Šค์— ํ†ต์ง€
    • ์•Œ๋ฆผ ์„œ๋น„์Šค๋Š” ๊ด€๋ จ ํด๋ผ์ด์–ธํŠธ(ํด๋ผ์ด์–ธํŠธ2) ์—๊ฒŒ ํŒŒ์ผ์ด ์—…๋กœ๋“œ๋˜๊ณ  ์žˆ์Œ์„ ์•Œ๋ฆผ
  2. ํŒŒ์ผ์„ ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ์— ์—…๋กœ๋“œ

    • ํด๋ผ์ด์–ธํŠธ1 ์ด ํŒŒ์ผ์„ ๋ธ”๋ก ์ €์žฅ์†Œ ์„œ๋ฒ„์— ์—…๋กœ๋“œ
    • ๋ธ”๋ก ์ €์žฅ์†Œ ์„œ๋ฒ„๋Š” ํŒŒ์ผ์„ ๋ธ”๋ก ๋‹จ์œ„๋กœ ์ชผ๊ฐ  ๋‹ค์Œ ์••์ถ•ํ•˜๊ณ  ์•”ํ˜ธํ™” ํ•œ ๋‹ค์Œ ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ์— ์ „์†ก
    • ์—…๋กœ๋“œ๊ฐ€ ๋๋‚˜๋ฉด ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€๋Š” ์™„๋ฃŒ ์ฝœ๋ฐฑ(callback)์„ ํ˜ธ์ถœ. ์ด ์ฝœ๋ฐฑ ํ˜ธ์ถœ์€ API ์„œ๋ฒ„๋กœ ์ „์†ก
    • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ DB์— ๊ธฐ๋ก๋œ ํ•ด๋‹น ํŒŒ์ผ์˜ ์ƒํƒœ๋ฅผ ์™„๋ฃŒ(uploaded)๋กœ ๋ณ€๊ฒฝ
    • ์•Œ๋ฆผ ์„œ๋น„์Šค์— ํŒŒ์ผ ์—…๋กœ๋“œ๊ฐ€ ๋๋‚ฌ์Œ์„ ํ†ต์ง€
    • ์•Œ๋ฆผ ์„œ๋น„์Šค๋Š” ๊ด€๋ จ ํด๋ผ์ด์–ธํŠธ(ํด๋ผ์ด์–ธํŠธ2) ์—๊ฒŒ ํŒŒ์ผ ์—…๋กœ๋“œ๊ฐ€ ๋๋‚ฌ์Œ์„ ์•Œ๋ฆผ

๋‹ค์šด๋กœ๋“œ ์ ˆ์ฐจ

์•Œ๋ฆผ ์„œ๋น„์Šค

ํŒŒ์ผ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ์ฝœ์—์„œ ํŒŒ์ผ์ด ์ˆ˜์ •๋˜์—ˆ์Œ์„ ๊ฐ์ง€ํ•˜๋Š” ์ˆœ๊ฐ„
๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์— ๊ทธ ์‚ฌ์‹ค์„ ์•Œ๋ ค์„œ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์—ฌ์•ผ ํ•จ.
์•Œ๋ฆผ์„œ๋น„์Šค๋Š” ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋“ค๋กœ ๋ณด๋‚ด๋Š” ์„œ๋น„์Šค

  1. ๋กฑ ํด๋ง(long polling)
  2. ์›น์†Œ์ผ“(WebSocket) : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ง€์†์ ์ธ ํ†ต์‹  ์ฑ„๋„์„ ์ œ๊ณต. ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ๊ฐ€๋Šฅ. ์ฑ„ํŒ… ๊ฐ™์€ ์‘์šฉ์— ์ ํ•ฉ

๋ณธ ์„ค๊ณ„์•ˆ์˜ ๊ฒฝ์šฐ์—๋Š” ๋กฑ ํด๋ง ๋ฐฉ์‹์„ ์ฑ„ํƒ : ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ํ•„์š” ์—†์œผ๋ฏ€๋กœ

๋กฑ ํด๋ง ๋ฐฉ์•ˆ์„ ์“ฐ๊ฒŒ ๋˜๋ฉด ๊ฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์•Œ๋ฆผ ์„œ๋ฒ„์™€ ๋กฑ ํด๋ง์šฉ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋‹ค
ํŠน์ • ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๋ฉด ํ•ด๋‹น ์—ฐ๊ฒฐ์„ ๋Š์Œ
์ด๋•Œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐํ•ด ํŒŒ์ผ์˜ ์ตœ์‹  ๋‚ด์—ญ์„ ๋‹ค์šด๋กœ๋“œ ํ•ด์•ผํ•จ.
โ†’ ํ•ด๋‹น ๋‹ค์šด๋กœ๋“œ ์ž‘์—…์ด ๋๋‚ฌ๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ, ์ฆ‰์‹œ ์ƒˆ ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ๋กฑ ํด๋ง ์—ฐ๊ฒฐ์„ ๋ณต์›ํ•˜๊ณ  ์œ ์ง€ํ•ด์•ผ ํ•จ

์ €์žฅ์†Œ ๊ณต๊ฐ„ ์ ˆ์•ฝ

  1. ์ค‘๋ณต์ œ๊ฑฐ(de-dupe) : ์ค‘๋ณต๋œ ํŒŒ์ผ ๋ธ”๋ก์„ ๊ณ„์ • ์ฐจ์›์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•. ๋‘ ๋ธ”๋ก ๋น„๊ต๋Š” ํ•ด์‹œ ๊ฐ’์„ ํ†ตํ•˜์—ฌ ๋น„๊ต.
  2. ์ง€๋Šฅ์  ๋ฐฑ์—… ์ „๋žต ๋„์ž…
    2.1 ํ•œ๋„ ์„ค์ •: ๋ณด๊ด€ํ•ด์•ผ ํ•˜๋Š” ํŒŒ์ผ ๋ฒ„์ „ ๊ฐœ์ˆ˜์— ์ƒํ•œ์„ ๋‘๋Š” ๊ฒƒ. ์ œ์ผ ์˜ค๋ž˜๋œ ๊ฒƒ ๋ฒ„๋ฆผ
    2.2 ์ค‘์š”ํ•œ ๋ฒ„์ „๋งŒ ๋ณด๊ด€
  3. ์ž์ฃผ ์“ฐ์ด์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋Š” ์•„์นด์ด๋น™ ์ €์žฅ์†Œ(cold storage)๋กœ ์˜ฎ๊น€

์žฅ์•  ์ฒ˜๋ฆฌ

  1. ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์žฅ์•  : ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ผ๋ฆฌ ๋ณดํ†ต ๋ฐ•๋™(heartbeat) ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด์„œ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•จ
  2. ๋ธ”๋ก ์ €์žฅ์†Œ ์„œ๋ฒ„ ์žฅ์• 
  3. ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ ์žฅ์• 
  4. API ์„œ๋ฒ„ ์žฅ์•  : API์„œ๋ฒ„๋“ค์€ ๋ฌด์ƒํƒœ ์„œ๋ฒ„. ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” API์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํŠธ๋ž˜ํ”ฝ์„ ํ•ด๋‹น ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ง€ ์•Š์Œ์œผ๋กœ์จ ์žฅ์•  ์„œ๋ฒ„๋ฅผ ๊ฒฉ๋ฆฌํ•  ๊ฒƒ
  5. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์บ์‹œ ์žฅ์• 
  6. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์žฅ์• 
  7. ์•Œ๋ฆผ ์„œ๋น„์Šค ์žฅ์•  : ํ•œ ๋Œ€ ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ˆ˜๋งŒ ๋ช… ์ด์ƒ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋กฑ ํด๋ง ์—ฐ๊ฒฐ์„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•จ - ๋ณต๊ตฌ ์‹œ ์‹œ๊ฐ„ ์˜ค๋ž˜ ๊ฑธ๋ฆผ
  8. ์˜คํ”„๋ผ์ธ ์‚ฌ์šฉ์ž ๋ฐฑ์—… ํ ์žฅ์•  : ํ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ตฌ๋… ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ ๋“ค์€ ๋ฐฑ์—… ํ๋กœ ๊ตฌ๋… ๊ด€๊ณ„๋ฅผ ์žฌ์„ค์ •ํ•ด์•ผํ•จ.

์ฝ”๋ฉ˜ํŠธ ์•ˆ ๋‹จ ๊ฒƒ๋“ค์€ ๋‹ค์ค‘ํ™”๊ฐ€ ๋˜์–ด์žˆ์œผ๋‹ˆ.. ๋‹ค๋ฅธ ์„œ๋ฒ„๋‚˜ ๋ถ€ ์„œ๋ฒ„๋กœ ์˜ฎ๊ฒจ๋ผ๋Š” ์ฝ”๋ฉ˜ํŠธ..

4๋‹จ๊ณ„. ๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ์žฅ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„ 1) ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„ 2) ํŒŒ์ผ ๋™๊ธฐํ™”๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„

  • ์•Œ๋ฆผ ์„œ๋น„์Šค๋Š” ์ด ๋‘ ๋ถ€๋ถ„๊ณผ ๋ณ‘์กดํ•˜๋Š” ๋˜ ํ•˜๋‚˜์˜ ์ค‘์š” ์ปดํฌ๋„ŒํŠธ : ๋กฑ ํด๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ํ•˜์—ฌ๊ธˆ ํŒŒ์ผ์˜ ์ƒํƒœ๋ฅผ ์ตœ์‹ ์œผ๋กœ ์œ ์ง€
profile
ํŒŒ์ด(ฯ€)ํ˜• ๊ฐœ๋ฐœ์ž ๐ŸŽ๐ŸŒฟ๐Ÿค

0๊ฐœ์˜ ๋Œ“๊ธ€