์ฃผ์š” ์ปจํ…์ธ ๋กœ ์ด๋™

๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ” ๋ฐ ๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค ๋จธ์‹  ๋Ÿฌ๋‹์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„์— ๊ฐ€๊นŒ์šด ์ด์ƒ ํƒ์ง€

db-257-blog-img-og

๋ฐœํ–‰์ผ: 2024๋…„ 1์›” 9์ผ

์†”๋ฃจ์…˜2 min read

๋ฒˆ์—ญ: HaUn Kim - Original Blog Link

์ด์ƒ ํƒ์ง€์˜ ์ค‘์š”์„ฑ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

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

์ด์ƒ ํƒ์ง€์˜ ์–ด๋ ค์›€

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

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

๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค ๋ ˆ์ดํฌํ•˜์šฐ์Šค ํ”Œ๋žซํผ์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

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

ํŠนํžˆ, ๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค ๋ ˆ์ดํฌํ•˜์šฐ์Šค ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„์ •์ƒ ๋ ˆ์ฝ”๋“œ๋ฅผ ํƒ์ง€ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•œ ๊ฒฉ๋ฆฌ ํฌ๋ฆฌ์ŠคํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜(isolation forest algorithm)์„ ํ›ˆ๋ จํ•˜๊ณ , ํ›ˆ๋ จ๋œ ๋ชจ๋ธ์„ ์ƒ์„ฑ๋œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ๋ธ”๋กœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ธ”๋กœ๊ทธ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค์˜ ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ”(DLT)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ , ๋Œ€๊ทœ๋ชจ ๊ธฐ๋ณธ ์ธํ”„๋ผ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„์— ๊ฐ€๊นŒ์šด ์ด์ƒ ํƒ์ง€ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ธ”๋กœ๊ทธ์—์„œ ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ๋Š” ์‹ ์šฉ์นด๋“œ ๊ฑฐ๋ž˜๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ์˜ ์ƒ˜ํ”Œ์ด๋ฉฐ, ์ด๋ ‡๊ฒŒ ํƒ์ง€๋œ ์ด์ƒ ๊ฑฐ๋ž˜๋Š” ์‚ฌ๊ธฐ ๊ฑฐ๋ž˜์ž…๋‹ˆ๋‹ค.

Architecture of the ML and Delta Live Tables based anomaly detection solution outlined in the blog

๋ธ”๋กœ๊ทธ์— ์†Œ๊ฐœ๋œ ML ๋ฐ ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ์ด์ƒ ํƒ์ง€ ์†”๋ฃจ์…˜์˜ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

Scikit-learn ๊ฒฉ๋ฆฌ ํฌ๋ฆฌ์ŠคํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค ๋จธ์‹ ๋Ÿฌ๋‹ ๋Ÿฐํƒ€์ž„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, MLflow ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์Šต๋˜๋Š” ๋™์•ˆ ์ด์ƒ ํƒ์ง€ ๋ชจ๋ธ์„ ์ถ”์ ํ•˜๊ณ  ๋กœ๊น…ํ•ฉ๋‹ˆ๋‹ค. ETL ํŒŒ์ดํ”„๋ผ์ธ์€ ์ „์ ์œผ๋กœ ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ SQL๋กœ ๊ฐœ๋ฐœ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์ด๋“œ

์ตœ์‹  ๋ถ„์„์„ ์œ„ํ•œ ์ปดํŒฉํŠธ ๊ฐ€์ด๋“œ

๋ ˆ์ด๋ธ”์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ด์ƒ ํƒ์ง€๋ฅผ ์œ„ํ•œ ๊ฒฉ๋ฆฌ ํฌ๋ฆฌ์ŠคํŠธ

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

Isolating an outlier is easier than isolating an inlier
์•„์›ƒ๋ผ์ด์–ด๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ธ๋ผ์ด์–ด๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‰ฝ์Šต๋‹ˆ๋‹ค.ย 

๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค๊ฐ€ ๋ชจ๋ธ ํ›ˆ๋ จ ๋ฐ ์ถ”์ ์— ์–ด๋–ค ๋„์›€์„ ์ฃผ๋‚˜์š”?

๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค์—์„œ ๋จธ์‹ ๋Ÿฌ๋‹๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์„ ํ•  ๋•Œ๋Š” ๋จธ์‹ ๋Ÿฌ๋‹ ๋Ÿฐํƒ€์ž„๊ณผ ํ•จ๊ป˜ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค ๋ฐ ๋จธ์‹ ๋Ÿฌ๋‹ ๊ด€๋ จ ์ž‘์—…์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋งŽ์€ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ML ๋Ÿฐํƒ€์ž„์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Scikit-learn์€ ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ๊ฒฉ๋ฆฌ ํฌ๋ฆฌ์ŠคํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ›Œ๋ฅญํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.



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

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

๋ชจ๋ธ์ด ๋กœ๊น…๋˜๋ฉด MLflow ๋‚ด์—์„œ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋ธ์„ ๋“ฑ๋กํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์•„๋ž˜ ์ด๋ฏธ์ง€์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ MLflow๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ๋‚ด์—์„œ ๋ฒกํ„ฐํ™”๋œ ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜(User Defined Function, UDF)๋กœ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Apache Sparkโ„ข๋ฅผ ํ†ตํ•œ ๋ถ„์‚ฐ ์ธ์ŠคํŠธ๋ฆผ ๋˜๋Š” ๋ฐฐ์น˜ ์ถ”๋ก ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด MLflow๋Š” ๋ชจ๋ธ์„ ์†์‰ฝ๊ฒŒ UDF๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

MLflow generates code for creating and registering the Apache Spark UDF for model  inference

MLflow๋Š” ๋ชจ๋ธ ์ถ”๋ก ์„ ์œ„ํ•ด Apache Spark UDF๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

๋”๋ถˆ์–ด, MLflow REST API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋กœ ๊ธฐ์กด ์šด์˜ ์ค‘์ธ ๋ชจ๋ธ์„ ์•„์นด์ด๋ธŒํ•˜๊ณ  ์ƒˆ๋กœ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์šด์˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



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

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

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

๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ”๋กœ ์‹ค์‹œ๊ฐ„์— ๊ฐ€๊นŒ์šด ์ด์ƒ ํƒ์ง€ ๋‹ฌ์„ฑ

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

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

์—ฌ๊ธฐ์„œ ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ”(DLT)์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.

DLT ์šฉ์–ด๋กœ ๋…ธํŠธ๋ถ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ DLT ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ฝ”๋“œ ์ผ๋ถ€ ๋˜๋Š” ์ „์ฒด๊ฐ€ ํฌํ•จ๋œ ๋…ธํŠธ๋ถ์ž…๋‹ˆ๋‹ค. DLT ํŒŒ์ดํ”„๋ผ์ธ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋…ธํŠธ๋ถ์ด ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ๋…ธํŠธ๋ถ์€ SQL ๋˜๋Š” Python ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋…ธํŠธ๋ถ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„๋œ ๋กœ์ง์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, MLflow ๋ชจ๋ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋ชจ๋ธ์„ ๊ฐ€์ ธ์˜ค๊ณ , ์ˆ˜์ง‘๋œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค์šด์ŠคํŠธ๋ฆผ์—์„œ ๊ธฐ๋Šฅํ™”๋˜๋ฉด ๋ชจ๋ธ ์ถ”๋ก  ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก UDF๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์œ ์šฉํ•œ ํŒ: DLT Python ๋…ธํŠธ๋ถ์—์„œ๋Š” ์ƒˆ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ์ฒซ ๋ฒˆ์งธ ์…€์— %pip magic ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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



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



๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ”์€ ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜(UDF)๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. UDF๋Š” SQL์„ ์‚ฌ์šฉํ•˜์—ฌ ์ŠคํŠธ๋ฆฌ๋ฐ DLT ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋ชจ๋ธ ์ถ”๋ก ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” ํ›ˆ๋ จ๋œ ๊ฒฉ๋ฆฌ ํฌ๋ ˆ์ŠคํŠธ ๋ชจ๋ธ์„ ์บก์Аํ™”ํ•˜๋Š” ์ด์ „์— ๋“ฑ๋ก๋œ Apache Sparkโ„ข ๋ฒกํ„ฐํ™”๋œ UDF๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.



๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธํ‹ฐ์ŠคํŠธ๊ฐ€ Python์œผ๋กœ ํ›ˆ๋ จํ•œ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ(์˜ˆ: scikit-learn, xgboost ๋˜๋Š” ๋‹ค๋ฅธ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด SQL ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, SQL ๋ถ„์„๊ฐ€ ๋ฐ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ๋Š” ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

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

End to End Delta Live Tables pipeline as seen in the DLT User Interface

DLT ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋ณธ ์—”๋“œ ํˆฌ ์—”๋“œ ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ” ํŒŒ์ดํ”„๋ผ์ธ

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

Databricks SQL Dashboard built to interactively display predicted anomalous records

์˜ˆ์ธก๋œ ๋น„์ •์ƒ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋Œ€ํ™”ํ˜•์œผ๋กœ ํ‘œ์‹œํ•˜๋„๋ก ๊ตฌ์ถ•๋œ Databricks SQL ๋Œ€์‹œ๋ณด๋“œ

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

์ด ๋ธ”๋กœ๊ทธ์—์„œ๋Š” ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ”์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ๋งŒ์„ ์†Œ๊ฐœํ•˜์˜€์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์„ค๋ช…์„œ๋Š” https://docs.databricks.com/data-engineering/delta-live-tables/index.html ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฌธ์„œ์—์„œ ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ๊ธฐ๋Šฅ์„ ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ฒ” ์‚ฌ๋ก€

A Delta Live Tables pipeline can be created using the Databricks Workflows user interface

๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค ์›Œํฌํ”Œ๋กœ์šฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ” ํŒŒ์ดํ”„๋ผ์ธ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

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

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

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

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

๋งˆ์ง€๋ง‰์œผ๋กœ, ์ด ๋ธ”๋กœ๊ทธ์—์„œ ์–ธ๊ธ‰ํ•œ ๋ชจ๋“  ์ž‘์—…์€ ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ” REST API๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฉ๋ฆฌ ํฌ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žฌํ›ˆ๋ จ๋  ๋•Œ๋งˆ๋‹ค ๋‹ค์šดํƒ€์ž„ ์—†์ด ์—ฐ์† ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” DLT ํŒŒ์ดํ”„๋ผ์ธ์„ ์ฆ‰์‹œ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๋•์…˜ ์‹œ๋‚˜๋ฆฌ์˜ค์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ย 

Configurations for the Delta Live Tables pipelines in this example. Enter a target database name to store the Delta tables created

์ด ์˜ˆ์ œ์—์„œ ๋ธํƒ€ ๋ผ์ด๋ธŒ ํ…Œ์ด๋ธ” ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ. ์ƒ์„ฑ๋œ ๋ธํƒ€ ํ…Œ์ด๋ธ”์„ ์ €์žฅํ•  ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค

๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค๋กœ ์ง์ ‘ ๊ตฌ์ถ•ํ•˜๊ธฐ

์ด ์†”๋ฃจ์…˜์„ ๋‹ค์‹œ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋…ธํŠธ๋ถ๊ณผ ๋‹จ๊ณ„๋ณ„ ์ง€์นจ์€ ๋ชจ๋‘ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

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

์ถ”๊ฐ€๋กœ, DLT ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ๋ฐ๋ชจ์™€ ์›Œํฌ์Šค๋ฃจ๋Š” ์˜์ƒ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Never miss a Databricks post

Subscribe to our blog and get the latest posts delivered to your inbox