NewSQL = NoSQL+ACID
์ตœ๊ทผ๊นŒ์ง€ Odnoklassniki๋Š” SQL Server์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ์•ฝ 50TB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณผ๋ฅจ์˜ ๊ฒฝ์šฐ SQL DBMS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ NoSQL ์Šคํ† ๋ฆฌ์ง€ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์‚ฌ์šฉ๋˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด NoSQL๋กœ ์ „์†ก๋  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์—”ํ„ฐํ‹ฐ์—๋Š” ACID ํŠธ๋žœ์žญ์…˜ ๋ณด์žฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด ์šฐ๋ฆฌ๋Š” NoSQL ์‹œ์Šคํ…œ์˜ ๋‚ด๊ฒฐํ•จ์„ฑ, ํ™•์žฅ์„ฑ ๋ฐ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด์„œ๋„ ๋™์‹œ์— ACID๋ฅผ ์œ ์ง€ํ•˜๋ฉด ๊ธฐ์กด ์‹œ์Šคํ…œ์— ์นœ์ˆ™ํ•œ DBMS์ธ NewSQL ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒˆ๋กœ์šด ๋“ฑ๊ธ‰์˜ ์‚ฐ์—… ์‹œ์Šคํ…œ์€ ๊ฑฐ์˜ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ์ƒ์—… ์šด์˜์— ํˆฌ์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž‘๋™ ๋ฐฉ์‹๊ณผ ๋ฐœ์ƒํ•œ ์ผ - ์ปท ์•„๋ž˜๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”.

ํ˜„์žฌ Odnoklassniki์˜ ์›”๊ฐ„ ๋…์ž ์ˆ˜๋Š” 70์ฒœ๋งŒ ๋ช…์ด ๋„˜๋Š” ์ˆœ ๋ฐฉ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์šฐ๋ฆฌ๋Š” ์ƒ์œ„ XNUMX์œ„ ์•ˆ์— ๋“ค์–ด์š” ์„ธ๊ณ„์—์„œ ๊ฐ€์žฅ ํฐ ์†Œ์…œ ๋„คํŠธ์›Œํฌ์ด์ž ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋Š” 8000๊ฐœ ์‚ฌ์ดํŠธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. OK ์ธํ”„๋ผ๋Š” ํ”„๋ŸฐํŠธ๋‹น ์ดˆ๋‹น ๋ฐฑ๋งŒ ๊ฐœ๊ฐ€ ๋„˜๋Š” HTTP ์š”์ฒญ์ด๋ผ๋Š” ๋งค์šฐ ๋†’์€ ๋กœ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 1๊ฐœ ์ด์ƒ์˜ ์„œ๋ฒ„ ์ง‘ํ•ฉ ์ค‘ ์ผ๋ถ€๋Š” XNUMX๊ฐœ์˜ ๋ชจ์Šคํฌ๋ฐ” ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ์„œ๋กœ ๊ฐ€๊นŒ์ด ์œ„์น˜ํ•ด ์žˆ์–ด ์ด๋“ค ์‚ฌ์ด์˜ ๋„คํŠธ์›Œํฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด XNUMXms ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” 2010๋…„๋ถ€ํ„ฐ ๋ฒ„์ „ 0.6๋ถ€ํ„ฐ Cassandra๋ฅผ ์‚ฌ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ˆ˜์‹ญ ๊ฐœ์˜ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์šด์˜๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋น ๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ดˆ๋‹น 4๋งŒ ๊ฐœ ์ด์ƒ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ๊ฐ€์žฅ ํฐ ์ €์žฅ ๊ณต๊ฐ„์€ 260TB์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋“ค์€ ๋ชจ๋‘ ์ €์žฅ์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ NoSQL ํด๋Ÿฌ์Šคํ„ฐ์ด๋‹ค. ์•ฝํ•˜๊ฒŒ ์กฐ์ •๋œ ๋ฐ์ดํ„ฐ. ์šฐ๋ฆฌ๋Š” Odnoklassniki ์ฐฝ๋ฆฝ ์ดํ›„ ์‚ฌ์šฉ๋˜์–ด ์˜จ ์ผ๊ด€๋œ ์ฃผ์š” ์Šคํ† ๋ฆฌ์ง€์ธ Microsoft SQL Server๋ฅผ ๊ต์ฒดํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ์ง€๋Š” 300TB์˜ ๋ฐ์ดํ„ฐ(๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ„ฐํ‹ฐ)๊ฐ€ ํฌํ•จ๋œ 50๊ฐœ ์ด์ƒ์˜ SQL Server Standard Edition ์‹œ์Šคํ…œ์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ACID ํŠธ๋žœ์žญ์…˜์˜ ์ผ๋ถ€๋กœ ์ˆ˜์ •๋˜๋ฉฐ ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋†’์€ ์ผ๊ด€์„ฑ.

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

์ƒค๋”ฉ ๋•๋ถ„์— SQL ์†๋„๊ฐ€ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒค๋”ฉํ•  ๋•Œ ์—”ํ„ฐํ‹ฐ ID๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • DBMS CPU์˜ ์ถ”๊ฐ€ ๋ถ€ํ•˜๋กœ ์ธํ•ด ์ €์žฅ ํ”„๋กœ์‹œ์ € ๋ฐ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์œ„์˜ ๋ชจ๋“  ์‚ฌํ•ญ๊ณผ ๋””์Šคํฌ์—์„œ ๋ฌด์ž‘์œ„ ์ฝ๊ธฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— JOIN์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ์™ธ๋ถ€์—์„œ๋Š” ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด Read Uncommitted ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์งง์€ ํŠธ๋žœ์žญ์…˜(ํ‰๊ท  100ms ๋ฏธ๋งŒ)๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ค‘ ํ–‰ UPDATE ๋ฐ DELETE๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ํ…Œ์ด๋ธ” ์Šค์บ” ๊ณ„ํš์ด ์žˆ๋Š” ์ฟผ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ ค ์‹คํŒจ๋ฅผ ์ดˆ๋ž˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” SQL ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ๊ฑฐ์˜ ์ตœ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๋Š” ์ ์  ๋” ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์„ ์‚ดํŽด๋ณด์ž.

SQL ๋ฌธ์ œ

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

ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š”

๊ฒฐํ•จ ํ—ˆ์šฉ

ํด๋ž˜์‹ SQL ์„œ๋ฒ„๋Š” ๋‚ด๊ฒฐํ•จ์„ฑ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๊ณ  20๋…„์— ํ•œ ๋ฒˆ์”ฉ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„ ๋™์•ˆ ์‚ฌ์ดํŠธ๋Š” 64๋ถ„ ๋™์•ˆ ๋‹ค์šด๋˜๋Š”๋ฐ, ์ด๋Š” ํ—ˆ์šฉ๋˜๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ 200๊ฐœ๋ผ๋ฉด ์‚ฌ์ดํŠธ๋Š” XNUMX์ฃผ์— ํ•œ ๋ฒˆ์”ฉ ๋‹ค์šด๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„๊ฐ€ XNUMX๊ฐœ๋ผ๋ฉด ์‚ฌ์ดํŠธ๊ฐ€ ๋งค์ฃผ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌธ์ œ์˜ˆ์š”.

SQL Server์˜ ๋‚ด๊ฒฐํ•จ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? Wikipedia๋Š” ์šฐ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๋„๋ก ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ€์šฉ์„ฑ ํด๋Ÿฌ์Šคํ„ฐ: ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฑ์—… ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ฐ’๋น„์‹ผ ์žฅ๋น„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋งŽ์€ ๋ณต์ œ, ๊ด‘์„ฌ์œ , ๊ณต์œ  ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ์˜ˆ๋น„ ํฌํ•จ์ด ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šค์œ„์นญ์˜ ์•ฝ 10%๋Š” ๋ฉ”์ธ ๋…ธ๋“œ ๋’ค์˜ ์—ด์ฐจ์ฒ˜๋Ÿผ ๋ฐฑ์—… ๋…ธ๋“œ์˜ ์˜ค๋ฅ˜๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ฃผ์š” ๋‹จ์ ์€ ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์œ„์น˜ํ•œ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๊ฐ€์šฉ์„ฑ์ด ์ „ํ˜€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Odnoklassniki์—๋Š” XNUMX๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ ํ•˜๋‚˜์— ์™„์ „ํ•œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์šด์˜์„ ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ SQL Server์— ๋‚ด์žฅ๋œ ๋ณต์ œ. ์ด ์†”๋ฃจ์…˜์€ ์†Œํ”„ํŠธ์›จ์–ด ๋น„์šฉ์œผ๋กœ ์ธํ•ด ํ›จ์”ฌ โ€‹โ€‹๋” ๋น„์‹ธ๊ณ  ๋ณต์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ์ž˜ ์•Œ๋ ค์ง„ ๋ฌธ์ œ(๋™๊ธฐ ๋ณต์ œ์˜ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ํŠธ๋žœ์žญ์…˜ ์ง€์—ฐ ๋ฐ ๋น„๋™๊ธฐ ๋ณต์ œ์˜ ๋ณต์ œ ์ ์šฉ ์ง€์—ฐ(๊ฒฐ๊ณผ์ ์œผ๋กœ ์ˆ˜์ • ์‚ฌํ•ญ ์†์‹ค))๋กœ ์ธํ•ด ์–ด๋ ค์›€์„ ๊ฒช์Šต๋‹ˆ๋‹ค. ๋ฌต์‹œ์ ์ธ ์ˆ˜๋™ ์ถฉ๋Œ ํ•ด๊ฒฐ ์ด ์˜ต์…˜์„ ์šฐ๋ฆฌ์—๊ฒŒ ์ „ํ˜€ ์ ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๋ฌธ์ œ์—๋Š” ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ํ•„์š”ํ–ˆ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ž์„ธํžˆ ๋ถ„์„ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” SQL Server๊ฐ€ ์ฃผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ธ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ˆœ๊ฑฐ๋ž˜

์‘์šฉ SQL ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ด€์ ์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํŠธ๋žœ์žญ์…˜์ธ ์•จ๋ฒ”์— ์‚ฌ์ง„์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์„ ์ƒ๊ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•จ๋ฒ”๊ณผ ์‚ฌ์ง„์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ ‘์‹œ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์•จ๋ฒ”์—๋Š” ๊ณต๊ฐœ ์‚ฌ์ง„ ์นด์šดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ๊ฑฐ๋ž˜๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

  1. ์—ด์‡ ๋กœ ์•จ๋ฒ”์„ ์ž ๊ธ‰๋‹ˆ๋‹ค.
  2. ์‚ฌ์ง„ ํ…Œ์ด๋ธ”์— ํ•ญ๋ชฉ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  3. ์‚ฌ์ง„์ด ๊ณต๊ฐœ ์ƒํƒœ์ธ ๊ฒฝ์šฐ ์•จ๋ฒ”์— ๊ณต๊ฐœ ์‚ฌ์ง„ ์นด์šดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ธฐ๋ก์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๊ฑฐ๋ž˜๋ฅผ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.

๋˜๋Š” ์˜์‚ฌ์ฝ”๋“œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

TX.start("Albums", id);
Album album = albums.lock(id);
Photo photo = photos.create(โ€ฆ);

if (photo.status == PUBLIC ) {
    album.incPublicPhotosCount();
}
album.update();

TX.commit();

๋น„์ฆˆ๋‹ˆ์Šค ํŠธ๋žœ์žญ์…˜์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฝ๊ณ , ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , ์ƒˆ ๊ฐ’์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋‹ค์‹œ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ์—ฌ๋Ÿฌ ์—”ํ„ฐํ‹ฐ, ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

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

ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋‹ค์–‘ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ„ฐํ‹ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์œ ์‚ฌํ•œ ์ฝ”๋“œ๊ฐ€ Odnoklassniki ์ „์ฒด์— ๊ฑธ์ณ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. NoSQL๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์ตœ์ข… ์ผ๊ด€์„ฑ ์šฐ๋ฆฌ๋Š” ๊ฐ€์žฅ ํฐ ๊ณผ์ œ(๋ฐ ์‹œ๊ฐ„ ํˆฌ์ž)๊ฐ€ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ๊ฐœ๋ฐœ์—์„œ ๋น„๋กฏ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์— ๋Œ€ํ•œ ์‹ค์ œ ACID ํŠธ๋žœ์žญ์…˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ ์Šคํ† ๋ฆฌ์ง€์˜ ์ฃผ์š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ธฐํƒ€ ์š”๊ตฌ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

๊ฒฐ์ •, ๊ฒฐ์ •

๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ ๋‘ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜ ์„ ํƒ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

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

๋‘ ๋ฒˆ์งธ ์˜ต์…˜์€ ํ™•์žฅ, ์žฅ์•  ์กฐ์น˜ ํด๋Ÿฌ์Šคํ„ฐ, ์ถฉ๋Œ ํ•ด๊ฒฐ์ด ๊ตฌํ˜„๋œ ๊ธฐ์„ฑ NoSQL ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜ ๋ฐ SQL์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ผํ• ๋ณด๋ฉด ACID ํŠธ๋žœ์žญ์…˜์€ ๋งํ•  ๊ฒƒ๋„ ์—†๊ณ  SQL์„ ๊ตฌํ˜„ํ•˜๋Š” ์ž‘์—…์กฐ์ฐจ ์ˆ˜๋…„์ด ๊ฑธ๋ฆด ์ž‘์—…์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” SQL ๊ธฐ๋Šฅ ์„ธํŠธ๋Š” ANSI SQL๊ณผ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์นด์‚ฐ๋“œ๋ผ CQL ANSI SQL๊ณผ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๋‹ค. CQL์„ ๋”์šฑ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

์นด์‚ฐ๋“œ๋ผ์™€ CQL

๊ทธ๋ ‡๋‹ค๋ฉด Cassandra์˜ ํฅ๋ฏธ๋กœ์šด ์ ์€ ๋ฌด์—‡์ด๋ฉฐ ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ฒซ์งธ, ์—ฌ๊ธฐ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ง€์›ํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ๋ณธ ํ‚ค์— ๋Œ€ํ•ด SELECT ๋˜๋Š” UPDATE๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CREATE TABLE photos (id bigint KEY, owner bigint,โ€ฆ);
SELECT * FROM photos WHERE id=?;
UPDATE photos SET โ€ฆ WHERE id=?;

๋ณต์ œ๋ณธ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด Cassandra๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •์กฑ์ˆ˜ ์ ‘๊ทผ ๋ฐฉ์‹. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ, ์ด๋Š” ๋™์ผํ•œ ํ–‰์˜ XNUMX๊ฐœ ๋ณต์ œ๋ณธ์ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋ฐฐ์น˜๋  ๋•Œ ๋Œ€๋‹ค์ˆ˜์˜ ๋…ธ๋“œ(์ฆ‰, XNUMX๊ฐœ ์ค‘ XNUMX๊ฐœ)๊ฐ€ ์ด ์“ฐ๊ธฐ ์ž‘์—…์˜ ์„ฑ๊ณต์„ ํ™•์ธํ•œ ๊ฒฝ์šฐ ์“ฐ๊ธฐ๊ฐ€ ์„ฑ๊ณตํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. . ์ฝ์„ ๋•Œ ๋Œ€๋ถ€๋ถ„์˜ ๋…ธ๋“œ๊ฐ€ ํด๋ง๋˜์–ด ํ™•์ธ๋œ ๊ฒฝ์šฐ ํ–‰ ๋ฐ์ดํ„ฐ๋Š” ์ผ๊ด€์„ฑ์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ XNUMX๊ฐœ์˜ ๋ณต์ œ๋ณธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ๋…ธ๋“œ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์™„์ „ํ•˜๊ณ  ์ฆ‰๊ฐ์ ์ธ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ํ›จ์”ฌ ๋” ์•ˆ์ •์ ์ธ ์ฒด๊ณ„๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ์„ธ ๊ฐœ์˜ ๋ณต์ œ๋ณธ ๋ชจ๋‘์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๊ฐ€์žฅ ๋น ๋ฅธ ๋‘ ๋ณต์ œ๋ณธ์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์„ธ ๋ฒˆ์งธ ๋ณต์ œ๋ณธ์˜ ์ง€์—ฐ ์‘๋‹ต์€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์‘๋‹ต์ด ๋Š๋ฆฐ ๋…ธ๋“œ์—๋Š” ๋ธŒ๋ ˆ์ดํฌ, JVM์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘, Linux ์ปค๋„์˜ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜, ํ•˜๋“œ์›จ์–ด ์˜ค๋ฅ˜, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋Š๊น€ ๋“ฑ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ž‘์—…์ด๋‚˜ ๋ฐ์ดํ„ฐ์— ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

XNUMX๊ฐœ์˜ ๋…ธ๋“œ์— ์ ‘์†ํ•˜๊ณ  XNUMX๊ฐœ์˜ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ถ”์ธก: ์ถ”๊ฐ€ ๋ณต์ œ๋ณธ์— ๋Œ€ํ•œ ์š”์ฒญ์€ "๋–จ์–ด์ง€๊ธฐ" ์ „์—๋„ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

Cassandra์˜ ๋˜ ๋‹ค๋ฅธ ์ด์ ์€ ์ผ๊ด„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์™„์ „ํžˆ ์ ์šฉ๋˜๊ฑฐ๋‚˜ ์ „ํ˜€ ์ ์šฉ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ Batchlog์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ACID์˜ A(์›์ž์„ฑ)๋ฅผ ์ฆ‰์‹œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cassandra์—์„œ ํŠธ๋žœ์žญ์…˜์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒƒ์€ ์†Œ์œ„ "๊ฒฝ๋Ÿ‰ ํŠธ๋žœ์žญ์…˜". ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” "์‹ค์ œ" ACID ๊ฑฐ๋ž˜์™€๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ์ž…๋‹ˆ๋‹ค. CAS ํ—ค๋น„์›จ์ดํŠธ Paxos ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ ํ•ฉ์˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ ํ•˜๋‚˜์˜ ๋ ˆ์ฝ”๋“œ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๊ฑฐ๋ž˜์˜ ์†๋„๋Š” ๋Š๋ฆฝ๋‹ˆ๋‹ค.

Cassandra์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋†“์นœ ๊ฒƒ

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” Cassandra์—์„œ ์‹ค์ œ ACID ํŠธ๋žœ์žญ์…˜์„ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด DBMS์˜ ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ, ์ฆ‰ ๊ธฐ๋ณธ ํ‚ค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ ์„ ํƒ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๊ด€๋˜๊ณ  ๋น ๋ฅธ ์ธ๋ฑ์Šค์™€ ๋‹จ์กฐ๋กœ์šด ์ž๋™ ์ฆ๊ฐ€ ID์˜ ์ผ๋ฐ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›๋ฟ”

๊ทธ๋ฆฌํ•˜์—ฌ ์ƒˆ๋กœ์šด DBMS๊ฐ€ ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์›๋ฟ”, ์„ธ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์„œ๋ฒ„ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • ์Šคํ† ๋ฆฌ์ง€ โ€“ ๋กœ์ปฌ ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” (๊ฑฐ์˜) ํ‘œ์ค€ Cassandra ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๋กœ๋“œ์™€ ์–‘์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๊ทธ ์–‘์€ ์‰ฝ๊ฒŒ ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ์œผ๋กœ ํ™•์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ์ฝ”๋””๋„ค์ดํ„ฐ - ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์šด์˜์„ ๊ตฌํ˜„ํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ์ˆ˜์ฒœ ๋ช…์— ๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NewSQL = NoSQL+ACID

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

ํด๋ผ์ด์–ธํŠธ

NewSQL = NoSQL+ACID

ํ‘œ์ค€ ๋“œ๋ผ์ด๋ฒ„ ๋Œ€์‹  Fat Client ๋ชจ๋“œ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์ง€๋งŒ ์š”์ฒญ ์‹คํ–‰์„ ์œ„ํ•œ ์กฐ์ •์ž ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ ์ž์ฒด๊ฐ€ ์š”์ฒญ์˜ ์กฐ์ •์ž ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์Šคํ† ๋ฆฌ์ง€ ๋ณต์ œ๋ณธ์„ ์ฟผ๋ฆฌํ•˜๊ณ  ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์›๊ฒฉ ์กฐ์ •์ž์™€์˜ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ํ‘œ์ค€ ๋“œ๋ผ์ด๋ฒ„๋ณด๋‹ค ๋” ์•ˆ์ •์ ์ด๊ณ  ๋น ๋ฅผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์š”์ฒญ ์ „์†ก์„ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ์—ด๋ฆฐ ํŠธ๋žœ์žญ์…˜ ์™ธ๋ถ€์—์„œ๋Š” ์š”์ฒญ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠธ๋žœ์žญ์…˜์„ ์—ด๋ฉด ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๋ชจ๋“  ์š”์ฒญ์ด ํŠธ๋žœ์žญ์…˜ ์กฐ์ •์ž์—๊ฒŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
NewSQL = NoSQL+ACID

C*One ๊ฑฐ๋ž˜ ์ฝ”๋””๋„ค์ดํ„ฐ

์ฝ”๋””๋„ค์ดํ„ฐ๋Š” C*One์„ ์œ„ํ•ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜, ์ž ๊ธˆ ๋ฐ ํŠธ๋žœ์žญ์…˜ ์ ์šฉ ์ˆœ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

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

์ž๋ฌผ์‡ 

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

๋น„๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ž ๊ธˆ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ๋ถ„์‚ฐ ์ž ๊ธˆ์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋™์ผํ•œ ๋ ˆ์ฝ”๋“œ์™€ ๊ด€๋ จ๋œ ํŠธ๋žœ์žญ์…˜์ด ํ•ญ์ƒ ๋™์ผํ•œ ์ฝ”๋””๋„ค์ดํ„ฐ์— ์˜ํ•ด ์„œ๋น„์Šค๋˜๋„๋ก ํŠธ๋žœ์žญ์…˜์„ ๋ถ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ SQL์˜ ๋กœ์ปฌ ํŠธ๋žœ์žญ์…˜ ๊ทธ๋ฃน์— ๋ถ„์‚ฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋กœ์ปฌ ํŠธ๋žœ์žญ์…˜ ๊ทธ๋ฃน์„ ์ฝ”๋””๋„ค์ดํ„ฐ์—๊ฒŒ ํ• ๋‹นํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์ฝ”๋””๋„ค์ดํ„ฐ๋Š” 0์—์„œ 9๊นŒ์ง€์˜ ํ† ํฐ์œผ๋กœ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ์ฝ”๋””๋„ค์ดํ„ฐ๋Š” 10์—์„œ 19๊นŒ์ง€์˜ ํ† ํฐ์œผ๋กœ ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋“ฑ. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ ์ฝ”๋””๋„ค์ดํ„ฐ ์ธ์Šคํ„ด์Šค๋Š” ํŠธ๋žœ์žญ์…˜ ๊ทธ๋ฃน์˜ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝ”๋””๋„ค์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ์— ํ‰๋ฒ”ํ•œ HashMap ํ˜•ํƒœ๋กœ ์ž ๊ธˆ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋””๋„ค์ดํ„ฐ ์˜ค๋ฅ˜

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

๊ฐ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋Š” ์ตœ์†Œ XNUMX๊ฐœ์˜ ์ฝ”๋””๋„ค์ดํ„ฐ ๋…ธ๋“œ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ ์ฝ”๋””๋„ค์ดํ„ฐ๋Š” ๋‹ค๋ฅธ ์ฝ”๋””๋„ค์ดํ„ฐ์—๊ฒŒ ํ•˜ํŠธ๋น„ํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์ž์‹ ์˜ ๊ธฐ๋Šฅ๊ณผ ๋งˆ์ง€๋ง‰์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์–ด๋Š ์ฝ”๋””๋„ค์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ์–ด๋–ค ํ•˜ํŠธ๋น„ํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

NewSQL = NoSQL+ACID

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

ํ•˜ํŠธ๋น„ํŠธ ๋ฉ”์‹œ์ง€๋Š” 20ms ์ฃผ๊ธฐ๋กœ ์ดˆ๋‹น ์•ฝ 50ํšŒ ๋†’์€ ๋นˆ๋„๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. Java์—์„œ๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋กœ ์ธํ•œ ์ผ์‹œ ์ค‘์ง€ ์‹œ๊ฐ„์ด ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์— 50ms ์ด๋‚ด์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‘๋‹ต์„ ๋ณด์žฅํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” GC ์ผ์‹œ ์ค‘์ง€ ๊ธฐ๊ฐ„์— ๋Œ€ํ•œ ๋ชฉํ‘œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” G1 ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์‘๋‹ต ์‹œ๊ฐ„์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งค์šฐ ๋“œ๋ฌผ๊ฒŒ ์ˆ˜์ง‘๊ธฐ ์ผ์‹œ ์ค‘์ง€๊ฐ€ 50ms๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์ž˜๋ชป๋œ ์˜ค๋ฅ˜ ๊ฐ์ง€๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋””๋„ค์ดํ„ฐ๋Š” ์›๊ฒฉ ๋…ธ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ํ•˜ํŠธ๋น„ํŠธ ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์—ฐ์†์œผ๋กœ ์‚ฌ๋ผ์ง„ ๊ฒฝ์šฐ์—๋งŒ ์›๊ฒฉ ๋…ธ๋“œ์˜ ์‹คํŒจ๋ฅผ ๋ณด๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ 200์—์„œ ์ฝ”๋””๋„ค์ดํ„ฐ ๋…ธ๋“œ์˜ ์‹คํŒจ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ms.

ํ•˜์ง€๋งŒ ์–ด๋–ค ๋…ธ๋“œ๊ฐ€ ์ž‘๋™์„ ๋ฉˆ์ท„๋Š”์ง€ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ๋ญ”๊ฐ€ ์กฐ์น˜๋ฅผ ์ทจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€

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

NewSQL = NoSQL+ACID

๊ทธ๋ฃน 50์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. ๊ต์ฒด ๋ฐฉ์‹, ์ฆ‰ ๋ฉ”์ธ ์ฝ”๋””๋„ค์ดํ„ฐ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์–ด๋Š ๋…ธ๋“œ๊ฐ€ ๊ทธ๋ฃน 50์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ• ์ง€ ๋ฏธ๋ฆฌ ๊ฒฐ์ •ํ•ด๋ณด์ž. ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์˜ˆ์•ฝ์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ๋…ธ๋“œ๊ฐ€ ๋˜๊ณ  ๋‘ ๋ฒˆ์งธ ์˜ˆ์•ฝ์€ ์„ธ ๋ฒˆ์งธ ๋…ธ๋“œ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฒฐ์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์„ฑํ‘œ๋Š” ํ•œ ๋ฒˆ ์„ ํƒ๋˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ† ํด๋กœ์ง€๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๊นŒ์ง€, ์ฆ‰ ์ƒˆ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋  ๋•Œ๊นŒ์ง€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋งค์šฐ ๋“œ๋ฌผ๊ฒŒ ๋ฐœ์ƒํ•จ). ์ด์ „ ๋งˆ์Šคํ„ฐ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ํ™œ์„ฑ ๋งˆ์Šคํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ์ ˆ์ฐจ๋Š” ํ•ญ์ƒ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์˜ˆ๋น„๊ฐ€ ํ™œ์„ฑ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋˜๊ณ , ์ž‘๋™์ด ์ค‘์ง€๋˜๋ฉด ๋‘ ๋ฒˆ์งธ ์˜ˆ๋น„๊ฐ€ ํ™œ์„ฑ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด ์ฒด๊ณ„๋Š” ์ƒˆ ๋งˆ์Šคํ„ฐ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์ด์ „ ๋งˆ์Šคํ„ฐ์˜ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋ฏ€๋กœ ๋ฒ”์šฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ๋” ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

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

๋ฐฑ์—… ๋งˆ์Šคํ„ฐ๋Š” ์ž์‹ ์˜ ๊ฒƒ์ด ์•„๋‹Œ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ์ˆ˜์‹ ๋œ ์š”์ฒญ์„ ์•„์ง ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜์˜ ๋Œ€๊ธฐ์—ด์— ๋ฐฐ์น˜ํ•˜๊ณ  ํ•ด๋‹น ์š”์ฒญ์€ ํ•œ๋™์•ˆ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ๋งˆ์Šคํ„ฐ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ƒˆ ๋งˆ์Šคํ„ฐ๋Š” ๋Œ€๊ธฐ์—ด์—์„œ ํŠธ๋žœ์žญ์…˜ ์—ด๊ธฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฏธ ์ด์ „ ๋งˆ์Šคํ„ฐ์™€์˜ ํŠธ๋žœ์žญ์…˜์„ ์—ฐ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ์‘๋‹ต์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค(๋ฌผ๋ก  ์ด๋Ÿฌํ•œ ํŠธ๋žœ์žญ์…˜์€ ์™„๋ฃŒ๋˜์ง€ ์•Š๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค).

๊ฑฐ๋ž˜ ๋ฐฉ์‹

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

NewSQL = NoSQL+ACID

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

NewSQL = NoSQL+ACID

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ™œ์„ฑ ํŠธ๋žœ์žญ์…˜์˜ ์ผ๋ถ€๋กœ ๋ณ€๊ฒฝ๋œ ์ž์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด ์ฝ”๋””๋„ค์ดํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  • ID๊ฐ€ ์ด๋ฏธ ํŠธ๋žœ์žญ์…˜์— ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์— ID๊ฐ€ ์—†์œผ๋ฉด ์Šคํ† ๋ฆฌ์ง€ ๋…ธ๋“œ์—์„œ ๋ˆ„๋ฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ฒฐํ•ฉํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฝ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ฝ”๋””๋„ค์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์ €์žฅ๋˜๊ณ  ์•„์ง Cassandra ๋…ธ๋“œ์—๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

NewSQL = NoSQL+ACID

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

NewSQL = NoSQL+ACID

๊ทธ๋ฆฌ๊ณ  ๋กค๋ฐฑํ•˜๋ ค๋ฉด ์ฝ”๋””๋„ค์ดํ„ฐ๋Š” ํŠธ๋žœ์žญ์…˜ ์ƒํƒœ๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋งŒ ํ•ด์ œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๊ฐœ์„  ๊ฒฐ๊ณผ๋กœ ์šฐ๋ฆฌ๋Š” ACID ์›์น™์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ธ๋ฑ์Šค๋กœ ์ฝ๊ธฐ

๊ฐ„๋‹จํ•œ ํ‘œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

CREATE TABLE photos (
id bigint primary key,
owner bigint,
modified timestamp,
โ€ฆ)

ID(๊ธฐ๋ณธ ํ‚ค), ์†Œ์œ ์ž ๋ฐ ์ˆ˜์ • ๋‚ ์งœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์š”์ฒญ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๋‚ ์งœ๊ฐ€ "๋งˆ์ง€๋ง‰ ๋‚ "์ธ ์†Œ์œ ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜์„ธ์š”.

SELECT *
WHERE owner=?
AND modified>?

์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ๊ธฐ์กด SQL DBMS์—์„œ๋Š” ์—ด(์†Œ์œ ์ž, ์ˆ˜์ •)๋ณ„๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ACID ๋ณด์žฅ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด ์ž‘์—…์„ ๋งค์šฐ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

C*One์˜ ์ธ๋ฑ์Šค

๋ ˆ์ฝ”๋“œ ID๊ฐ€ ๊ธฐ๋ณธ ํ‚ค์ธ ์‚ฌ์ง„์ด ํฌํ•จ๋œ ์†Œ์Šค ํ…Œ์ด๋ธ”์ด ์žˆ์Šต๋‹ˆ๋‹ค.

NewSQL = NoSQL+ACID

์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ C*One์€ ์›๋ณธ์˜ ๋ณต์‚ฌ๋ณธ์ธ ์ƒˆ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๋Š” ์ธ๋ฑ์Šค ํ‘œํ˜„์‹๊ณผ ๋™์ผํ•˜๋ฉฐ ์†Œ์Šค ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ์˜ ๊ธฐ๋ณธ ํ‚ค๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

NewSQL = NoSQL+ACID

์ด์ œ "๋งˆ์ง€๋ง‰ ๋‚  ์†Œ์œ ์ž"์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ์„ ํƒํ•˜์—ฌ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT * FROM i1_test
WHERE owner=?
AND modified>?

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

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

์–ด๋–ป๊ฒŒ ๋œ ๊ฑฐ์˜ˆ์š”

์šฐ๋ฆฌ๋Š” XNUMX๋…„ ์ „์— C*One์„ ๊ฐœ๋ฐœํ•˜์—ฌ ์ƒ์šฉํ™”์— ์ฐฉ์ˆ˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋ณต์ œ ์ธ์ž = 1(๊ทธ๋Ÿฌ๋‚˜ RAID 10)๋กœ SQL์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์‚ฌ์ง„ ๋ฉ”ํƒ€ ์ •๋ณด๋Š” Microsoft SQL Server(32๊ฐœ ๋ฐฑ์—… ํฌํ•จ)๋ฅผ ์‹คํ–‰ํ•˜๋Š” 11๊ฐœ ์‹œ์Šคํ…œ์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ํด๋Ÿฌ์Šคํ„ฐ์— ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—… ์ €์žฅ์„ ์œ„ํ•ด 10๊ฐœ์˜ ์„œ๋ฒ„๋„ ํ• ๋‹น๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด 50๋Œ€์˜ ๊ณ ๊ฐ€ ์ž๋™์ฐจ. ๋™์‹œ์— ์‹œ์Šคํ…œ์€ ์˜ˆ๋น„ ์—†์ด ์ •๊ฒฉ ๋ถ€ํ•˜์—์„œ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ์‹œ์Šคํ…œ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ํ›„ ๋ณต์ œ ์ธ์ž = 3(๊ฐ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ๋ณต์‚ฌ๋ณธ)์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ 63๊ฐœ์˜ Cassandra ์Šคํ† ๋ฆฌ์ง€ ๋…ธ๋“œ์™€ 6๊ฐœ์˜ ์ฝ”๋””๋„ค์ดํ„ฐ ๋จธ์‹ , ์ด 69๊ฐœ์˜ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ์€ ํ›จ์”ฌ ์ €๋ ดํ•˜๋ฉฐ ์ด ๋น„์šฉ์€ SQL ์‹œ์Šคํ…œ ๋น„์šฉ์˜ ์•ฝ 30%์ž…๋‹ˆ๋‹ค. ๋™์‹œ์— ๋ถ€ํ•˜๋Š” 30%๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

C*One์˜ ๋„์ž…์œผ๋กœ ๋Œ€๊ธฐ ์‹œ๊ฐ„๋„ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. SQL์—์„œ๋Š” ์“ฐ๊ธฐ ์ž‘์—…์— ์•ฝ 4,5ms๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. C*One์—์„œ - ์•ฝ 1,6ms. ํŠธ๋žœ์žญ์…˜ ๊ธฐ๊ฐ„์€ ํ‰๊ท  40ms ๋ฏธ๋งŒ์ด๊ณ  ์ปค๋ฐ‹์€ 2ms ์•ˆ์— ์™„๋ฃŒ๋˜๋ฉฐ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ๊ธฐ๊ฐ„์€ ํ‰๊ท  2ms์ž…๋‹ˆ๋‹ค. 99๋ฒˆ์งธ ๋ฐฑ๋ถ„์œ„์ˆ˜ - ๋‹จ 3~3,1ms์— ๋ถˆ๊ณผํ•˜๋ฉฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ ํšŸ์ˆ˜๊ฐ€ 100๋ฐฐ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋‘ ์ถ”์ธก์ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

์ด์ œ ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์Šคํ† ๋ฆฌ์ง€ ์‹œ์„ค์„ ํด๋ผ์šฐ๋“œ๋กœ ์ด์ „ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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