๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

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

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

์ด๋Ÿฌํ•œ ์ €์žฅ์†Œ์˜ ๋ฐฑ์—… ๋ณต์‚ฌ๋ณธ์€ ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์–‘ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ๋ช…๋ช…๋œ ๊ตฌ์„ฑ ์š”์†Œ ์ฒด์ธ์ž…๋‹ˆ๋‹ค.

์œ ์‚ฌํ•œ ์†”๋ฃจ์…˜์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” zbackup, borgbackup ๋ฐ Restic์˜ 3๊ฐ€์ง€์— ์ค‘์ ์„ ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ ๊ฒฐ๊ณผ

๋ชจ๋“  ์‹ ์ฒญ์ž๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์ €์žฅ์†Œ ์ƒ์„ฑ์„ ์š”๊ตฌํ•˜๋ฏ€๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋Š” ์ €์žฅ์†Œ์˜ ํฌ๊ธฐ๋ฅผ ์ถ”์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ ํฌ๊ธฐ๋Š” ํ—ˆ์šฉ๋œ ๋ฐฉ๋ฒ•๋ก ์— ๋”ฐ๋ผ 13GB๋ฅผ ๋„˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฉฐ, ์ตœ์ ํ™”๊ฐ€ ์ž˜ ๋œ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ณด๋‹ค ๋” ์ž‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

tar์™€ ๊ฐ™์€ ์•„์นด์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ์˜ ๋ฐฑ์—… ๋ณต์‚ฌ๋ณธ์„ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ rsync ๋ฐ sshfs์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ๋„๊ตฌ ์—†์ด ssh/sftp๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋„ ๋งค์šฐ ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—… ์ƒ์„ฑ ์‹œ ๋™์ž‘:

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

์ด์ „ ๊ธฐ์‚ฌ ์ค‘ ํ•˜๋‚˜์— ํ‘œ์‹œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ tar ์ž‘์—…์€ ์ฐธ์กฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

zbackup ํ…Œ์ŠคํŠธ

zbackup์˜ ์ผ๋ฐ˜์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ํ”„๋กœ๊ทธ๋žจ์ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ์˜์—ญ์„ ์ฐพ์€ ๋‹ค์Œ ์„ ํƒ์ ์œผ๋กœ ์ด๋ฅผ ์••์ถ•ํ•˜๊ณ  ์•”ํ˜ธํ™”ํ•˜์—ฌ ๊ฐ ์˜์—ญ์„ ํ•œ ๋ฒˆ๋งŒ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ค‘๋ณต ์ œ๊ฑฐ๋Š” ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๊ฐ€ ์žˆ๋Š” 64๋น„ํŠธ ๋ง ํ•ด์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋ธ”๋ก๊ณผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(rsync๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌ).

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ lzma ๋ฐ lzo๋Š” ์••์ถ•์— ์‚ฌ์šฉ๋˜๊ณ  aes๋Š” ์•”ํ˜ธํ™”์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์—๋Š” ๋‚˜์ค‘์— ์ €์žฅ์†Œ์—์„œ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ํ”„๋กœ๊ทธ๋žจ์€ ์ตœ์†Œํ•œ์˜ ์ข…์†์„ฑ์„ ๊ฐ€์ง€๊ณ  C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €์ž๋Š” ์œ ๋‹‰์Šค ๋ฐฉ์‹์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฐฑ์—…์„ ์ƒ์„ฑํ•  ๋•Œ stdin์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„๋“ค์ด๊ณ , ๋ณต์›ํ•  ๋•Œ stdout์—์„œ ์œ ์‚ฌํ•œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ zbackup์€ ์ž์‹ ๋งŒ์˜ ๋ฐฑ์—… ์†”๋ฃจ์…˜์„ ์ž‘์„ฑํ•  ๋•Œ ๋งค์šฐ ํ›Œ๋ฅญํ•œ "๋นŒ๋”ฉ ๋ธ”๋ก"์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ์‚ฌ ์ž‘์„ฑ์ž๋Š” ๋Œ€๋žต 2014๋…„๋ถ€ํ„ฐ ์ด ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€์ •์šฉ ์ปดํ“จํ„ฐ์˜ ์ฃผ์š” ๋ฐฑ์—… ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค.

๋‹ฌ๋ฆฌ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์€ ์ผ๋ฐ˜ tar๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ด…์‹œ๋‹ค:

์ž‘์—…์€ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ์ €์žฅ์†Œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์†Œ์Šค ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์„œ๋ฒ„์—์„œ zbackup์ด ์‹œ์ž‘๋œ ๋‹ค์Œ ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์ด ๋ฐฑ์—… ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  2. ๋ฐฑ์—… ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๋ฐฑ์—… ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„์—์„œ SSH๋ฅผ ํ†ตํ•ด zbackup์ด ์‹œ์ž‘๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 43m11s - ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ ์ €์žฅ์†Œ์™€ lzma ์••์ถ•๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, 19m13s - ์••์ถ•๊ธฐ๋ฅผ lzo๋กœ ๊ต์ฒดํ•  ๋•Œ.

์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„์˜ ๋กœ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(lzma์˜ ์˜ˆ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. lzo์˜ ๊ฒฝ์šฐ ๊ฑฐ์˜ ๋™์ผํ•œ ๊ทธ๋ฆผ์ด ์žˆ์—ˆ์ง€๋งŒ rsync์˜ ์ ์œ ์œจ์€ ์•ฝ XNUMX๋ถ„์˜ XNUMX์ด์—ˆ์Šต๋‹ˆ๋‹ค).

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

์ด๋Ÿฌํ•œ ๋ฐฑ์—… ํ”„๋กœ์„ธ์Šค๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋“œ๋ฌผ๊ณ  ์ž‘์€ ๋ณ€๊ฒฝ์—๋งŒ ์ ํ•ฉํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ zbackup์„ 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด CPU ๋กœ๋“œ๊ฐ€ ๋งค์šฐ ๋†’์•„์ง‘๋‹ˆ๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ์—์„œ ์ž‘์—…ํ•˜๋Š” ๋ฐ ๋งค์šฐ ๋Šฅ์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ๋””์Šคํฌ์˜ ๋กœ๋“œ๋Š” ์ž‘์•˜์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์‹  SSD ๊ธฐ๋ฐ˜ ๋””์Šคํฌ ํ•˜์œ„ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ˆˆ์— ๋„์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์›๊ฒฉ ์„œ๋ฒ„์— ๋™๊ธฐํ™”ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์‹œ์ž‘์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—… ์†๋„๋Š” ์ผ๋ฐ˜ rsync์™€ ๋น„์Šทํ•˜๋ฉฐ ๋ฐฑ์—… ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„์˜ ๋””์Šคํฌ ํ•˜์œ„ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๋‹จ์ ์€ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋” ํฅ๋ฏธ๋กญ๊ณ  ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์€ ๋ฐฑ์—… ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„์—์„œ ์ง์ ‘ zbackup์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋จผ์ € lzma ์••์ถ•๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ž‘์—…์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

๊ฐ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ๊ฐ„:

๋ฐœ์‚ฌ 1
๋ฐœ์‚ฌ 2
๋ฐœ์‚ฌ 3

39m45s
40m20s
40m3s

7m36s
8m3s
7m48s

15m35s
15m48s
15m38s

aes๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์˜ ์ž‘๋™ ์‹œ๊ฐ„:

๋ฐœ์‚ฌ 1
๋ฐœ์‚ฌ 2
๋ฐœ์‚ฌ 3

43m40s
44m12s
44m3s

8m3s
8m15s
8m12s

15m0s
15m40s
15m25s

lzo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”์™€ ์••์ถ•์„ ๊ฒฐํ•ฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

์˜์—… ์‹œ๊ฐ„ :

๋ฐœ์‚ฌ 1
๋ฐœ์‚ฌ 2
๋ฐœ์‚ฌ 3

18m2s
18m15s
18m12s

5m13s
5m24s
5m20s

8m48s
9m3s
8m51s

๊ฒฐ๊ณผ ์ €์žฅ์†Œ์˜ ํฌ๊ธฐ๋Š” 13GB๋กœ ๋น„๊ต์  ๋™์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ค‘๋ณต ์ œ๊ฑฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ ์••์ถ•๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” lzo๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ˆˆ์— ๋„๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด ์ž‘์—… ์‹œ๊ฐ„ ์ธก๋ฉด์—์„œ zbackup์€ ์ด์ค‘์„ฑ/์ด์ค‘ํ™”์— ๊ฐ€๊น์ง€๋งŒ librsync ๊ธฐ๋ฐ˜๋ณด๋‹ค 2~5๋ฐฐ ์ •๋„ ๋’ค์ฒ˜์ง‘๋‹ˆ๋‹ค.

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

ํ”„๋กœ์ ํŠธ๊ฐ€ ์•ฝ 3๋…„ ๋™์•ˆ ์ค‘๋‹จ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ „๋ฐ˜์ ์œผ๋กœ ๋งค์šฐ ์ข‹์€ ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค(๋งˆ์ง€๋ง‰ ๊ธฐ๋Šฅ ์š”์ฒญ์€ ์•ฝ XNUMX๋…„ ์ „์ด์—ˆ์ง€๋งŒ ์‘๋‹ต์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค).

borgbackup ํ…Œ์ŠคํŠธ

Borgbackup์€ zbackup๊ณผ ์œ ์‚ฌํ•œ ๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ธ ๋‹ค๋ฝ๋ฐฉ์˜ ํฌํฌ์ž…๋‹ˆ๋‹ค. Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ zbackup๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก์ด ์žˆ์ง€๋งŒ ์ถ”๊ฐ€๋กœ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์„ฑ๋Šฅ ์ ๊ฒ€

borgbackup ๋ฒค์น˜๋งˆํฌ crud ssh://backup_server/repo/path local_dir

๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

CZ-BIG 96.51MB/์ดˆ(10 100.00MB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 10.36์ดˆ)
RZ-BIG 57.22MB/์ดˆ(10
100.00MB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 17.48์ดˆ)
UZ-BIG 253.63MB/์ดˆ(10 100.00MB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 3.94์ดˆ)
DZ-BIG 351.06MB/์ดˆ(10
100.00MB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 2.85์ดˆ)
CR-๋น… 34.30MB/์ดˆ(10 100.00MB ์ž„์˜ ํŒŒ์ผ: 29.15์ดˆ)
RR-๋น… 60.69MB/์ดˆ(10
100.00MB ์ž„์˜ ํŒŒ์ผ: 16.48์ดˆ)
UR-๋น… 311.06MB/์ดˆ(10 100.00MB ์ž„์˜ ํŒŒ์ผ: 3.21์ดˆ)
DR-BIG 72.63MB/์ดˆ(10
100.00MB ์ž„์˜ ํŒŒ์ผ: 13.77์ดˆ)
CZ-MEDIUM 108.59MB/์ดˆ(1000 1.00MB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 9.21์ดˆ)
RZ-์ค‘๊ฐ„ 76.16MB/์ดˆ(1000
1.00MB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 13.13์ดˆ)
UZ-์ค‘๊ฐ„ 331.27MB/์ดˆ(1000 1.00MB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 3.02์ดˆ)
DZ-์ค‘๊ฐ„ 387.36MB/์ดˆ(1000
1.00MB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 2.58์ดˆ)
CR-MEDIUM 37.80MB/์ดˆ(1000 1.00MB ์ž„์˜ ํŒŒ์ผ: 26.45์ดˆ)
RR-MEDIUM 68.90MB/์ดˆ(1000
1.00MB ์ž„์˜ ํŒŒ์ผ: 14.51์ดˆ)
UR-MEDIUM 347.24MB/s(1000 1.00MB ์ž„์˜ ํŒŒ์ผ: 2.88์ดˆ)
DR-MEDIUM 48.80MB/์ดˆ(1000
1.00MB ์ž„์˜ ํŒŒ์ผ: 20.49์ดˆ)
CZ-SMALL 11.72MB/์ดˆ(10000 10.00kB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 8.53์ดˆ)
RZ-SMALL 32.57MB/์ดˆ(10000
10.00kB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 3.07์ดˆ)
UZ-SMALL 19.37MB/์ดˆ(10000 10.00kB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 5.16์ดˆ)
DZ-SMALL 33.71MB/์ดˆ(10000
10.00kB ์˜ฌ์ œ๋กœ ํŒŒ์ผ: 2.97์ดˆ)
CR-SMALL 6.85MB/์ดˆ(10000 10.00kB ๋ฌด์ž‘์œ„ ํŒŒ์ผ: 14.60์ดˆ)
RR-SMALL 31.27MB/์ดˆ(10000
10.00kB ๋ฌด์ž‘์œ„ ํŒŒ์ผ: 3.20์ดˆ)
UR-SMALL 12.28MB/์ดˆ(10000 10.00kB ๋ฌด์ž‘์œ„ ํŒŒ์ผ: 8.14์ดˆ)
DR-SMALL 18.78MB/์ดˆ(10000
10.00kB ๋ฌด์ž‘์œ„ ํŒŒ์ผ: 5.32์ดˆ)

ํ…Œ์ŠคํŠธ ์‹œ ์••์ถ• ํœด๋ฆฌ์Šคํ‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ์œ ํ˜•(์••์ถ• ์ž๋™)์„ ๊ฒฐ์ •ํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์•”ํ˜ธํ™” ์—†์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

์˜์—… ์‹œ๊ฐ„ :

๋ฐœ์‚ฌ 1
๋ฐœ์‚ฌ 2
๋ฐœ์‚ฌ 3

4m6s
4m10s
4m5s

56s
58s
54s

1m26s
1m34s
1m30s

์ €์žฅ์†Œ ์ธ์ฆ(์ธ์ฆ ๋ชจ๋“œ)์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

์˜์—… ์‹œ๊ฐ„ :

๋ฐœ์‚ฌ 1
๋ฐœ์‚ฌ 2
๋ฐœ์‚ฌ 3

4m11s
4m20s
4m12s

1m0s
1m3s
1m2s

1m30s
1m34s
1m31s

aes ์•”ํ˜ธํ™”๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ํฌ๊ฒŒ ์ €ํ•˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

๋ฐœ์‚ฌ 1
๋ฐœ์‚ฌ 2
๋ฐœ์‚ฌ 3

4m55s
5m2s
4m58s

1m0s
1m2s
1m0s

1m49s
1m50s
1m50s

๊ทธ๋ฆฌ๊ณ  aes๋ฅผ blake๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒํ™ฉ์ด ์™„์ „ํžˆ ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

์˜์—… ์‹œ๊ฐ„ :

๋ฐœ์‚ฌ 1
๋ฐœ์‚ฌ 2
๋ฐœ์‚ฌ 3

4m33s
4m43s
4m40s

59s
1m0s
1m0s

1m38s
1m43s
1m40s

zbackup์˜ ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ €์žฅ์†Œ ํฌ๊ธฐ๋Š” 13GB์˜€์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ํฌ๊ธฐ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ์ž‘์•˜์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋งค์šฐ ๋งŒ์กฑ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. librsync ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜๊ณผ ๋น„์Šทํ•˜๋ฉฐ ํ›จ์”ฌ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ๋งŒ์กฑ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ž๋™ ๋ชจ๋“œ์—์„œ borgbackup์„ ์‚ฌ์šฉํ•  ๋•Œ ๋งค์šฐ ํฐ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—… ์ค‘ ๋กœ๋“œ๋„ ๋งŒ์กฑ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์„œ ๋กœ๋“œ๋กœ ํŒ๋‹จํ•˜๋ฉด borgbackup์€ 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์‹œ ํŠน๋ณ„ํ•œ ๋‹จ์ ์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ž”์—ฌ ํ…Œ์ŠคํŠธ

Restic์ด ์ƒ๋‹นํžˆ ์ƒˆ๋กœ์šด ์†”๋ฃจ์…˜์ด๋ผ๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ (์ฒ˜์Œ 2๊ฐœ์˜ ํ›„๋ณด๋Š” 2013๋…„ ์ด์ „์— ์•Œ๋ ค์กŒ์Šต๋‹ˆ๋‹ค) ๊ฝค ์ข‹์€ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Go๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

zbackup๊ณผ ๋น„๊ตํ•˜๋ฉด ๋‹ค์Œ์ด ์ถ”๊ฐ€๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

  • ์ €์žฅ์†Œ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(๋ถ€๋ถ„ ์ฒดํฌ์ธ ํฌํ•จ).
  • ๋ฐฑ์—… ์ €์žฅ์„ ์œ„ํ•œ ์ง€์›๋˜๋Š” ํ”„๋กœํ† ์ฝœ ๋ฐ ๊ณต๊ธ‰์ž์˜ ๋ฐฉ๋Œ€ํ•œ ๋ชฉ๋ก์€ ๋ฌผ๋ก  ํด๋ผ์šฐ๋“œ ์†”๋ฃจ์…˜์šฉ rclone - rsync ์ง€์›๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • 2๊ฐœ์˜ ๋ฐฑ์—…์„ ์„œ๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
  • ํ“จ์ฆˆ๋ฅผ ํ†ตํ•ด ์ €์žฅ์†Œ๋ฅผ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.

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

๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ

์˜์—… ์‹œ๊ฐ„ :

๋ฐœ์‚ฌ 1
๋ฐœ์‚ฌ 2
๋ฐœ์‚ฌ 3

5m25s
5m50s
5m38s

35s
38s
36s

1m54s
2m2s
1m58s

์„ฑ๋Šฅ ๊ฒฐ๊ณผ๋„ rsync ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜๊ณผ ๋น„์Šทํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ borgbackup๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜์ง€๋งŒ CPU ๋กœ๋“œ๊ฐ€ ๋” ๋†’๊ณ (๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์‹คํ–‰) ํ†ฑ๋‹ˆ ๋ชจ์–‘์ž…๋‹ˆ๋‹ค.

rsync์˜ ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„์˜ ๋””์Šคํฌ ํ•˜์œ„ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ์˜ํ•ด ์ œํ•œ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ €์žฅ์†Œ ํฌ๊ธฐ๋Š” zbackup์ด๋‚˜ borgbackup๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 13GB์˜€์œผ๋ฉฐ ์ด ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ ๋šœ๋ ทํ•œ ๋‹จ์ ์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์กฐ์‚ฌ ๊ฒฐ๊ณผ

์‹ค์ œ๋กœ ๋ชจ๋“  ํ›„๋ณด์ž๋Š” ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์ง€๋งŒ ๊ฐ€๊ฒฉ์€ ๋‹ฌ๋ž์Šต๋‹ˆ๋‹ค. Borgbackup์ด ๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ์ข‹์•˜๊ณ , Restic์€ ์•ฝ๊ฐ„ ๋Š๋ ธ์œผ๋ฉฐ, zbackup์€ ์•„๋งˆ๋„ ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•  ๊ฐ€์น˜๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด borgbackup์ด๋‚˜ Restic์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋ณด์„ธ์š”.

์กฐ์‚ฌ ๊ฒฐ๊ณผ

๊ฐ€์žฅ ์œ ๋งํ•œ ํ•ด๊ฒฐ์ฑ…์€ Restic์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด... ์ž‘๋™ ์†๋„ ๋Œ€๋น„ ์„ฑ๋Šฅ ๋น„์œจ์ด ๊ฐ€์žฅ ์ข‹์€ ์‚ฌ๋žŒ์€ ๋ฐ”๋กœ ๊ทธ ์‚ฌ๋žŒ์ด์ง€๋งŒ ์ง€๊ธˆ์€ ์ผ๋ฐ˜์ ์ธ ๊ฒฐ๋ก ์„ ์„œ๋‘๋ฅด์ง€ ๋ง์ž.

Borgbackup์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚˜์˜์ง€ ์•Š์ง€๋งŒ zbackup์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, zbackup์„ ์‚ฌ์šฉํ•˜์—ฌ 3-2-1 ๊ทœ์น™์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (lib)rsync ๊ธฐ๋ฐ˜ ๋ฐฑ์—… ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋ฐœํ‘œ

๋ฐฑ์—…, ํŒŒํŠธ 1: ๋ฐฑ์—…์ด ํ•„์š”ํ•œ ์ด์œ , ๋ฐฉ๋ฒ• ๋ฐ ๊ธฐ์ˆ  ๊ฐœ์š”
๋ฐฑ์—… 2๋ถ€: rsync ๊ธฐ๋ฐ˜ ๋ฐฑ์—… ๋„๊ตฌ ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ
๋ฐฑ์—… ํŒŒํŠธ 3: ์ด์ค‘์„ฑ ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ
๋ฐฑ์—… ํŒŒํŠธ 4: zbackup, restic, borgbackup ๊ฒ€ํ†  ๋ฐ ํ…Œ์ŠคํŠธ
๋ฐฑ์—… ํŒŒํŠธ 5: Linux์šฉ bacula ๋ฐ veeam ๋ฐฑ์—… ํ…Œ์ŠคํŠธ
๋ฐฑ์—… ํŒŒํŠธ 6: ๋ฐฑ์—… ๋„๊ตฌ ๋น„๊ต
๋ฐฑ์—… ํŒŒํŠธ 7: ๊ฒฐ๋ก 

๊ฒŒ์‹œ์ž: ํŒŒ๋ฒจ ๋Ž€์ฝ”๋น„์น˜

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€