๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Apache Spark

[Infra] ๋ฐ์ดํ„ฐ ์ธํ”„๋ผ ๊ตฌ์กฐ์™€ Sources

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ YouTube GeekNews ์ฑ„๋„์˜ ๋ฐ์ดํ„ฐ ์ธํ”„๋ผ ๊ฐ•์˜ ๋‚ด์šฉ์— ๊ธฐ๋ฐ˜ํ•ด ์ œ๊ฐ€ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ์ž‘์„ฑํ•จ์„ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.

1. ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ•„์š”์„ฑ

๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์€ ์™œ ํ•„์š”ํ• ๊นŒ? ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์ด์œ ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋ฆฌ๋”๋“ค์˜ ์˜์‚ฌ๊ฒฐ์ • ๋•๊ธฐ ์œ„ํ•จ
  • ์„œ๋น„์Šค ๋˜๋Š” ์ œํ’ˆ์„ ๋ฐ์ดํ„ฐ์˜ ๋„์›€์„ ๋ฐ›์•„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•จ

 

ETL, ELT๋Š” ๋ญ˜๊นŒ?

 

ETL์„ ์™œํ• ๊นŒ?

 

๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•  ๋•Œ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ETL์„ ๊ตฌ์„ฑํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ETL์€ ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๋งํ•œ๋‹ค. ๊ทธ๋Ÿผ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์™œ ํ•˜๋Š”๊ฑธ๊นŒ?

 

๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ณณ๋“ค์€ ์ •๋ง ๋‹ค์–‘ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ณณ ๋งˆ๋‹ค ๊ฐ ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋„ ๋งค์šฐ ๋ณต์žกํ•ด์ง„๋‹ค(Normalized Schema). ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” Production Systems์—์„œ ETL ์ด๋ผ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด์„œ ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” Data Warehouse์— ์ €์žฅํ•œ๋‹ค. ์ €์žฅํ•  ๋•Œ๋Š” ํ•˜๋‚˜์˜ ํ†ตํ•ฉ๋œ ๊ณณ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋†“์„ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•œ๋‹ค.

 

ETL์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ - ๋ณ€ํ™˜ - ์ ์žฌ ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ง„ํ–‰๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ์—๋Š” ELT(์ถ”์ถœ - ์ ์žฌ - ๋ณ€ํ™˜) ๊ตฌ์กฐ๋กœ ๋งŽ์ด ์ง„ํ–‰๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด [์ถ”์ถœ - ๋ณ€ํ™˜]์„ ์ž๋™ํ™”์‹œํ‚ค๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์™œ ์–ด๋ ค์šธ๊นŒ? ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ณณ์€ ๋‹ค์–‘ํ•˜๋ฉฐ ๊ทธ ๋งŒํผ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ํฌ๋งท ํ˜•ํƒœ๊ฐ€ ์„œ๋กœ ๊ฐ๊ธฐ ๋‹ค๋ฅผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ํŠน์ •ํ•œ ์ฝ”๋“œ๋กœ ์ด๋ฅผ ํš์ผํ™”์‹œ์ผœ์ฃผ๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต๋‹ค. 

 

๋”ฐ๋ผ์„œ ์š”์ฆ˜์—๋Š” '์ ์žฌ'๋ฅผ '๋ณ€ํ™˜'๋ณด๋‹ค ์•ž์„  ๋‹จ๊ณ„๋กœ ์ฃผ์–ด [์ถ”์ถœ - ์ ์žฌ]๋ฅผ ์ฝ”๋“œ๋กœ ์ž๋™ํ™” ์‹œํ‚ค๊ณ  ๋ฐ์ดํ„ฐ ํฌ๋งท์— ๋”ฐ๋ผ ๋ณ€ํ™˜์„ ํ•˜๋Š” ์ถ”์„ธ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ด๋‹ค. 

 

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

 

๋ฐ์ดํ„ฐ ์ธํ”„๋ผ์˜ ํฐ ๊ตฌ์กฐ

2. ์ตœ์ดˆ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ณณ๋“ค, Sources

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

2-1. OLTP

OLTP(Online Transaction Processing)๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ , ์กฐํšŒ ๋“ฑ์˜ ๋‹จ์œ„์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹ ์šฉ์นด๋“œ๋ฅผ ์กฐํšŒํ•œ๋‹ค๊ฑฐ๋‚˜ ์ž๋™ ํ˜„๊ธˆ ์ง€๊ธ‰, ๊ณ„์ขŒ์ด์ฒด ๋“ฑ์ด ์žˆ๊ฒ ๋‹ค. ๊ณ„์ขŒ์ด์ฒด๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณธ๋‹ค๋ฉด, A์˜ ๊ณ„์ขŒ์—์„œ 1000์›์„ ๋นผ๋‚ด์–ด B์˜ ๊ณ„์ขŒ๋กœ 1000์›์„ ์†ก๊ธˆํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋ฐœ์ƒํ•œ ๊ฒƒ์„ ํ•˜๋‚˜์˜ ํŠธ๋žœ์ ์…˜์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ด๋Š” DB์ด๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ OLTP๋Š” CDC(Change Data Capture)๋ผ๋Š” ๊ฒƒ์„ ํ™œ์šฉํ•œ๋‹ค. CDC๋ž€, OLTP์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค ์ค‘ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋“ค๋งŒ ๋”ฐ๋กœ ์™ธ๋ถ€ DB์— ์ „์†ก์„ ํ•˜๊ณ  ์ด OLTP์˜ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋“ค๋งŒ์„ ๋ถ„์„์šฉ DB๋กœ ๋„˜๊ฒจ ๋ถ„์„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ฐธ๊ณ ๋กœ OLTP์™€ ๋น„๊ต๋Œ€์ƒ์œผ๋กœ OLAP(Online Analytical Processing)์ด ์กด์žฌํ•œ๋‹ค. OLAP๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋ž‘ ์œ ์‚ฌํ•˜๋‹ค. OLTP, OLAP ์ฐจ์ด์ ์„ ๋น„๊ตํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

OLTP OLAP
๋งŽ์€ ํŠธ๋žœ์ ์…˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ
๋น ๋ฅธ ์ฒ˜๋ฆฌ ๋Š๋ฆฐ ์ฟผ๋ฆฌ
Normalized ๋ฐ์ดํ„ฐ Denormalized ๋ฐ์ดํ„ฐ
๋งŽ์€ ๋ฐ์ด๋ธ”์„ ๊ฐ€์ง ์ ์€ ํ…Œ์ด๋ธ”์„ ๊ฐ€์ง
ex) "๋ˆ„๊ฐ€ X ์ƒํ’ˆ์„ ๊ตฌ์ž…ํ–ˆ๋‚˜?" ex) "๋ˆ„๊ฐ€ X๋ผ๋Š” ์ƒํ’ˆ์„ ์–ผ๋งˆ๋‚˜ ๊ตฌ์ž…ํ–ˆ๋‚˜?" - ๋ถ„์„์šฉ

 

2-2. Application / ERP

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

2-3. Event Collectors

์„œ๋น„์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋‹จ์ ์ธ ์˜ˆ๋กœ GA(Google Analytics)๊ฐ€ ์žˆ๊ฒ ๋‹ค. Event Collectors ๋ฅผ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ํ”Œ๋žซํผ๋“ค์ด ์žˆ๋Š”๋ฐ, Segment, SNOWPLOW, RUDDERSTACK ๋“ฑ์ด ์žˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๋ชจ๋ฐ”์ผ, ์›น ๋“ฑ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ํ†ตํ•ฉํ•ด์„œ GA๋‚˜ AWS์˜ RedShift์™€ ๊ฐ™์€ ๋ถ„์„์šฉ ํ”Œ๋žซํผ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ด์ค€๋‹ค. ๊ฒฐ๊ตญ ์—”์ง€๋‹ˆ์–ด๋“ค์ด "A๋ผ๋Š” ๊ณณ์—์„œ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ๋“ค์„ GA๋กœ ๋ณด๋‚ด์ฃผ์„ธ์š”. B๋ผ๋Š” ๊ณณ์—์„œ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ๋“ค์„ RedShift๋กœ ๋ณด๋‚ด์ฃผ์„ธ์š”." ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ๋งค๋ฒˆ ์ฝ”๋“œ๋กœ ์น˜์ง€ ์•Š์•„๋„ ๋˜๊ฒŒ๋” Segment์™€ ๊ฐ™์€ ํ”Œ๋žซํผ์ด ํ•˜๋‚˜์˜ ์†”๋ฃจ์…˜์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

2-4. Logs

์‚ฌ์šฉ์ž ๋กœ๊ทธ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์ฃผ๋กœ ์‚ฌ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์„œ๋ฒ„ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์˜๋งˆํ•œ๋‹ค.

2-5. ์จ๋“œ ํŒŒํ‹ฐ API

์ด๊ฒƒ์€ ์˜ˆ์‹œ๋ฅผ ํ•˜๋‚˜ ๋“ค๋ฉด ๋ฐ”๋กœ ์ดํ•ด๊ฐ€ ๋˜๋Š”๋ฐ, Stripe์™€ ๊ฐ™์€ ๋ฏธ๊ตญ์˜ ์˜จ๋ผ์ธ ๊ฒฐ์ œ ์„œ๋น„์Šค API๋ฅผ ์ œ๊ณตํ•˜๋Š” ํšŒ์‚ฌ๊ฐ€ ์žˆ๋‹ค. ์–ด๋–ค C๋ผ๋Š” ํšŒ์‚ฌ๊ฐ€ Stripe ๊ธฐ์—…์˜ ์˜จ๋ผ์ธ ๊ฒฐ์ œ ์„œ๋น„์Šค API๋ฅผ ์ด์šฉํ–ˆ๊ณ  C๋ผ๋Š” ํšŒ์‚ฌ์˜ ์„œ๋น„์Šค ์ด์šฉ์ž๋“ค์˜ ๋ฐ์ดํ„ฐ๋“ค์€ Stripe API๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

2-6. ํŒŒ์ผ, Object Storage

๋‹จ์ ์ธ ์˜ˆ๋กœ, ์ด๋ฉ”์ผ๋กœ ์ฃผ๊ณ  ๋ฐ›์€ ํŒŒ์ผ๋“ค์ด๋‚˜ ๊ธฐํƒ€ Object Storage๋“ค๋„ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•