๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

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

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

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

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

Bitrix24์˜ ๊ธฐ๋ณธ ๊ธฐ์ˆ  ๋ถ„์„

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

ํŽ„์Šค์— ์†๊ฐ€๋ฝ - ๊ณ ๊ธ‰ ๊ธฐ์ˆ  ๋ถ„์„

"๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ" ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›๊ณ ์ž ํ•˜๋Š” ์—ด๋ง์œผ๋กœ ์ธํ•ด ์šฐ๋ฆฌ๋Š” pinba ๋ฐ xhprof๋ผ๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ๊ทน์ ์ธ ์‹คํ—˜์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

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

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

  • ์ง€๋‚œ ํ•œ ์‹œ๊ฐ„ ๋™์•ˆ Bitrix24 ํด๋ผ์ด์–ธํŠธ๊ฐ€ p1 ํฌํ„ธ์—์„œ ๋ช‡ ๊ฐœ์˜ PHP ์˜ค๋ฅ˜๋ฅผ ๊ฒช์—ˆ์œผ๋ฉฐ ์–ด๋–ค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๊นŒ? ์ดํ•ดํ•˜๊ณ  ์šฉ์„œํ•˜๊ณ  ์‹ ์†ํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.
  • ์ง€๋‚œ 24์‹œ๊ฐ„ ๋™์•ˆ ๋…์ผ ํฌํ„ธ์—์„œ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์˜์ƒ ํ†ตํ™”๊ฐ€ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๊นŒ? ํ’ˆ์งˆ์€ ์–ด๋– ํ–ˆ์œผ๋ฉฐ ์ฑ„๋„/๋„คํŠธ์›Œํฌ์— ์–ด๋ ค์›€์€ ์—†์—ˆ์Šต๋‹ˆ๊นŒ?
  • ์ตœ์‹  ์„œ๋น„์Šค ์—…๋ฐ์ดํŠธ์˜ ์†Œ์Šค์—์„œ ์ปดํŒŒ์ผ๋˜์–ด ํด๋ผ์ด์–ธํŠธ์— ์ถœ์‹œ๋œ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ(PHP์šฉ C ํ™•์žฅ)์ด ์–ผ๋งˆ๋‚˜ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ์„ธ๊ทธํดํŠธ๊ฐ€ ์žˆ๋‚˜์š”?
  • ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ PHP ๋ฉ”๋ชจ๋ฆฌ์— ๋งž๋‚˜์š”? ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ "๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ์ฐพ์•„์„œ ๋ฌด๋ ฅํ™”ํ•˜์„ธ์š”.

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

๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

๋˜ํ•œ Kibana๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ๊ธฐ์ˆ  ์ง€์› ๋ฐ ๊ฐœ๋ฐœ์—์„œ QA์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋ถ€์„œ์˜ ์ˆ˜์‹ญ ๋ช…์˜ ์ง์›์ด ํšŒ์‚ฌ์˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํšŒ์‚ฌ ๋‚ด ๋ชจ๋“  ๋ถ€์„œ์˜ ํ™œ๋™์„ ์ถ”์ ํ•˜๊ณ  ์ธก์ •ํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ๋กœ๊ทธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ถ„์„ํ•˜๋Š” ๋Œ€์‹ , ํ•œ ๋ฒˆ๋งŒ ๊ตฌ๋ฌธ ๋ถ„์„ ๋กœ๊ทธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ํƒ„๋ ฅ์  ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋ณด๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ง€๋‚œ ๋‹ฌ์— 3D ํ”„๋ฆฐํ„ฐ๋กœ ์ธ์‡„ํ•œ ๋จธ๋ฆฌ ๋‘ ๊ฐœ ๋‹ฌ๋ฆฐ ์ƒˆ๋ผ ๊ณ ์–‘์ด์˜ ํŒ๋งค๋Ÿ‰์„ ๋Œ€์‹œ๋ณด๋“œ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋น„์ฆˆ๋‹ˆ์Šค ๋ถ„์„

๊ธฐ์—…์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋ถ„์„์€ Excel์„ ๊ทน๋„๋กœ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์—์„œ ์‹œ์ž‘๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฒƒ์€ ๋ˆ„๊ตฌ๋‚˜ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ทธ๊ฒƒ์ด ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ Google Analytics๋Š” ๋˜ํ•œ ๋ถˆ์— ์—ฐ๋ฃŒ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ์ผ์— ๋นจ๋ฆฌ ์ต์ˆ™ํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

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

์˜ค๋žซ๋™์•ˆ ์ด ์œ ์—ฐํ•œ ์†”๋ฃจ์…˜์€ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์ง€๋งŒ ClickHouse๋Š” ๊ณ ๋ฌด๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๊ทธ๋ ‡๊ฒŒ ์กฐ๋กฑํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์ด ์ ์ฐจ ์ดํ•ด๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

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

Python ๋ฐ ๋ถ„์„๊ฐ€์— ๋Œ€ํ•œ ์ˆ˜์š”

์šฐ๋ฆฌ ํšŒ์‚ฌ์—๋Š” PHP, JavaScript, C#, C/C++, Java, Go, Rust, Python, Bash ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ 10~20๋…„ ๋™์•ˆ ๊ฑฐ์˜ ๋งค์ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ†ต๊ณ„ ๋ฒ•์น™์— ๋งž์ง€ ์•Š๋Š” ์ ˆ๋Œ€์ ์œผ๋กœ ๋†€๋ผ์šด ์žฌ๋‚œ์„ ๋‘ ๋ฒˆ ์ด์ƒ ๊ฒฝํ—˜ํ•œ ์ˆ™๋ จ๋œ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋„ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด, raid-10์˜ ๋””์Šคํฌ ๋Œ€๋ถ€๋ถ„์ด ๊ฐ•ํ•œ ๋‚™๋ขฐ๋กœ ์ธํ•ด ํŒŒ๊ดด๋˜๋Š” ๊ฒฝ์šฐ). ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์˜ค๋žซ๋™์•ˆ "ํŒŒ์ด์ฌ ๋ถ„์„๊ฐ€"๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Python์€ PHP์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„๋งŒ ์กฐ๊ธˆ ๋” ๊ธธ๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์†Œ์Šค ์ฝ”๋“œ์— ๋งˆ์Œ์„ ๋ฐ”๊พธ๋Š” ๋ฌผ์งˆ์˜ ํ”์ ์ด ์กฐ๊ธˆ ์ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ ์  ๋” ๋งŽ์€ ๋ถ„์„ ๋ณด๊ณ ์„œ๊ฐ€ ์ƒ์„ฑ๋จ์— ๋”ฐ๋ผ ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž๋Š” numpy, pandas, matplotlib, seaborn๊ณผ ๊ฐ™์€ ๋„๊ตฌ์— ๋Œ€ํ•œ ์ข์€ ์ „๋ฌธํ™”์˜ ์ค‘์š”์„ฑ์„ ์ ์  ๋” ์ดํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ์ •์ ์ธ ์—ญํ• ์€ "๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€"๋ผ๋Š” ๋‹จ์–ด์™€ ์˜ˆ, ์˜ˆ, pyspark๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํšจ๊ณผ์ ์ธ ๋ณด๊ณ  ์‹œ์—ฐ์˜ ์กฐํ•ฉ์œผ๋กœ ์ธํ•ด ์ง์›์ด ๊ฐ‘์ž๊ธฐ ๊ธฐ์ ˆํ•œ ๊ฒƒ์ด์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

๊ด€๊ณ„ํ˜• ๋Œ€์ˆ˜ํ•™์ด ์™„๋ฒฝํ•˜๊ฒŒ ๋“ค์–ด๋งž๋Š” ๊ธฐ๋Šฅ์  ํŒจ๋Ÿฌ๋‹ค์ž„์ธ Apache Spark์™€ ๊ทธ ๊ธฐ๋Šฅ์€ MySQL์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๊นŠ์€ ์ธ์ƒ์„ ์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ™๋ จ๋œ ๋ถ„์„๊ฐ€์™€ ํ•จ๊ป˜ ์ˆœ์œ„๋ฅผ ๊ฐ•ํ™”ํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์ด ๋‚ ๋กœ ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

Apache Spark/Hadoop์˜ ์ถ”๊ฐ€ ์‹œ๋„์™€ ์Šคํฌ๋ฆฝํŠธ์— ๋”ฐ๋ผ ์ง„ํ–‰๋˜์ง€ ์•Š์€ ์‚ฌํ•ญ

๊ทธ๋Ÿฌ๋‚˜ ์ŠคํŒŒํฌ์— ์‹œ์Šคํ…œ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์†์„ ๋” ์ž˜ ์”ป๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๊ณง ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. Hadoop/MapReduce/Lucene ์Šคํƒ์ด ์ƒ๋‹นํžˆ ์ˆ™๋ จ๋œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒฝ์šฐ(Java์˜ ์†Œ์Šค ์ฝ”๋“œ๋‚˜ Lucene์— ๋Œ€ํ•œ Doug Cutting์˜ ์•„์ด๋””์–ด๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ๋ถ„๋ช…ํžˆ ์•Œ ์ˆ˜ ์žˆ์Œ) Spark๋Š” ๊ฐ‘์ž๊ธฐ ์ด๊ตญ์ ์ธ ์–ธ์–ด์ธ Scala๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ์‹ค์šฉ์„ฑ ์ธก๋ฉด์—์„œ ๋งค์šฐ ๋…ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ๊ฐœ๋ฐœ ์ค‘์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ถ•์†Œ ์ž‘์—…์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น(ํ•œ ๋ฒˆ์— ๋งŽ์€ ํ‚ค๊ฐ€ ๋„์ฐฉํ•จ)์— ๋Œ€ํ•œ ๋น„๋…ผ๋ฆฌ์ ์ด๊ณ  ํˆฌ๋ช…ํ•˜์ง€ ์•Š์€ ์ž‘์—…์œผ๋กœ ์ธํ•ด Spark ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ณ„์‚ฐ์ด ์ •๊ธฐ์ ์œผ๋กœ ๊ฐ์†Œํ•˜์—ฌ ์ฃผ๋ณ€์— ์„ฑ์žฅํ•  ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ํ›„๊ด‘์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, ์ˆ˜๋งŽ์€ ์ด์ƒํ•œ ์—ด๋ฆฐ ํฌํŠธ, ๊ฐ€์žฅ ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ๊ณณ์—์„œ ์ฆ๊ฐ€ํ•˜๋Š” ์ž„์‹œ ํŒŒ์ผ, ์—„์ฒญ๋‚œ jar ์ข…์†์„ฑ์œผ๋กœ ์ธํ•ด ์ƒํ™ฉ์ด ๋”์šฑ ์•…ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๋Š” ์–ด๋ฆฐ ์‹œ์ ˆ๋ถ€ํ„ฐ ์ž˜ ์•Œ๋ ค์ง„ ํ•œ ๊ฐ€์ง€ ๊ฐ์ •์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋ˆ„๋กœ ์†์„ ์”ป์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.)

๊ทธ ๊ฒฐ๊ณผ, ์šฐ๋ฆฌ๋Š” Apache Spark(Spark Streaming, Spark SQL ํฌํ•จ) ๋ฐ Hadoop ์—์ฝ”์‹œ์Šคํ…œ(๋“ฑ)์„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๋‚ด๋ถ€ ๋ถ„์„ ํ”„๋กœ์ ํŠธ๋ฅผ "์ƒ์กด"ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์šฐ๋ฆฌ๋Š” "๊ทธ๊ฒƒ"์„ ์•„์ฃผ ์ž˜ ์ค€๋น„ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๊ณ  ๋ฐ์ดํ„ฐ ํŠน์„ฑ์˜ ๋ณ€ํ™”์™€ ๊ท ์ผํ•œ RDD ํ•ด์‹ฑ์˜ ๋ถˆ๊ท ํ˜•, ์ด๋ฏธ ์ค€๋น„๋œ ๊ฒƒ์„ ๊ฐ€์ ธ์˜ค๋ ค๋Š” ์š•๊ตฌ๋กœ ์ธํ•ด "๊ทธ๊ฒƒ"์ด ๊ฐ‘์ž๊ธฐ ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์„ ์‹ค์งˆ์ ์œผ๋กœ ๋ฉˆ์ท„๋‹ค๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  , ํด๋ผ์šฐ๋“œ ์–ด๋”˜๊ฐ€์—์„œ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š” ๊ฒƒ์ด ์ ์  ๋” ๊ฐ•๋ ฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์šฐ๋ฆฌ๋Š” Amazon Web Services์˜ ๊ธฐ์„ฑ ํด๋ผ์šฐ๋“œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. EMR ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. EMR์€ Cloudera/Hortonworks ๋นŒ๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Amazon์—์„œ ์—์ฝ”์‹œ์Šคํ…œ์˜ ์ถ”๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค€๋น„ํ•œ Apache Spark์ž…๋‹ˆ๋‹ค.

๋ถ„์„์„ ์œ„ํ•œ ๊ณ ๋ฌด ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์‹œ๊ธ‰ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

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

Amazon S3๋Š” DataLake์˜ ํ›„๋ณด์ž…๋‹ˆ๊นŒ?

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

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

Hadoop์—์„œ ์ง์ ‘ ์ค€๋น„ํ•  ํ•„์š” ์—†์ด ์นœ์ˆ™ํ•˜๊ณ  ์ž˜ ์•Œ๋ ค์ง„ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€ Amazon S3์— ํŒŒ์ผ์„ ์ €์žฅํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

๊ฐœ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ '๋‚ฎ๋‹ค'๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์„œ 'ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌ๋™'ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

Amazon Web Services์˜ ํด๋Ÿฌ์Šคํ„ฐ-๋น…๋ฐ์ดํ„ฐ-๋ถ„์„ ์ƒํƒœ๊ณ„ - ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๋ง๋กœ

AWS์—์„œ์˜ ๊ฒฝํ—˜์œผ๋กœ ํŒ๋‹จํ•˜๋ฉด Apache Hadoop/MapReduce๋Š” DataPipeline ์„œ๋น„์Šค์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ์˜ค๋žซ๋™์•ˆ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค(์ €๋Š” ๋™๋ฃŒ๋“ค์ด ๋ถ€๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ค€๋น„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค). ์—ฌ๊ธฐ์„œ๋Š” DynamoDB ํ…Œ์ด๋ธ”์˜ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค์—์„œ ๋ฐฑ์—…์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์€ ๋ช‡ ๋…„ ๋™์•ˆ ์‹œ๊ณ„์ฒ˜๋Ÿผ ๋‚ด์žฅ๋œ Hadoop/MapReduce ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ •๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค. โ€œ์„ค์ •ํ•˜๊ณ  ์žŠ์–ด๋ฒ„๋ฆฌ์„ธ์š”โ€:

๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

๋˜ํ•œ ๋ถ„์„๊ฐ€๋ฅผ ์œ„ํ•ด ํด๋ผ์šฐ๋“œ์— Jupiter ๋…ธํŠธ๋ถ์„ ์„ค์ •ํ•˜๊ณ  AWS SageMaker ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๊ณ  ์ „ํˆฌ์— ๋ฐฐํฌํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ์•…๋งˆ์ฃผ์˜์— ํšจ๊ณผ์ ์œผ๋กœ ์ฐธ์—ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ ๋ณด์ด๋Š” ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ์—์„œ ์ž์‹ ์ด๋‚˜ ๋ถ„์„๊ฐ€๋ฅผ ์œ„ํ•ด ๋…ธํŠธ๋ถ์„ ์„ ํƒํ•˜์—ฌ Hadoop/Spark ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•˜๊ณ  ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋ชจ๋“  ๊ฒƒ์„ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

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

AWS Glue - ์Šคํ…Œ๋กœ์ด๋“œ๋กœ ๊น”๋”ํ•˜๊ฒŒ ํŒจํ‚ค์ง€๋œ Apache Spark

AWS์—๋Š” "Hive/Pig/Spark" ์Šคํƒ์˜ ์ž์ฒด ๋ฒ„์ „์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. Hive์˜ ์—ญํ• , ์ฆ‰ DataLake์˜ ํŒŒ์ผ ๋ฐ ํ•ด๋‹น ์œ ํ˜• ์นดํƒˆ๋กœ๊ทธ๋Š” Apache Hive ํ˜•์‹๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์ˆจ๊ธฐ์ง€ ์•Š๋Š” "๋ฐ์ดํ„ฐ ์นดํƒˆ๋กœ๊ทธ" ์„œ๋น„์Šค์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์˜ ์œ„์น˜์™€ ํ˜•์‹์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ด ์„œ๋น„์Šค์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” s3๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋„ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ์ด ๊ฒŒ์‹œ๋ฌผ์˜ ์ฃผ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. DataLake ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๊ตฌ์„ฑ๋˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

ํŒŒ์ผ์ด ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ๋œ ๊ฒฝ์šฐ ์ˆ˜๋™์œผ๋กœ ๋˜๋Š” ์ผ์ •์— ๋”ฐ๋ผ ํฌ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ ˆ์ดํฌ์—์„œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ˜ธ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์–ด๋”˜๊ฐ€์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ์—๋Š” s3์—๋„ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋Š” ์–ด๋””์—์„œ๋‚˜ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ AWS Glue API๋ฅผ ํ†ตํ•ด ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ Apache Spark ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Hadoop์˜ ๋‚ด๋ถ€๋ฅผ ํŒŒํ—ค์น˜๊ณ  docker-moker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ์ข…์†์„ฑ ์ถฉ๋Œ์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ ๋„ pyspark ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ž˜๋˜๊ณ  ์นœ์ˆ™ํ•œ Python ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ†ตํ•ด ์ผ์ • ์šฉ๋Ÿ‰์˜ ํด๋Ÿฌ์Šคํ„ฐ์˜ N ๋…ธ๋“œ์—์„œ ์‹คํ–‰์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

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

๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

๋”ฐ๋ผ์„œ s3์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spark ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ python/pyspark์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•œ ํ›„ ํด๋ผ์šฐ๋“œ์— ํ–‰์šด์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ณผ์ œ๊ฐ€ ๋–จ์–ด์ ธ์„œ ์‚ฌ๋ผ์ง„๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ์˜ˆ, Apache Pig ์Šคํƒ€์ผ๋กœ ์•„๋ฆ„๋‹ค์šด ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋˜์—ˆ๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ PHP์™€ JavaScript์—์„œ ์‹ฌ์ธต์ ์œผ๋กœ ๋งž์ถคํ™”๋œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค(์ธ์ง€ ๋ถ€์กฐํ™”๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋…„ ๋ฐ ์˜ค๋ฅ˜ ์—†์Œ).

๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

๋ ˆ์ดํฌ์— ์ €์žฅ๋˜๋Š” ํŒŒ์ผ์˜ ํ˜•์‹์ด ์„ฑ๋Šฅ์˜ ํ•ต์‹ฌ

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

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

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

AWS Athena - ์žญ์ธ๋”๋ฐ•์Šค

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ํ˜ธ์ˆ˜๋ฅผ ๋งŒ๋“ค๋‹ค๊ฐ€ ์šฐ์—ฐํžˆ Amazon Athena๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ‘์ž๊ธฐ ๋Œ€๊ทœ๋ชจ ๋กœ๊ทธ ํŒŒ์ผ์„ ์˜ฌ๋ฐ”๋ฅธ(๋งˆ๋ฃจ) ์—ด ํ˜•์‹์˜ ํด๋” ์ƒค๋“œ์— ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ๋ฐฐ์—ดํ•˜๋ฉด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ํ•ด๋‹น ํŒŒ์ผ์—์„œ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์„ ํƒํ•˜๊ณ  Apache Spark/Glue ํด๋Ÿฌ์Šคํ„ฐ ์—†์ด๋„ ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.

s3์˜ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ๋™๋˜๋Š” Athena ์—”์ง„์€ ์ „์„ค์ ์ธ ํ”„๋ ˆ์Šคํ†  ์•…์žฅ - s3 ๋ฐ Hadoop์—์„œ Cassandra ๋ฐ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํŒŒ์ผ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ MPP(๋Œ€๊ทœ๋ชจ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ) ์ ‘๊ทผ ๋ฐฉ์‹ ์ œํ’ˆ๊ตฐ์„ ๋Œ€ํ‘œํ•ฉ๋‹ˆ๋‹ค. Athena์—๊ฒŒ SQL ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์š”์ฒญํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด "๋น ๋ฅด๊ณ  ์ž๋™์œผ๋กœ ์ž‘๋™"ํ•ฉ๋‹ˆ๋‹ค. Athena๋Š” "์Šค๋งˆํŠธ"ํ•˜๋ฉฐ, ํ•„์š”ํ•œ ์ƒค๋”ฉ ํด๋”๋กœ๋งŒ ์ด๋™ํ•˜๊ณ  ์š”์ฒญ์— ํ•„์š”ํ•œ ์—ด๋งŒ ์ฝ์Šต๋‹ˆ๋‹ค.

Athena์— ๋Œ€ํ•œ ์š”์ฒญ ๊ฐ€๊ฒฉ๋„ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋น„์šฉ์„ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค ์Šค์บ” ๋ฐ์ดํ„ฐ์˜ ์–‘. ์ €๊ฒƒ๋“ค. ๋ถ„๋‹น ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋จธ์‹  ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ... 100-500 ๋จธ์‹ ์—์„œ ์‹ค์ œ๋กœ ์Šค์บ”๋œ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฐ๋ฐ s3์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒค๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

๊ทธ ๊ฒฐ๊ณผ, ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ์ •๋ณด ๋ณด์•ˆ๋ถ€ํ„ฐ ๋ถ„์„๊นŒ์ง€ ํšŒ์‚ฌ์˜ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ถ€์„œ๊ฐ€ Athena์— ์ ๊ทน์ ์œผ๋กœ ์š”์ฒญํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ๋ช‡ ์ดˆ, ๋ช‡ ์ดˆ, ๋ช‡ ๋‹ฌ, ๋ฐ˜๋…„ ๋“ฑ P.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๋” ๋‚˜์•„๊ฐ€ ํด๋ผ์šฐ๋“œ์—์„œ ๋‹ต๋ณ€์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ODBC ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•ด: ๋ถ„์„๊ฐ€๋Š” ์นœ์ˆ™ํ•œ ์ฝ˜์†”์— SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฟผ๋ฆฌ๋Š” 100-500๋Œ€์˜ ๋จธ์‹ ์—์„œ "3ํŽ˜๋‹ˆ์šฉ"์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ sXNUMX์— ๋ณด๋‚ด๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๋ช‡ ์ดˆ ์•ˆ์— ๋‹ต๋ณ€์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํŽธ์•ˆํ•œ. ๊ทธ๋ฆฌ๊ณ  ๋น ๋ฅด๋‹ค. ๋‚˜๋Š” ์•„์ง๋„ ๊ทธ๊ฒƒ์„ ๋ฏฟ์„ ์ˆ˜ ์—†๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์ธ ์—ด ํ˜•์‹๊ณผ ํด๋”๋กœ์˜ ํ•ฉ๋ฆฌ์ ์ธ ๋ถ„ํ• ์„ ํ†ตํ•ด s3์— ์ €์žฅํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด์„œ ์šฐ๋ฆฌ๋Š” DataLake์™€ ๋น ๋ฅด๊ณ  ์ €๋ ดํ•œ ๋ถ„์„ ์—”์ง„์„ ๋ฌด๋ฃŒ๋กœ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Š” ํšŒ์‚ฌ์—์„œ ๋งค์šฐ ์ธ๊ธฐ๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด... SQL์„ ์ดํ•ดํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ์‹œ์ž‘/์ค‘์ง€/์„ค์ •๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. "๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์™œ ๋” ๋งŽ์€ ๋น„์šฉ์„ ์ง€๋ถˆํ•ฉ๋‹ˆ๊นŒ?"

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

๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ์ €๋ ดํ•œ DataLake๋ฅผ ๊ตฌ์„ฑํ•œ ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ 

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

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

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

์—ฌํ–‰์ด ์‹œ์ž‘๋  ๋•Œ ๋‚ด ๋จธ๋ฆฌ๋Š” ๊ฐœ๋ฐฉํ˜• ๋ฐ ํ์‡„ํ˜• ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ˆ˜๋งŽ์€ ์•ผ์ƒ ๋™๋ฌผ์›๊ณผ ํ›„์†์— ๋Œ€ํ•œ ์ฑ…์ž„์˜ ๋ถ€๋‹ด์— ๋Œ€ํ•œ ์ดํ•ด๋กœ ๊ฐˆ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋„๊ตฌ(nagios/munin -> elastic/kibana -> Hadoop/Spark/s3...)์—์„œ DataLake ๊ตฌ์ถ•์„ ์‹œ์ž‘ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ˆ˜์ง‘ํ•˜๊ณ  ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฌผ๋ฆฌํ•™์„ ๊นŠ์ด ์ดํ•ดํ•˜์„ธ์š”. ๋ณต์žกํ•˜๊ณ  ์–ด๋‘์šด ๋ชจ๋“  ๊ฒƒ์„ ์ ๊ณผ ๊ฒฝ์Ÿ์ž์—๊ฒŒ ์ œ๊ณตํ•˜์„ธ์š”.

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

์ถœ์ฒ˜ : habr.com

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