IT

52. ์‹ค์ „ ์šด์˜์—์„œ ๋งˆ์ฃผํ•˜๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋Œ€๊ฐ€(Cost): ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ํŒŒํ‹ฐ์…˜ ํ—ˆ์šฉ ์˜ค์ฐจ

Hans L 2026. 7. 18. 21:01

๐Ÿš€ ๋“ค์–ด๊ฐ€๋ฉฐ: ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ด๋ผ๋Š” ์–‘๋‚ ์˜ ๊ฒ€

์•ˆ๋…•ํ•˜์„ธ์š”. Hans ์ž…๋‹ˆ๋‹ค.

ํ˜„๋Œ€ ๋ฐฑ์—”๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ(Distributed Systems)์€ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์„ธ๋กœ ์ž๋ฆฌ ์žก์•˜์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ๊ณ ์„ฑ๋Šฅ ๋จธ์‹ (Scale-up)์— ์˜์กดํ•˜๋Š” ๋Œ€์‹ , ์—ฌ๋Ÿฌ ๋Œ€์˜ ๋…๋ฆฝ์ ์ธ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค(๋…ธ๋“œ)์— ์ž‘์—… ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ(Scale-out)์‹œํ‚ค๋Š” ๊ตฌ์กฐ๋Š” ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์กฐ์ง์—๊ฒŒ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋งŽ์€ ๋น„์šฉ๊ณผ ๋…ธ๋ ฅ์„ ๋“ค์—ฌ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ์ด์œ ๋Š” ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ™•์žฅ์„ฑ(Scalability): ํ•„์š”์— ๋”ฐ๋ผ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฆ๊ฐ€ํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์„ ํ˜•์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋‚ด๊ฒฐํ•จ์„ฑ(Fault Tolerance): ํŠน์ • ์„œ๋ฒ„๋‚˜ ์ง€์—ญ์˜ ๋…ธ๋“œ๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๊ณ„์† ์ฒ˜๋ฆฌํ•ด ๋‹ค์šดํƒ€์ž„์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ˜„์—…์—์„œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜๊ณ  ๋ง‰ ์šด์˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๊ณง ๊ฑฐ๋Œ€ํ•œ ๋ฒฝ์— ๋ถ€๋”ชํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹œ๋‹ˆ์–ด ์—”์ง€๋‹ˆ์–ด๋“ค์ด ์ด๋ฅผ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ "์–ด๋‘์šด ๋ฉด(The Dark Side)"์ด๋ผ ๋ถ€๋ฅด๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ ์ค‘์‹ฌ์— ๋Š˜ ์กด์žฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ณ ๋ ค์‚ฌํ•ญ์ด ๋ฐ”๋กœ ์ง€์—ฐ ์‹œ๊ฐ„(Latency)๊ณผ ํŒŒํ‹ฐ์…˜ ํ—ˆ์šฉ ์˜ค์ฐจ(Partition Tolerance)์ž…๋‹ˆ๋‹ค.

โš–๏ธ 1. ์•„ํ‚คํ…์ฒ˜์˜ ์ˆ™๋ช…: CAP ์ •๋ฆฌ์˜ ์„ธ ๊ฐ€์ง€ ์ถ•

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์  ํ•œ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ๊ทœ์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ CAP ์ •๋ฆฌ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ์ ·๋น„๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ค๊ณ„ํ•  ๋•Œ ์•„๋ž˜์˜ ์„ธ ๊ฐ€์ง€ ์†์„ฑ์„ ๋™์‹œ์— ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์€ ์กด์žฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ์ผ๊ด€์„ฑ (Consistency): ๋ชจ๋“  ์ฝ๊ธฐ(Read) ์š”์ฒญ์€ ์–ด๋–ค ๋…ธ๋“œ๋กœ ์ ‘๊ทผํ•˜๋“  ํ•ญ์ƒ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์—…๋ฐ์ดํŠธ๋œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์šฉ์„ฑ (Availability): ๋ชจ๋“  ์š”์ฒญ์€ ์‹คํŒจ(์—๋Ÿฌ) ์—†์ด ์ •์ƒ์ ์ธ ์‘๋‹ต์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋‹ค๋งŒ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ผ๋Š” ๋ณด์žฅ์€ ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)
  • ํŒŒํ‹ฐ์…˜ ํ—ˆ์šฉ ์˜ค์ฐจ (Partition Tolerance): ๋…ธ๋“œ ๊ฐ„์˜ ํ†ต์‹ ์ด ๋‹จ์ ˆ๋˜๊ฑฐ๋‚˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์œ ์‹ค๋˜๋Š” ๋„คํŠธ์›Œํฌ ํŒŒํ‹ฐ์…˜ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ ์—†์ด ๊ณ„์† ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ฌผ๋ฆฌ ๋„คํŠธ์›Œํฌ๋Š” ์œ ์‹ค๊ณผ ์ง€์—ฐ์ด ๋ถˆ๊ฐ€ํ”ผํ•˜๋ฏ€๋กœ, ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์€ ๋ฐ˜๋“œ์‹œ ํŒŒํ‹ฐ์…˜ ํ—ˆ์šฉ ์˜ค์ฐจ(P)๋ฅผ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์งˆ์ ์ธ ์„ ํƒ์€ CP(์ผ๊ด€์„ฑ ์ค‘์‹ฌ)์™€ AP(๊ฐ€์šฉ์„ฑ ์ค‘์‹ฌ) ์‚ฌ์ด์˜ ๋ฐธ๋Ÿฐ์Šค ๊ฒŒ์ž„์ด ๋ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๊ฐ€ ์ฐข์–ด์กŒ์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๋งž์ถœ ๊ฒƒ์ธ๊ฐ€(CP), ์•„๋‹ˆ๋ฉด ์กฐ๊ธˆ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ผ๋„ ์ผ๋‹จ ๋น ๋ฅด๊ฒŒ ์‘๋‹ต์„ ์ค„ ๊ฒƒ์ธ๊ฐ€(AP)๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์— ๋งž์ถฐ ์กฐ์œจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โณ 2. ์ง€์—ฐ ์‹œ๊ฐ„(Latency)์˜ ์‹ค์ฒด์™€ RTT

๋‹จ์ผ ๋จธ์‹  ์•ˆ์—์„œ์˜ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ (IPC)์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์€ ๋งˆ์ดํฌ๋กœ์ดˆ($\mu s$) ๋‹จ์œ„๋กœ ๋๋‚˜์ง€๋งŒ, ๋„คํŠธ์›Œํฌ๋ฅผ ํƒ€๋Š” ์ˆœ๊ฐ„ ๋ฐ€๋ฆฌ์ดˆ($ms$) ๋‹จ์œ„์˜ ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์ด ์ง€์—ฐ ์‹œ๊ฐ„์€ ๋‹จ์ˆœํžˆ ์„œ๋ฒ„ ๋‚ด๋ถ€์˜ ์—ฐ์‚ฐ ์‹œ๊ฐ„๋งŒ์ด ์•„๋‹ˆ๋ผ, ์™•๋ณต ์‹œ๊ฐ„์ธ RTT(Round Trip Time)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • User Request (๋„คํŠธ์›Œํฌ ์ƒํ–‰): $400ms$ ์†Œ์š”
  • Server Response (๋„คํŠธ์›Œํฌ ํ•˜ํ–‰): $500ms$ ์†Œ์š”
  • Total Latency (RTT): $400ms + 500ms = 900ms$

๋‹จ ํ•˜๋‚˜์˜ ์š”์ฒญ-์‘๋‹ต ์Œ๋งŒ์œผ๋กœ๋„ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ˆ˜๋ฐฑ ๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ๋ˆ„์ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA) ํ™˜๊ฒฝ์—์„œ ํ•˜๋‚˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๋…ธ๋“œ๋“ค๋ผ๋ฆฌ ๋™๊ธฐ์‹ ์›๊ฒฉ ํ˜ธ์ถœ์„ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ๋‚จ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด RTT๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ˆ„์ ๋˜์–ด ์ตœ์•…์˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์œผ๋กœ ์ด์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ—‚๏ธ 3. ๋ณต์ œ ์•„ํ‚คํ…์ฒ˜์˜ ์„ ํƒ: ๋ฆฌ๋” ๊ธฐ๋ฐ˜ vs ๋ฆฌ๋” ์—†๋Š” ๊ตฌ์กฐ

๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค์„ ๋ง‰๊ณ  ๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๋ณต์ œ๋ณธ์„ ๋‘๋Š” ๋ฐฉ์‹ ๋˜ํ•œ ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์— ๋ง‰๋Œ€ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

โ‘  ๋ฆฌ๋” ๊ธฐ๋ฐ˜ ๋ณต์ œ (Leader-based Replication)

ํ•˜๋‚˜์˜ ํŠน์ • ๋…ธ๋“œ๊ฐ€ ๋ฆฌ๋”(Leader/Primary)๊ฐ€ ๋˜์–ด ๋ชจ๋“  ์“ฐ๊ธฐ(Write) ์š”์ฒญ์„ ๋…์  ์ฒ˜๋ฆฌํ•˜๊ณ , ๋‚˜๋จธ์ง€ ํŒ”๋กœ์›Œ(Follower/Secondary) ๋…ธ๋“œ๋“ค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  • ํŠน์ง•: ์“ฐ๊ธฐ ์ˆœ์„œ๊ฐ€ ๋ฆฌ๋”์— ์˜ํ•ด ์ œ์–ด๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์ถฉ๋Œ ๊ด€๋ฆฌ๊ฐ€ ๋น„๊ต์  ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค.
  • ์šด์˜ ํฌ์ธํŠธ (Critical Reads): ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ์งํ›„ ํŒ”๋กœ์›Œ ๋…ธ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ, ๋ณต์ œ ์ง€์—ฐ(Lag)์œผ๋กœ ์ธํ•ด ์˜›๋‚  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ฒŒ ๋˜๋Š” ํ˜„์ƒ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ง‰์œผ๋ ค๋ฉด ๋ณธ์ธ์ด ์“ด ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ฆฌ๋” ๋…ธ๋“œ์—์„œ ์ง์ ‘ ์ฝ๋„๋ก ๊ฐ•์ œํ•˜๋Š” Critical Reads ๊ฒฝ๋กœ๋ฅผ ์ •๊ตํ•˜๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ๋” ๊ธฐ๋ฐ˜ ๋ณต์ œ(Leader-based Replication)

โ‘ก ๋ฆฌ๋” ์—†๋Š” ๋ณต์ œ (Leaderless Replication)

๋ฆฌ๋”์˜ ๊ฐœ๋… ์—†์ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด ๋…ธ๋“œ์— ์“ฐ๊ธฐ ์š”์ฒญ์„ ๋™์‹œ์— ์ „์†กํ•˜๊ณ , ์„ค์ •๋œ ๊ธฐ์ค€ ๊ฐœ์ˆ˜ ์ด์ƒ์˜ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต(ACK)์„ ๋ฐ›์œผ๋ฉด ์„ฑ๊ณต์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  • ํŠน์ง•: ํŠน์ • ๋‹จ์ผ ๋…ธ๋“œ์˜ ์žฅ์• ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ€์šฉ์„ฑ์ด ๊ทน๋Œ€ํ™”๋˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๋™์‹œ๋‹ค๋ฐœ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์“ฐ์ด๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ์“ฐ๊ธฐ ์ถฉ๋Œ(Conflict) ํ•ด๊ฒฐ ๋กœ์ง์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ์ง์ ‘ ๊ฐ๋‹นํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋‹ด์ด ์ƒ๊น๋‹ˆ๋‹ค.

๋ฆฌ๋” ์—†๋Š” ๋ณต์ œ(Leaderless Replication)

๐Ÿ› ๏ธ 4. ๋™๊ธฐํ™”์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„: ์ง€์†์„ฑ(Durability) vs ์ง€์—ฐ ์‹œ๊ฐ„(Latency)

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

  • ์žฅ์  (๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„): ํŒ”๋กœ์›Œ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋„คํŠธ์›Œํฌ ์ง€์—ฐ($5ms$ ๋˜๋Š” $8ms$)์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์–ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฒด๊ฐํ•˜๋Š” ์‘๋‹ต ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ๋‹จ์  (๋ฐ์ดํ„ฐ ์œ ์‹ค ์œ„ํ—˜): ํŒ”๋กœ์›Œ๊ฐ€ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์‹œ์Šคํ…œ์€ ์ตœ์ข… ์ผ๊ด€์„ฑ(Eventual Consistency) ์ƒํƒœ์— ๋จธ๋ฌผ๊ฒŒ ๋˜๋ฉฐ, ๋งŒ์•ฝ ๋ฆฌ๋” ๋…ธ๋“œ๊ฐ€ ๋ณต์ œ๋ณธ์„ ํŒ”๋กœ์›Œ์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๊ธฐ ์ „์— ๊ฐ‘์ž‘์Šค๋Ÿฝ๊ฒŒ ๋‹ค์šด๋˜๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” ์˜๊ตฌ ์œ ์‹ค๋  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ์˜ ์ฒ ์ €ํ•œ ์ง€์†์„ฑ(Durability)์„ ๋ณด์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

๋ฆฌ๋”๋Š” ์“ฐ๊ธฐ ์š”์ฒญ์„ ๋ฐ›์€ ํ›„ ํŒ”๋กœ์›Œ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜๊ณ , ํŒ”๋กœ์›Œ๊ฐ€ ์—…๋ฐ์ดํŠธ์— ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ์‹ ํ˜ธ(Success ACK)๋ฅผ ๋ณด๋‚ด์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ(Waiting for Follower Update) ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋™๊ธฐ์‹ ๋Œ€๊ธฐ๋Š” ๋ฐ์ดํ„ฐ ์•ˆ์ •์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜์ง€๋งŒ, ๋„คํŠธ์›Œํฌ ์ƒํƒœ์— ๋”ฐ๋ผ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์ง€์—ฐ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋Œ€๊ฐ€๋ฅผ ์น˜๋ฅด๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๐Ÿ’ก 5. ์ดˆ๋ณด ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์šด์˜์ž๋ฅผ ์œ„ํ•œ ์‹ค์ „ ๊ฐ€์ด๋“œ

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

  1. ๋„คํŠธ์›Œํฌ๋Š” ์–ธ์ œ๋‚˜ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Œ์„ ์ธ์ •ํ•˜๋ผ (Design for Failure)
  2. ๋„คํŠธ์›Œํฌ ํŒŒํ‹ฐ์…˜์€ ํ”ผํ•  ์ˆ˜ ์—†๋Š” ํ˜„์‹ค์ž…๋‹ˆ๋‹ค. ํƒ€์ž„์•„์›ƒ(Timeout) ๊ฐ’์„ ๋ฌด์กฐ๊ฑด ์ด˜์ด˜ํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ , ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„(Retry) ์ „๋žต์„ ์„ธ์šฐ๋˜ ์‹œ์Šคํ…œ์— ๋ถ€ํ•˜๋ฅผ ์—ฐ์‡„์ ์œผ๋กœ ์ฃผ์ง€ ์•Š๋„๋ก ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„(Exponential Backoff)์™€ ์ง€ํ„ฐ(Jitter)๋ฅผ ๋ฐ˜๋“œ์‹œ ์กฐํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ์™„๊ธ‰์„ ์กฐ์ ˆํ•˜๋ผ
  4. ๊ฒฐ์ œ๋‚˜ ์ž”์•ก ๊ด€๋ฆฌ์ฒ˜๋Ÿผ ๋‹จ 1์›์˜ ์˜ค์ฐจ๋„ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋„๋ฉ”์ธ์€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ๊ฐ์ˆ˜ํ•˜๋”๋ผ๋„ ์—„๊ฒฉํ•œ ์ผ๊ด€์„ฑ(CP)๊ณผ ๋™๊ธฐ์‹ ์ง€์†์„ฑ์„ ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, SNS์˜ '์ข‹์•„์š”' ์ˆ˜๋‚˜ ์ถ”์ฒœ ํ”ผ๋“œ๋Š” ์ˆ˜์ดˆ ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งž์ง€ ์•Š์•„๋„ ์„œ๋น„์Šค์— ์ง€์žฅ์ด ์—†์œผ๋ฏ€๋กœ ๋น„๋™๊ธฐ ๋ณต์ œ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์šฉ์„ฑ(AP)๊ณผ ์ตœ์ข… ์ผ๊ด€์„ฑ์„ ์ ๊ทน์ ์œผ๋กœ ์ฑ„ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  5. ํ•ต์‹ฌ ์ง€ํ‘œ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์‹œ๊ฐํ™”
  6. ๋…ธ๋“œ ๊ฐ„ RTT, ๋ณต์ œ ์ง€์—ฐ ์‹œ๊ฐ„(Replication Lag), ๊ทธ๋ฆฌ๊ณ  ์ƒ์œ„ 99%์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒช๋Š” ๊ผฌ๋ฆฌ ์ง€์—ฐ ์‹œ๊ฐ„(p99 Latency)์„ ๊ด€์ธก ๊ฐ€๋Šฅํ•œ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๊ตฌ์ถ•ํ•˜์„ธ์š”. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ์ˆจ์€ ๋ฒ„๊ทธ๋‚˜ ๋ณ‘๋ชฉ์€ ํ‰๊ท ๊ฐ’์ด ์•„๋‹Œ ๊ผฌ๋ฆฌ ์ง€์—ฐ ์‹œ๊ฐ„์—์„œ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ ๋งบ์œผ๋ฉฐ

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

์ง€๊ธˆ ์—ฌ๋Ÿฌ๋ถ„์ด ์šด์˜ ์ค‘์ธ ์„œ๋น„์Šค์˜ ๋ณต์ œ ๋ฐฉ์‹๊ณผ ํƒ€์ž„์•„์›ƒ ์ „๋žต์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋Š”์ง€ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ ๊ฒ€ํ•ด ๋ณด๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

Thanks

Hans