Design Object Storage System

์ €์žฅ์†Œ ์‹œ์Šคํ…œ์˜ ๋ถ€๋ฅ˜

์ €์žฅ์†Œ ์‹œ์Šคํ…œ์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ๋ถ€๋ฅ˜๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • ๋ธ”๋ก ์ €์žฅ์†Œ: ์›์‹œ ๋ธ”๋ก์„ ์„œ๋ฒ„์— ๋ณผ๋ฅจ ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๋Š” ์‹œ์Šคํ…œ

  • ํŒŒ์ผ ์ €์žฅ์†Œ: ๋ธ”๋ก ์ €์žฅ์†Œ ์œ„์— ๊ตฌํ˜„๋˜๋ฉฐ, ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์†์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ถ”์ƒํ™”ํ•œ ์‹œ์Šคํ…œ

  • ๊ฐ์ฒด ์ €์žฅ์†Œ: ํŒŒ์ผ ์ €์žฅ์†Œ ์œ„์— ๊ตฌํ˜„๋˜๋ฉฐ, ํŒŒ์ผ์„ ๊ฐ์ฒด๋กœ ์ถ”์ƒํ™”ํ•œ ์‹œ์Šคํ…œ

    • ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์„ ๋†’์ด๊ณ  ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›

    • ๋น„์šฉ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ์„ฑ๋Šฅ์„ ํฌ์ƒ

    • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜ํ‰์  ๊ตฌ์กฐ๋กœ ์ €์žฅ(๊ณ„์ธต์  ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ X)

๊ฐ์ฒด ์ €์žฅ์†Œ์—์„œ์˜ ์šฉ์–ด

  • ๋ฒ„ํ‚ท(bucket): ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๋…ผ๋ฆฌ์  ์ปจํ…Œ์ด๋„ˆ๋กœ, ์ด๋ฆ„์€ ์ „์—ญ์ ์œผ๋กœ ์œ ์ผํ•ด์•ผ ํ•จ

  • ๊ฐ์ฒด(object): ๋ฒ„ํ‚ท์— ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ

  • ๋ฒ„์ „(versioning): ํ•œ ๊ฐ์ฒด์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ๊ฐ™์€ ๋ฒ„ํ‚ท ์•ˆ์— ๋‘˜ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ

  • URI(Uniform Resource Identifier): ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ ํ•œ ์ฃผ์†Œ

  • SLA(Service-Level Agreement): ์„œ๋น„์Šค ์ œ๊ณต์ž์™€ ์‚ฌ์šฉ์ž ๊ฐ„์˜ ์„œ๋น„์Šค ์ˆ˜์ค€์„ ๋ช…์‹œํ•œ ๊ณ„์•ฝ

๊ฐ์ฒด ์ €์žฅ์†Œ ํŠน์ง•

  • ๊ฐ์ฒด ๋ถˆ๋ณ€์„ฑ: ๋‹ค๋ฅธ ์ €์žฅ์†Œ์™€ ๋‹ฌ๋ฆฌ, ์ €์žฅ๋˜๋Š” ๊ฐ์ฒด๋“ค์€ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ

  • ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ: ๊ฐ์ฒด๋Š” ํ‚ค์™€ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋จ(key: URI, value: ๊ฐ์ฒด ๋ฐ์ดํ„ฐ)

  • ์ €์žฅ 1ํšŒ / ์ฝ๊ธฐ ์—ฌ๋Ÿฌ ํšŒ: ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํŒจํ„ด ์ธก๋ฉด์—์„œ ์“ฐ๊ธฐ๋Š” 1ํšŒ, ์ฝ๊ธฐ๋Š” ์—ฌ๋Ÿฌ ํšŒ๋กœ ๊ตฌ์„ฑ๋จ

  • ์†Œํ˜• ๋ฐ ๋Œ€ํ˜• ๊ฐ์ฒด ๋™์‹œ ์ง€์›: ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ๊ฐ์ฒด ์ €์žฅ ๊ฐ€๋Šฅ

์š”๊ตฌ์‚ฌํ•ญ

  • ๊ธฐ๋Šฅ

    • ๋ฒ„ํ‚ท ์ƒ์„ฑ

    • ๊ฐ์ฒด ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ

    • ๊ฐ์ฒด ๋ฒ„์ „

    • ๋ฒ„ํ‚ท ๋‚ด ๊ฐ์ฒด ๋ชฉ๋ก ์ถœ๋ ฅ ๊ธฐ๋Šฅ

  • ๊ทœ๋ชจ

    • ๊ฐ์ฒด ํฌ๊ธฐ: ์†Œํ˜• ๊ฐ์ฒด๋ถ€ํ„ฐ ๋Œ€ํ˜• ๊ฐ์ฒด(์ˆ˜ GB ์ด์ƒ)

      • 1MB ๋ฏธ๋งŒ ๊ฐ์ฒด(์ค‘์•™๊ฐ’ 0.5MB): 20%

      • 1MB ~ 64MB ๊ฐ์ฒด(์ค‘์•™๊ฐ’: 32MB): 60%

      • 64MB ์ดˆ๊ณผ ๊ฐ์ฒด(์ค‘์•™๊ฐ’: 200MB): 20%

    • ๋งค๋…„ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ: 100PB

    • ๋‚ด๊ตฌ์„ฑ ๋ฐ ๊ฐ€์šฉ์„ฑ: 99.999%

    • ์ €์žฅ ๊ณต๊ฐ„ ์‚ฌ์šฉ๋ฅ : 40%

    • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํฌ๊ธฐ: 1KB

  • ์ถ”์ •

    • ๊ฐ์ฒด ์ˆ˜ = 100PB * 40% (20% * 0.5MB + 60% * 32MB + 20% * 200MB) = 6์–ต 8์ฒœ๋งŒ ๊ฐœ

    • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ณต๊ฐ„ = 6์–ต 8์ฒœ๋งŒ ๊ฐœ * 1KB = 0.68TB

์„ค๊ณ„์•ˆ

๊ฐ์ฒด ์ €์žฅ์†Œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ: RESTful API ์š”์ฒญ ๋ถ„์‚ฐ

  • API ์„œ๋น„์Šค: IAM ์„œ๋น„์Šค / ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„œ๋น„์Šค / ์ €์žฅ์†Œ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํ˜ธ์ถœ ์กฐ์œจ ์—ญํ• 

  • IAM: ์ธ์ฆ / ๊ถŒํ•œ ๋ถ€์—ฌ / ์ ‘๊ทผ ์ œ์–ด ๋“ฑ์„ ์ค‘์•™์—์„œ ๋งก์•„ ์ฒ˜๋ฆฌ

  • ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ: ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ณด๊ด€, ๊ด€๋ จ ์—ฐ์‚ฐ์€ ๊ณ ์œ  ID(UUID)๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ: ๊ฐ์ฒด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณด๊ด€

๊ฐ์ฒด ์ €์žฅ์†Œ ๊ธฐ๋Šฅ์˜ ํ๋ฆ„

๊ฐ์ฒด ์ €์žฅ์†Œ๋Š” ํฌ๊ฒŒ ์—…๋กœ๋“œ / ๋‹ค์šด๋กœ๋“œ / ๊ฐ์ฒด ๋ชฉ๋ก ์กฐํšŒ ์„ธ ๊ฐ€์ง€์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ทธ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ฐ์ฒด ์—…๋กœ๋“œ

๊ฐ์ฒด๋Š” ๋ฒ„ํ‚ท ์•ˆ์— ๋‘์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฒ„ํ‚ท์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋ฒ„ํ‚ท์— ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค.

  • ๋ฒ„ํ‚ท ์ƒ์„ฑ

    1. ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฒ„ํ‚ท ์ƒ์„ฑ API ์š”์ฒญ

    2. API ์„œ๋น„์Šค์—์„œ IAM ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•ด ๊ถŒํ•œ ํ™•์ธ

    3. ๋ฒ„ํ‚ท ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฒ„ํ‚ท ์ƒ์„ฑ

  • ๊ฐ์ฒด ์—…๋กœ๋“œ

    1. ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฐ์ฒด ์—…๋กœ๋“œ API ์š”์ฒญ

    2. API ์„œ๋น„์Šค์—์„œ IAM ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•ด ๊ถŒํ•œ ํ™•์ธ

    3. ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ์ฒด ์—…๋กœ๋“œ ํ›„ UUID ๋ฐ˜ํ™˜ ๋ฐ›์Œ

    4. ๋ฐ˜ํ™˜ ๋ฐ›์€ UUID / ๋ฒ„ํ‚ท ์ •๋ณด / ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ €์žฅ

๊ฐ์ฒด ๋‹ค์šด๋กœ๋“œ

๋ฒ„ํ‚ท์€ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฐ™์€ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ, ๋ฒ„ํ‚ท ์ด๋ฆ„๊ณผ ๊ฐ์ฒด ์ด๋ฆ„์„ ์—ฐ๊ฒฐํ•ด ๋…ผ๋ฆฌ์  ๊ณ„์ธต์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.(์˜ˆ: bucket_name/object_name) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ์ฒด๋ฅผ ์š”์ฒญํ•  ๋•Œ, ์—ฐ๊ฒฐํ•œ ๋ฒ„ํ‚ท ์ด๋ฆ„๊ณผ ๊ฐ์ฒด ์ด๋ฆ„์„ ์ด์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ /bucket_name/object_name์œผ๋กœ API ์š”์ฒญ

  2. API ์„œ๋น„์Šค์—์„œ IAM ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•ด ๊ถŒํ•œ ํ™•์ธ

  3. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์—์„œ ๋ฒ„ํ‚ท ์ •๋ณด์™€ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ

  4. ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ์—์„œ ํ•ด๋‹น ๊ฐ์ฒด UUID๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜

  5. ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ

๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์„ค๊ณ„

๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ๋ฐ์ดํ„ฐ ๋ผ์šฐํŒ… ์„œ๋น„์Šค: ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฌด์ƒํƒœ ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ

    • ๋ฐฐ์น˜ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ตœ์ ์˜ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ํŒ๋‹จ

    • ๋ฐ์ดํ„ฐ ๋…ธ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด API ์„œ๋น„์Šค์— ๋ฐ˜ํ™˜

    • ๋ฐ์ดํ„ฐ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ ๊ธฐ๋ก

  • ๋ฐฐ์น˜ ์„œ๋น„์Šค: ์–ด๋А ๋ฐ์ดํ„ฐ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ์ง€ ๊ฒฐ์ •

    • ๋ฐ์ดํ„ฐ ๋…ธ๋“œ์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์‚ฌ๋ณธ์ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์— ๋†“์ด๋„๋ก ํ•ด ๋ฐ์ดํ„ฐ ๋‚ด๊ตฌ์„ฑ์„ ๋†’์ž„

    • ์ง€์†์ ์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋…ธ๋“œ์™€ ๋ฐ•๋™ ๋ฉฉ์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์•„ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธ

  • ๋ฐ์ดํ„ฐ ๋…ธ๋“œ: ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด๊ด€๋˜๋Š” ๊ณณ

    • ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜์—ฌ ์•ˆ์ •์„ฑ๊ณผ ๋‚ด๊ตฌ์„ฑ ๋ณด์ฆ

    • ๋ฐฐ์น˜ ์„œ๋น„์Šค์— ์ฃผ๊ธฐ์ ์œผ๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์–‘์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ๋ฐ•๋™ ๋ฉ”์‹œ์ง€ ์ „์†ก

๋ฐ์ดํ„ฐ ์ €์žฅ ํ๋ฆ„

  1. ๊ฐ์ฒด ๋ฐ์ดํ„ฐ ์ €์žฅ ์š”์ฒญ

  2. ๋ฐ์ดํ„ฐ ๋ผ์šฐํŒ… ์„œ๋น„์Šค์—์„œ ํ•ด๋‹น ๊ฐ์ฒด์— UUID ํ• ๋‹น ํ›„ ๋ฐฐ์น˜ ์„œ๋น„์Šค์— ๋ณด๊ด€ํ•  ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ์งˆ์˜

  3. ์ €์žฅํ•  ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ์„ ์ • ํ›„ ์ฃผ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ ์ €์žฅ

  4. ์ฃผ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ๋Š” ๋ถ€ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ์— ๋‹ค์ค‘ํ™”

  5. ์ €์žฅ ์™„๋ฃŒ ํ›„ ๊ฐ์ฒด UUID ๋ฐ˜ํ™˜

๊ฐ์ฒด ์กฐํšŒ ๋ฐฉ๋ฒ•

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‚œ ๋’ค UUID๋กœ ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ํ•ด๋‹น ๊ฐ’์œผ๋กœ ์ฐพ๊ธฐ ์œ„ํ•ด ๋งคํ•‘ ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•œ๋‹ค.

  • ๋งคํ•‘ ํ…Œ์ด๋ธ”: ๊ฐ์ฒด UUID์™€ ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•œ ํ…Œ์ด๋ธ”

    • object_id: ๊ฐ์ฒด UUID

    • file_name: ๊ฐ์ฒด๊ฐ€ ๋ณด๊ด€๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ

    • start_offset: ๋ฐ์ดํ„ฐ ํŒŒ์ผ ๋‚ด ๊ฐ์ฒด ์˜คํ”„์…‹

    • object_size: ๊ฐ์ฒด ํฌ๊ธฐ

๊ฐ์ฒด ์ €์žฅ์†Œ ํŠน์„ฑ์ƒ, ๊ฐ์ฒด๋ฅผ ํ•œ ๋ฒˆ ์ €์žฅํ•˜๋ฉด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ฝ๊ธฐ ์—ฐ์‚ฐ์ด ํ›จ์”ฌ ๋” ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, RDBMS๋ฅผ ํ†ตํ•ด ๋งคํ•‘ ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ํ†ตํ•ด์„œ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์งˆ์˜๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  1. ๊ฐ์ฒด ์ด๋ฆ„(bucket_name/object_name)์œผ๋กœ ๊ฐ์ฒด UUID ์กฐํšŒ

  2. ๊ฐ์ฒด ์ด๋ฆ„(bucket_name/object_name)์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๊ฐ์ฒด ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ

  3. ๊ฐ™์€ ์ ‘๋‘์–ด๋ฅผ ๊ฐ–๋Š” ๋ฒ„ํ‚ท ๋‚ด์˜ ๋ชจ๋“  ๊ฐ์ฒด ์กฐํšŒ

์œ„ ์งˆ์˜๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํ‚ค๋งˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • bucket

    • bucket_name: ๋ฒ„ํ‚ท ์ด๋ฆ„

    • bucket_id: ๋ฒ„ํ‚ท UUID

    • owner_id: ๋ฒ„ํ‚ท ์†Œ์œ ์ž ID

    • enable_versioning: ๋ฒ„์ „ ๊ด€๋ฆฌ ํ™œ์„ฑํ™” ์—ฌ๋ถ€

  • object

    • bucket_name: ๋ฒ„ํ‚ท ์ด๋ฆ„

    • object_name: ๊ฐ์ฒด ์ด๋ฆ„

    • object_version: ๊ฐ์ฒด ๋ฒ„์ „

    • object_id: ๊ฐ์ฒด UUID

๊ทœ๋ชจ ํ™•์žฅ

๋งŽ์€ ์–‘์˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๋งŒํผ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋„ ๋งŽ์€ ์–‘์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋Œ€์— ๋ณด๊ด€ํ•˜๊ธฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์–ด ์ƒค๋”ฉ์„ ํ†ตํ•ด ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • bucket ํ…Œ์ด๋ธ”: ์ด์šฉ์ž๋‹น ๋ฒ„ํ‚ท์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ œํ•œํ•˜์—ฌ ์ƒค๋”ฉ ํ•„์š” ์—†์ด ์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด ํ™•์žฅ ๊ฐ€๋Šฅ

  • object ํ…Œ์ด๋ธ”: ๊ฐ id ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ƒค๋”ฉํ•˜์—ฌ ํ™•์žฅ ๊ฐ€๋Šฅ

    • bucket_id ๊ธฐ์ค€ ์ƒค๋”ฉ: ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท ์•ˆ์— ๋งค์šฐ ๋งŽ์€ ๋ฒ„ํ‚ท์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•˜์ง€ ์•Š์Œ

    • object_id ๊ธฐ์ค€ ์ƒค๋”ฉ: bucket_name/object_name์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ ์ ˆ

    • bucket_name + object_name ๊ธฐ์ค€ ์ƒค๋”ฉ: ๋Œ€๋ถ€๋ถ„์˜ ์—ฐ์‚ฐ์ด ๊ฐ์ฒด URI๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆ

๊ฐ์ฒด ๋ฒ„์ „

๊ฐ์ฒด ๋ฒ„์ „์€ ๊ฐ์ฒด์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ๊ฐ์ฒด ์ €์žฅ์†Œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„์ „ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฐ์ฒด ์—…๋กœ๋“œ ์š”์ฒญ(์ด๋ฏธ ์กด์žฌํ•˜๋Š” bucket_name/object_name ์š”์ฒญ)

  2. ์‹ ์› ํ™•์ธ ํ›„ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์—…๋กœ๋“œ ํ›„ UUID๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›์Œ

  3. ๋ฐ˜ํ™˜ ๋ฐ›์€ UUID๋ฅผ ํ†ตํ•ด ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ €์žฅ

    • ๊ธฐ์กด ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ™์€ bucket_id / object_name์œผ๋กœ ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ

    • ์ƒˆ๋กœ์šด object_version์„ ๋ถ€์—ฌํ•˜์—ฌ ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€(TIMEUUID๊ฐ™์€ ๊ฐ’์œผ๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ)

ํฐ ํŒŒ์ผ ์—…๋กœ๋“œ ์ตœ์ ํ™”

ํฐ ํŒŒ์ผ์„ ์—…๋กœ๋“œ๋Š” ์˜ค๋žœ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋ฉฐ, ์ค‘๊ฐ„์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์—…๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ ์—…๋กœ๋“œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ํ˜ธ์ถœ

  2. ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ uploadID ๋ฐ˜ํ™˜(์œ ์ผ ์‹๋ณ„ ID)

  3. ํด๋ผ์ด์–ธํŠธ๋Š” ํŒŒ์ผ์„ ์ž‘์€ ๊ฐ์ฒด๋กœ ๋ถ„ํ• ํ•œ ๋’ค์— ์—…๋กœ๋“œ ์‹œ์ž‘

  4. ๋ถ„ํ• ๋œ ์กฐ๊ฐ ํ•˜๋‚˜๊ฐ€ ์—…๋กœ๋“œ ๋  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์—์„œ๋Š” ETag ๋ฐ˜ํ™˜(ํ•ด๋‹น ์กฐ๊ฐ์— ๋Œ€ํ•œ MD5 ํ•ด์‹œ ์ฒดํฌ์„ฌ)

  5. ๋ชจ๋“  ๋ถ„ํ• ๋œ ์กฐ๊ฐ์„ ์—…๋กœ๋“œํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ ์ข…๋ฃŒ ์š”์ฒญ

    • ํ•ด๋‹น ์š”์ฒญ์— uploadID, ์กฐ๊ฐ ๋ฒˆํ˜ธ ๋ชฉ๋ก, ETag ๋ชฉ๋ก์„ ํ•จ๊ป˜ ๋ณด๋ƒ„

  6. ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋Š” ์กฐ๊ฐ ๋ฒˆํ˜ธ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•ด ์›๋ณธ ๊ฐ์ฒด๋กœ ๋ณต์› ํ›„ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜

Garbage Collection

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

  • ๊ฐ์ฒด ์ง€์—ฐ ์‚ญ์ œ(lazy object deletion): ์‚ญ์ œ ์‹œ ๋ฐ”๋กœ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ‘œ์‹œ๋งŒ ํ•ด๋‘” ๋’ค ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์‚ญ์ œ

  • ๊ฐˆ ๊ณณ ์—†๋Š” ๋ฐ์ดํ„ฐ(orphaned data): ๋ฐ˜์ฏค ์—…๋กœ๋“œ๋œ ๋ฐ์ดํ„ฐ / ์ทจ์†Œ๋œ ๋ฉ€ํ‹ฐํŒŒํŠธ ์—…๋กœ๋“œ ๋ฐ์•„ํ„ฐ

  • ํ›ผ์†๋œ ๋ฐ์ดํ„ฐ(corrupted data): ์ฒดํฌ์„ฌ ๊ฒ€์‚ฌ์— ์‹คํŒจํ•œ ๋ฐ์ดํ„ฐ

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?