๐Ÿ“– ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„

โ€˜๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„โ€™ ์˜จ์˜คํ”„๋ผ์ธ ์Šคํ„ฐ๋”” ๋‚ด์šฉ๊ณผ ๊ธฐํƒ€ ์ฐธ๊ณ ์ž๋ฃŒ๋ฅผ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

Contents


Intro

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

  • ํ•˜๋‘ก(Hadoop): ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ถ„์‚ฐ ์ €์žฅ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ŠคํŒŒํฌ(Spark): ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ ํด๋Ÿฌ์Šคํ„ฐ ์ปดํ“จํŒ… ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋น ๋ฅธ ์†๋„์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • NoSQL: ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ, ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์ด ๊ฐ•์กฐ๋ฉ๋‹ˆ๋‹ค.
  • ๋น…๋ฐ์ดํ„ฐ: ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋„๊ตฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์šด ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋กœ, ๋‹ค์–‘ํ•œ ์œ ํ˜•๊ณผ ์†Œ์Šค์—์„œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒค๋”ฉ(Sharding): ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ„์‚ฐ ์ €์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ธฐ์ˆ ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ฐ๋‚ด์–ด ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์ข…์  ์ผ๊ด€์„ฑ(Eventual Consistency): ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์—๋Š” ๋ชจ๋“  ๋ณต์ œ๋ณธ์ด ๋™์ผํ•œ ์ƒํƒœ๊ฐ€ ๋˜๋Š” ์ผ๊ด€์„ฑ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.
  • ACID: ํŠธ๋žœ์žญ์…˜์˜ ์†์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋„ค ๊ฐ€์ง€ ์†์„ฑ์ธ ์›์ž์„ฑ(Atomicity), ์ผ๊ด€์„ฑ(Consistency), ๊ณ ๋ฆฝ์„ฑ(Isolation), ์ง€์†์„ฑ(Durability)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • CAP ์ •๋ฆฌ(CAP Theorem): ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์ผ๊ด€์„ฑ(Consistency), ๊ฐ€์šฉ์„ฑ(Availability), ๋ถ„ํ•  ๋‚ด์„ฑ(Partition Tolerance) ์ค‘์—์„œ ๋‘ ๊ฐ€์ง€๋งŒ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด๋ก ์ž…๋‹ˆ๋‹ค.
  • ๋งต๋ฆฌ๋“€์Šค(MapReduce): ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ๋กœ, ๋ถ„์‚ฐ ์ปดํ“จํŒ… ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

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


01. ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

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

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

  • ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜(Elasticsearch): ๋ถ„์‚ฐํ˜• ๊ฒ€์ƒ‰ ๋ฐ ๋ถ„์„ ์—”์ง„์œผ๋กœ, ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰๊ณผ ๋ถ„์„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์†”๋ผ(Solr): ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜์™€ ์œ ์‚ฌํ•œ ์˜คํ”ˆ ์†Œ์Šค ๊ฒ€์ƒ‰ ํ”Œ๋žซํผ์œผ๋กœ, Apache Lucene ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ‰์ธํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ณ ์„ฑ๋Šฅ์˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์‹ ๋ขฐ์„ฑ(Reliability)

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

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

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

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

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

  • ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ ๋ฒ„๊ทธ๋กœ ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ผ์ œํžˆ ๋ฉˆ์ถฐ๋ฒ„๋ฆฐ ์›์ธ์ด ๋œ 2012๋…„ 6์›” 30์ผ ์œค์ดˆ

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

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

ํ™•์žฅ์„ฑ(Scalability)

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

ํŠธ์œ„ํ„ฐ ์‚ฌ๋ก€

ํŠธ์œ„ํ„ฐ์˜ ํ™ˆ ํƒ€์ž„๋ผ์ธ์„ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค. ํ•œ ์œ ์ €๊ฐ€ ํŠธ์œ—์„ ์ž‘์„ฑํ–ˆ์„ ๋•Œ, ์ด ์œ ์ €์˜ ํŒ”๋กœ์›Œ๋“ค์€ ํ™ˆ ํƒ€์ž„๋ผ์ธ์—์„œ ์œ ์ €๊ฐ€ ์ž‘์„ฑํ•œ ์ƒˆ๋กœ์šด ํŠธ์œ—์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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

์ง€์—ฐ์‹œ๊ฐ„๊ณผ ์‘๋‹ต์‹œ๊ฐ„

์‘๋‹ต์‹œ๊ฐ„์€ ํด๋ผ์ด์–ธํŠธ ๊ณผ์ „์—์„œ ๋ณธ ์‹œ๊ฐ„์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‹ค์ œ ์‹œ๊ฐ„ ์™ธ์—๋„ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ๊ณผ ํ ์ง€์—ฐ๋„ ํฌํ•จ๋œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ์ง€์—ฐ์‹œ๊ฐ„์€ ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜๊ธธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ํœด์ง€ ์ƒํƒœ์ธ ์‹œ๊ฐ„์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
์‘๋‹ต์‹œ๊ฐ„์„ ์ธก์ • ๊ฐ€๋Šฅํ•œ ๊ฐ’์˜ ๋ถ„ํฌ๋กœ ํ‰๊ท  ๊ฐ’์œผ๋กœ ์ƒ๊ฐํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋ฐฑ๋ถ„์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์–ผ๋งˆ๋‚˜ ์˜ค๋žซ๋™์•ˆ ๊ธฐ๋‹ค๋ ค์•ผํ•˜๋Š”์ง€ ์•Œ๋ ค๋ฉด ์ค‘์•™๊ฐ’์„, ํŠน์ด ๊ฐ’์ด ์–ผ๋งˆ๋‚˜ ์ข‹์ง€ ์•Š์€์ง€ ์•Œ์•„๋ณด๋ ค๋ฉด ์ƒ์œ„ ๋ฐฑ๋ถ„์œ„๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ์ƒ์œ„ ๋ฐฑ๋ถ„์œ„๋Š” ๊ผฌ๋ฆฌ ์ง€์—ฐ ์‹œ๊ฐ„(tail latency)์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, 95๋ถ„์œ„ ์‘๋‹ต์‹œ๊ฐ„์ด 1.5์ดˆ๋ผ๊ณ  ํ•˜๋ฉด 1.5์ดˆ ๋ฏธ๋งŒ์ธ ์š”์ฒญ์ด 100๊ฐœ ์ค‘์— 95๊ฐœ์ธ ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

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

์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์š”์†Œ๋Š” ์ฝ๊ธฐ์˜ ์–‘, ์“ฐ๊ธฐ์˜ ์–‘, ์ €์žฅํ•  ๋ฐ์ดํ„ฐ์˜ ์–‘, ๋ฐ์ดํ„ฐ์˜ ๋ณต์žก๋„, ์‘๋‹ต ์‹œ๊ฐ„ ์š”๊ตฌ์‚ฌํ•ญ, ์ ‘๊ทผ ํŒจํ„ด ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์šฉ๋Ÿ‰ ํ™•์žฅ(scaling up)ย ยป ์ˆ˜์ง ํ™•์žฅ(vertical scaling)
  • ๊ทœ๋ชจ ํ™•์žฅ(scaling out)ย ยป ์ˆ˜ํ‰ ํ™•์žฅ(horizontal scaling)
  • ํƒ„๋ ฅ์ ์ธ ์‹œ์Šคํ…œ์€ ๋ถ€ํ•˜๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์„ ๋งŒํผ ๋†’์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜์ง€๋งŒ ์ˆ˜๋™์ ์œผ๋กœ ํ™•์žฅํ•˜๋Š” ์‹œ์Šคํ…œ์ด ๋” ๊ฐ„๋‹จํ•˜๊ณ  ์šด์˜์ƒ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ด ๋” ์ ์Šต๋‹ˆ๋‹ค.
  • ์Šคํƒ€ํŠธ์—… ์ดˆ๊ธฐ ๋‹จ๊ณ„๋‚˜ ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ์ œํ’ˆ์˜ ๊ฒฝ์šฐ์— ๋ฏธ๋ž˜๋ฅผ ๊ฐ–์–ดํ•œ ๋ถ€ํ•˜์— ๋Œ€๋น„ํ•ด ํ™•์žฅํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋น ๋ฅด๊ฒŒ ๋ฐ˜๋ณตํ•ด์„œ ์ œํ’ˆ ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ์ž‘์—…์ด ์ข€ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์œ ์ง€๋ณด์ˆ˜์„ฑ(Maintainability)

๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ์ƒ์—์„œ ์ƒ์‚ฐ์ ์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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


02. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ ์งˆ์˜ ์–ธ์–ด

๊ด€๊ณ„ํ˜• ๋ชจ๋ธ๊ณผ ๋ฌธ์„œ ๋ชจ๋ธ

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

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

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

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

๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์งˆ์˜ ์–ธ์–ด

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

๋งต๋“€๋ฆฌ์Šค ์งˆ์˜๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ๋กœ ์ผ๋ถ€ NoSQL์—์„œ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋งŽ์€ ๋ฌธ์„œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ read-only ์งˆ์˜ ์ˆ˜ํ–‰์‹œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ €์ˆ˜์ค€์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ๋กœ ์ฃผ๋กœ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ ๋งต(map) ๋‹จ๊ณ„์—์„œ๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ณ‘๋ ฌ๋กœ ๋™์‹œ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋“€์Šค(reduce) ๋‹จ๊ณ„์—์„œ๋Š” ๋งต ๋‹จ๊ณ„์˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋“€์Šค ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ง‘๊ณ„ํ•˜๊ณ  ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„ํ˜• ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

๊ทธ๋ž˜ํ”„ํ˜• ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๊ฐ€ ์ผ๋ฐ˜์ ์ธ ๋ชจ๋ธ์—์„œ ์ •์ ๊ณผ ๊ฐ„์„ ์ด๋ผ๋Š” ๊ฐ์ฒด๋กœ ์ด๋ค„์ง„ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋™์ข… ๋ฐ์ดํ„ฐ์— ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์‚ฌ์ดํผ ์งˆ์˜ ์–ธ์–ด
์†์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ์œ„ํ•œ ์„ ์–ธํ˜• ์งˆ์˜ ์–ธ์–ด๋กœ Neo4j ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์šฉ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ •์ ์€ id๋กœ ์ง€์ •ํ•˜๊ณ , ๊ฐ„์„ ์„ (๊ผฌ๋ฆฌ๋…ธ๋“œ id) -[:๊ฐ„์„  label]=>(๋จธ๋ฆฌ๋…ธ๋“œ id)์˜ ํ˜•ํƒœ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์„ ์–ธํ˜• ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์งˆ์˜ ์ตœ์ ํ™”๊ธฐ๊ฐ€ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ์ „๋žต์„ ์ž๋™์ ์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

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

_:lucy a :Person; :name "Lucy"; :bornIn _:idaho._

์ŠคํŒŒํด ์งˆ์˜ ์–ธ์–ด๋Š” RDF(Resource Description Framework) ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ ํŠธ๋ฆฌํ”Œ ์ €์žฅ์†Œ ์งˆ์˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์‚ฌ์ดํผ๋ณด๋‹ค ๋จผ์ € ๋งŒ๋“ค์–ด์กŒ๊ณ  ์‚ฌ์ดํผ ํŒจํ„ด ๋งค์นญ์œผ๋กœ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋ฅผ ๋•๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋กœ๊ทธ
์ŠคํŒŒํด์ด๋‚˜ ์‚ฌ์ดํผ๋ณด๋‹ค ๋” ์˜ค๋ž˜๋œ ์–ธ์–ด๋กœ ์„œ์ˆ ์–ด๋กœ ์ž‘์„ฑํ•˜๋ฉฐ select๋กœ ๋ฐ”๋กœ ์งˆ์˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹จ๊ณ„๋ฅผ ๋‚˜๋ˆ ์„œ ์กฐ๊ธˆ์”ฉ ์งˆ์˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

// ๋ฐ์ดํ„ฐ ์ •์˜
name(namerica, 'North America').
type(namerica, continent).

// rule ์ •์˜
within_recursive(Location, name) :- name(Location, name).
within_recursive(Location, name) :- within(Location, Via),
									within_recursive(Via, Name).

migrated(Name, BorIn, LivingIn) :- name(Person, Name),
									born_in(Person, BornLoc),
									...
									within_recursive(LivingLoc, LivingIn).

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


03. ์ €์žฅ์†Œ์™€ ๊ฒ€์ƒ‰

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

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

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

ํ•ด์‹œํ…Œ์ด๋ธ”์€ ํ‚ค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ ๋””์Šคํฌ ์„ฑ๋Šฅ์„ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋“  ๊ฐœ๋ณ„ ํ‚ค๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„œ ํšจ์œจ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

SS ํ…Œ์ด๋ธ”๊ณผ LSM ์ƒ‰์ธ
SS ํ…Œ์ด๋ธ”์€ ์ •๋ ฌ๋œ ๋ฌธ์ž ํ…Œ์ด๋ธ”์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ํ‚ค๋กœ ์ •๋ ฌ๋œ ํ˜•์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ํ‚ค๋Š” ๊ฐ ์„ธ๊ทธ๋จผํŠธ์—์„œ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ํ‚ค๋ฅผ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ์ƒ‰์ธ์˜ ํ‚ค ์˜คํ”„์…‹์„ ํ™•์ธํ•ด์„œ ๊ทธ ์˜คํ”„์…‹์— ํ•ด๋‹นํ•˜๋Š” ๋””์Šคํฌ์— ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํ™•์ธํ•ด์„œ ๋น ๋ฅด๊ฒŒ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ‚ค-๊ฐ’ ์Œ์ด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ๊ธฐ์กด์˜ ๋””์Šคํฌ์— ์žˆ๋Š” ์ •๋ ฌ๋œ ์„ธ๊ทธ๋จผํŠธ ์™ธ์— ์ธ๋ฉ”๋ชจ๋ฆฌ์— ๋ฉคํ…Œ์ด๋ธ”(memtable)์„ ๋‘๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฉคํ…Œ์ด๋ธ”์ด ํŠน์ • ์ž„๊ณ„๊ฐ’์„ ๋„˜๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ์„ธ๊ทธ๋จผํŠธ๋กœ ๋””์Šคํฌ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ €์žฅ์†Œ ์—”์ง„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์€ ๋ฉคํ…Œ์ด๋ธ” ๊ฒ€์ƒ‰ ํ›„ ๋””์Šคํฌ์˜ ์ตœ์‹ ์ˆœ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์กฐํšŒํ•˜๋Š” ์ˆœ์„œ๋กœ ์ด๋ค„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ ์žฅ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฉคํ…Œ์ด๋ธ”์ด ์†์‹ค๋˜๋Š” ๊ฒƒ์„ ์šฐ๋ คํ•ด ๋””์Šคํฌ์— ๋กœ๊ทธ๋ฅผ ๋‘์–ด ๋ณต์›์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
LSM ํŠธ๋ฆฌ๋Š” Log-Structured Merge Tree๋กœ ์ •๋ ฌ๋  ํŒŒ์ผ ๋ณ‘ํ•ฉ๊ณผ ์ปดํŒฉ์…˜ ์›๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ €์žฅ์†Œ ์—”์ง„์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฉคํ…Œ์ด๋ธ”์— ์—†๋Š” ํ‚ค๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์˜ค๋ž˜๋œ ์„ธ๊ทธ๋จผํŠธ๊นŒ์ง€ ์กฐํšŒํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ธ”๋ฃธ ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ฃธ ํ•„ํ„ฐ๋Š” ํ‚ค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜์ง€ ์•Š์Œ์„ ์•Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ๋””์Šคํฌ ์ฝ๊ธฐ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SS ํ…Œ์ด๋ธ”์˜ ์ปดํŒฉ์…˜ ์ „๋žต์€ ํฌ๊ธฐ ๊ณ„์ธต ์ปดํŒฉ์…˜๊ณผ ๋ ˆ๋ฒจ ์ปดํŒฉ์…˜์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๊ธฐ ๊ณ„์ธต ์ปดํŒฉ์…˜์€ ์ƒˆ๋กญ๊ณ  ์ž‘์€ SS ํ…Œ์ด๋ธ”์„ ์ƒ๋Œ€์ ์œผ๋กœ ์˜ค๋ž˜๋œ SS ํ…Œ์ด๋ธ”์— ๋ณ‘ํ•ฉํ•˜๊ณ , ๋ ˆ๋ฒจ ์ปดํŒฉ์…˜์€ SS ํ…Œ์ด๋ธ”์„ ๋” ์ž‘๊ฒŒ ๋‚˜๋ˆ„๊ณ  ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐœ๋ณ„ ๋ ˆ๋ฒจ๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ ๊ณต๊ฐ„์„ ๋œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

B ํŠธ๋ฆฌ
๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ƒ‰์ธ ์œ ํ˜•์œผ๋กœ ๊ณ ์ • ํฌ๊ธฐ ๋ธ”๋ก์ด๋‚˜ ํŽ˜์ด์ง€๋กœ ๋‚˜๋ˆ„๊ณ  ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€ ์ฝ๊ธฐ ๋˜๋Š” ์“ฐ๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ƒ‰์ธ์—์„œ ํ‚ค๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” root์—์„œ ์‹œ์ž‘ํ•˜๊ณ  ํ‚ค๊ฐ€ ํ•ด๋‹นํ•˜๋Š” ๋ฒ”์œ„์˜ leaf page์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์œ„ ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ˆ˜๋ฅผ ๋ถ„๊ธฐ ๊ณ„์ˆ˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ํ‚ค๊ฐ€ ์†ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์ฐพ๊ณ  ๊ฑฐ๊ธฐ์— ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๊ฑฐ๋‚˜, ํŽ˜์ด์ง€ ๊ณต๊ฐ„์ด ์—†๋‹ค๋ฉด ํŽ˜์ด์ง€๋ฅผ ๋‚˜๋ˆ„๊ณ  ์ƒ์œ„ ํŽ˜์ด์ง€์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. B ํŠธ๋ฆฌ์˜ ์“ฐ๊ธฐ ์ž‘์—…์€ ์“ฐ๊ธฐ ์ „ ๋กœ๊ทธ๋ฅผ ๋น„์ƒ์‹œ์— ๋Œ€๋น„ํ•ด ๋‘๊ณ , ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ ์ƒ์˜ ํŽ˜์ด์ง€ ๋ฎ์–ด์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•ด ๋ž˜์น˜(latch, ๊ฐ€๋ฒผ์šด ์ž ๊ธˆ)๋กœ ํŠธ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. B ํŠธ๋ฆฌ๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํŽ˜์ด์ง€์— ํ‚ค๋ฅผ ์ถ•์•ฝํ•ด์„œ ์“ด๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ตœ์ ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

LSM ํŠธ๋ฆฌ์™€ B ํŠธ๋ฆฌ์˜ ์ฐจ์ด

  • ์ผ๋ฐ˜์ ์œผ๋กœ LSM ํŠธ๋ฆฌ๊ฐ€ ๋ณดํ†ต ์“ฐ๊ธฐ์—์„œ ๋น ๋ฅด๊ณ  B ํŠธ๋ฆฌ๊ฐ€ ์ฝ๊ธฐ์—์„œ ๋น ๋ฅธ ํŽธ์ž…๋‹ˆ๋‹ค. LSM ํŠธ๋ฆฌ๋Š” ๊ฐ ์ปดํŒฉ์…˜ ๋‹จ๊ณ„์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ SS ํ…Œ์ด๋ธ”์„ ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • LSM ํŠธ๋ฆฌ๋Š” B ํŠธ๋ฆฌ๋ณด๋‹ค ์“ฐ๊ธฐ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋†’๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. LSM ํŠธ๋ฆฌ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ฆํญ์ด ๋” ๋‚ฎ๊ณ  ํŠธ๋ฆฌ์—์„œ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๋ฎ์–ด ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ปดํŒฉ์…˜๋œ SS ํ…Œ์ด๋ธ” ํŒŒ์ผ์„ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • LSM ํŠธ๋ฆฌ๋Š” ์••์ถ•๋ฅ ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • B ํŠธ๋ฆฌ๋Š” ์žฅ์ ์€ ๊ฐ ํ‚ค๊ฐ€ ์ƒ‰์ธ์˜ ํ•œ ๊ณณ์—๋งŒ ์ •ํ™•ํ•˜๊ฒŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธํ™” ๊ตฌ์กฐํ™” ์ €์žฅ์†Œ ์—”์ง„์€ ๋‹ค๋ฅธ ์„ธ๊ทธ๋จผํŠธ์— ๊ฐ™์€ ํ‚ค์˜ ๋‹ค์ค‘ ๋ณต์‚ฌ๋ณธ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


04. ๋ถ€ํ˜ธํ™”์™€ ๋ฐœ์ „

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

๋ฐ์ดํ„ฐ ๋ถ€ํ˜ธํ™” ํ˜•์‹

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋ถ€ํ˜ธํ™”๋ž€ ์ธ๋ฉ”๋ชจ๋ฆฌ ํ‘œํ˜„์—์„œ ๋ฐ”์ดํŠธ์—ด๋กœ์˜ ์ „ํ™˜์„ ๋งํ•˜๋ฉฐ, ์ง๋ ฌํ™” ๋˜๋Š” ๋งˆ์ƒฌ๋ง์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. (์ž๋ฐ”์˜ Serializable, ๋ฃจ๋น„์˜ Marshal) ๋ฐ˜๋Œ€๋Š” ๋ณตํ˜ธํ™”(ํŒŒ์‹ฑ, ์—ญ์ง๋ ฌํ™”, ์–ธ๋งˆ์…œํ™”)์ž…๋‹ˆ๋‹ค. (์ฑ…์—์„œ๋Š” ์ง๋ ฌํ™”๋ผ๋Š” ๋ง์ด ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„์™€์˜ ํ˜ผ๋™์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€ํ˜ธํ™”๋กœ ํ‘œํ˜„)

XML๊ณผ JSON
ํ‘œ์ค€ํ™”๋œ ๋ถ€ํ˜ธํ™”๋กœ๋Š” JSON๊ณผ XML์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋ณดํŽธ์ ์ด์ง€๋งŒ ์ˆ˜๋ฅผ ๋‹ค๋ฃฐ ๋•Œ JSON์€ ๋ถ€๋™์†Œ์ˆ˜์  ์ˆ˜๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š๊ณ , XML๊ณผ CSV๋Š” ์ˆ˜์™€ ์ˆซ์ž์˜ ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์ด์ง„ ๋ฌธ์ž์—ด์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ Base64๋กœ ๋ถ€ํ˜ธํ™” ๋˜์–ด ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ํŠน์ง•์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘˜ ๋‹ค์Šคํ‚ค๋งˆ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

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

ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ์™€ ์Šค๋ฆฌํ”„ํŠธ, ์•„๋ธŒ๋กœ๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ์ด์šฉํ•ด ์ด์ง„ ๋ถ€ํ˜ธํ™” ํ˜•์‹์„ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.

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

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

์ด์™ธ์—๋„ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒค๋”์— ํŠนํ™”๋œ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ๋ณตํ˜ธํ™”ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„(ODBC, JDBC)๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐํ”Œ๋กœ ๋ชจ๋“œ

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

์„œ๋น„์Šค๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐํ”Œ๋กœ
์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ถ€ํ˜ธํ™”๋Š” ์„œ๋น„์Šค API ๋ฒ„์ „ ๊ฐ„ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋น„์Šค์—์„œ REST๋Š” HTTP ์›์น™์„ ํ† ๋Œ€๋กœ ํ•œ ์„ค๊ณ„์ฒ ํ•™์ด๊ณ , SOAP๋Š” ๋„คํŠธ์›Œํฌ API ์š”์ฒญ์„ ์œ„ํ•œ XML ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. SOAP๋Š” WSDL ์–ธ์–ด๋กœ ๊ธฐ์ˆ ํ•˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ์ปฌ ํด๋ž˜์Šค์™€ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋กœ ์›๊ฒฉ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ(RPC)์€ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์œผ๋กœ ์˜ˆ์ธก์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋Œ€์ฑ…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

results matching ""

    No results matching ""