๋ฐ์—”์œผ๋กœ ์„ฑ์žฅ์ค‘ ๐ŸŒฑ

์Šคํ„ฐ๋””/[๋ฐ์—” ๋น…์ง€๊ธฐ ์Šคํ„ฐ๋””]

๋น…์ง€๊ธฐ ์Šคํ„ฐ๋”” 5์ฃผ์ฐจ ์ •๋ฆฌ

์จ๋ฐ 2022. 10. 13. 09:05

์งˆ๋ฌธ1)

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

 

๋‹ต๋ณ€)

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

 

์š”์ฆ˜์€ ์ŠคํŒŒํฌ ์ŠคํŠธ๋ฆฌ๋ฐ ๋Œ€์‹ , ํ”Œ๋งํฌ๋„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์ข€ ๋” ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ์— ๋” ์ ํ•ฉํ•œ ๋А๋‚Œ์ด๋ผ๋Š” ์‹์œผ๋กœ ๋ง์”€์„ ๋งŽ์ด ๋“ค์€ ๊ฒƒ ๊ฐ™๋‹ค.

 

Kafka : ๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค์„ ๋ง‰์„ ๋ฒ„ํผ๊ฐ€ ํ•„์š”ํ• ๋–„ ์œ ์šฉ Spark streaming : ๋ฐ์ดํ„ฐ ์œ ์‹ค๋ณด๋‹ค๋Š” ๊ณ ์†์œผ๋กœ ์ŠคํŒŒํฌ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„๋–„ ์“ฐ๋Š” ๊ฒƒ ๊ฐ™์•„์š” ์กฐ๊ฑด์€ ์ € ๋‘๊ฐ€์ง€๋กœ ?


์งˆ๋ฌธ2 - ๋‚ด ์งˆ๋ฌธ)

1. ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ํ˜น์€ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ์‹œ, ๊ธฐ์กด์— ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” task์™€ ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด ๋‹ค์‹œ ์ง„ํ–‰ํ•˜๋Š”(์˜ค๋ฅ˜ ๋‚ฌ๋˜) task๋ฅผ ๋™์‹œ์—(๊ฐ™์€ ์‹œ๊ฐ„์—) ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

2. ๋ชจ๋“  task๋Š” ์ผ๋‹จ ํ์— ์ €์žฅ๋˜์–ด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ(p.196), ์˜ค๋ฅ˜๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ task๋„ ์ •์ƒ task๋“ค๊ณผ ๊ฐ™์ด ์žˆ๋Š” ํ์— ํฌํ•จ๋˜์–ด ๊ฐ™์ด ์‹คํ–‰๋˜๋‚˜์š”?

3. task๋Š” ์ง€์ •๋œ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ(197p), ์˜ค๋ฅ˜๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ task๋„ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์ •์ƒ task๋“ค๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌ๋˜์–ด ์‹คํ–‰๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

→ ํ•œ ์งˆ๋ฌธ์œผ๋กœ ์ •๋ฆฌํ•ด ๋ณธ๋‹ค๋ฉด, ์˜ค๋ฅ˜๋กœ ์ €์žฅ๋œ task๋Š” ์ •์ƒ task๋“ค๊ณผ ๋”ฐ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ํ•จ๊ป˜ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์œผ๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ข€ ๋” ์ƒ๊ฐํ•ด ๋ดค๋Š”๋ฐ, ์˜ค๋ฅ˜๋กœ ์ €์žฅ๋œ task๋Š” ์žฌ์‹คํ–‰ task๊ธฐ ๋•Œ๋ฌธ์— ์ •์ƒ task๋“ค๊ณผ ๊ฐ™์ด ๋˜‘๊ฐ™์ด ์ฒ˜๋ฆฌํ•  ๊ฒƒ ๊ฐ™์€ ๋ฐ ์ œ๊ฐ€ ์ƒ๊ฐํ•œ ๊ฒŒ ๋งž์„๊นŒ์š”...?

 

๋‹ต๋ณ€)

ํŒŒํ‹ฐ์…˜์„ ๋‚˜๋ˆ ์„œ, A๋๋‚˜๊ณ  B์ง„ํ–‰ํ•˜๊ณ  ํฐ ํ๋กœ ๋ดค์„๋• ์˜ค๋ฅ˜๋ž‘ ์ •์ƒ ํƒœ์Šคํฌ ๊ฐ™์ด์žˆ๋‹ค. ์˜ค๋ฅ˜๋ž‘ ์ •์ƒ ํƒœ์Šคํฌ ๊ฐ™์ด ํ•˜๋‚˜์˜ ํ์— ๋“ค์–ด๊ฐ€์žˆ๋‹ค. +) ํ ์•ˆ์—์„œ ํƒœ์Šคํฌ๋ณ„๋กœ a,b์‹œ์Šคํ…œ์ด๊ตฌ๋ถ„์ด ๋˜์–ด์ง€๊ณ , ๊ฒฝ์Ÿํ•  ์ผ์ด ์—†๋‹ค.

 

1, 2, 3 ์ผ€์ด์Šค๋Š” ์ •์ฑ…(ํšŒ์‚ฌ ๋ฐ ํ˜„์žฅ)์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™์•„์š”

(์ฒซ๋ฒˆ์จฐ ํ) → ์ •์ƒ์ฒ˜๋ฆฌ ์˜ค์ผ€์ด → ๋น„์ •์ƒ (๋‘๋ฒˆ์งธ ํ)์— ๋„ฃ๊ธฐ ์ •๋„๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ๋„ ํ•˜๋„ค์š” ์žฌ ์‹คํ–‰ํ• ๋•Œ๋Š” ์ •์ƒ ์ฒ˜๋ฆฌ์ฒ˜๋Ÿผ ์ง„ํ–‰ํ•ด์•ผ ํ• ๋“ฏํ•ด์š” ordered ์ผ์ด ์•„๋‹ˆ๋ฉด


์งˆ๋ฌธ3)

1. airflow๋ฅผ ํšŒ์‚ฌ์—์„œ ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‚˜์š”? ๋ฐฑ์—”๋“œ์—์„œ๋„ ๋ฐฐ์น˜์žก์„ ๊ด€๋ฆฌํ•˜๋Š” ์šฉ๋„๋กœ ์“ฐ๊ณ  ์žˆ๋Š”๊ณณ๋„ ์žˆ๋‹คํ•ด์„œ, ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆ

airflow ํƒœ์Šคํฌ ๊ตฌํ˜„์— ๋Š˜ ๊ถ๊ธˆํ–ˆ๋Š”๋ฐ์š” ๋ฌผ๋ก  ๊ฐœ๋ฐœ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธด ํ•˜๊ฒ ์ง€๋งŒ ์–ด๋–ค์‹์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ์š”~

2. airflow์—์„œ ๋ฉฑ๋“ฑ์„ฑ์„ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜ ์ฟผ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•จ ์ฃผ๋Š” ๋ณดํ†ต .sql ํŒŒ์ผ์—์„œ delete-insert๋‚˜ upsert๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ํŒŒ์ด์ฌํŒŒ์ผ์— ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•ด์„œ begin end๋ฅผ ์จ์„œ ๋” ๋งŽ์ด ์“ฐ๋Š”์ง€ ๊ถ๊ธˆ

3. csvํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ๋„ ์ฃผ๋กœrequ est ํŒจํ‚ค์ง€๋ฅผ ์จ์„œ url๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š”์ง€ csv ํŒจํ‚ค์ง€๋ฅผ ์จ์„œ ํŒŒ์ผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š”์ง€ ๊ถ๊ธˆ

 

๋‹ต๋ณ€)

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

 

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

 

2. ํ•˜์ด๋ธŒ ํ…Œ์ด๋ธ” ํŒŒํ‹ฐ์…”๋‹์„ ํ†ตํ•ด ๋‚ ์งœ๋ณ„๋กœ ๋”ฐ๋กœ ๋ณด๊ด€ํ•˜๋Š”๋ฐ, ํŒŒํ‹ฐ์…˜ ์˜ค๋ฒ„๋ผ์ดํŠธ๋ผ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ž์ฒด๋ฅผ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๋Š” ๋ฐฉ์‹์„ ์„ ํ˜ธํ•œ๋‹ค.

 

3.csvํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์ฃผ๋กœ ์–ด๋–ค ์Šคํ‚ฌ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€?

→ ์†Œ์Šค๊ฐ€ ์–ด๋””์— ์žˆ๋А๋ƒ์— ๋”ฐ๋ผ ์ข€ ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ๋ฉด ๋ฆฌํ€˜์ŠคํŠธ ์“ฐ๊ฑฐ๋‚˜ ํŒŒ์ผ ๊ทธ๋Œ€๋กœ๋ฉด ๊ทธ๋ƒฅ csv๋กœ ์ฝ์–ด์˜ค๊ณ  ์ „์ฒ˜๋ฆฌ ํ•ด์„œ ๊ฐ€๊ณตํ•ด์„œ ์“ฐ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

→ ๋กœ์ปฌ ์ƒ์—์„œ๋Š” to_csv, ์™ธ๋ถ€ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ๋Š” url์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

1. airflow ๊ตฌํ˜„์€ ์ •๋ง ํ˜„์žฅ์— ๋”ฐ๋ผ ๋‹ค ๋‹ฌ๋ผ์„œ ๋ญ๋ผ๊ณ  ๋ง์”€๋“œ๋ฆฌ๊ธฐ๋Š” ์–ด๋ ต๋„ค์š”. ๋ณดํ†ต์€ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜์ง‘ ์ดํ›„ ์‹œํ€€์Šค ์ฒ˜๋ฆฌ(๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ€ํ‹ฐ๋…ธ๋“œ์—์„œ ์‹œํ€€์Šค ์ฒ˜๋ฆฌ)์— ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค DAG๋ฅผ ์ž˜๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ํ‚ค์ธ ํ”Œ๋žซํผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

2. ์ €๋Š” ์‚ฌ์‹ค python์„ ์„ ํ˜ธํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” ํ›„์ž๋ฅผ ์“ฐ๋Š”๋ฐ, sql ์„ ํ˜ธํ•˜์‹œ๋Š” ๋ถ„๋“ค๋„ ๋งŽ์Šต๋‹ˆ๋‹ค

3. csv๋ฅผ request๋กœ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜์‹ ๋‹ค๋Š”๊ฑด์ง€๋Š” ๋ชจ๋ฅด๊ฒ ๋„ค์š”;; request๋Š” ๋ณดํ†ต RestAPI server์— http/https request๋ฅผ ์ด์šฉํ•ด์„œ response๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค