์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
NEW

Kafka & Spark ํ™œ์šฉํ•œ Realtime Datalake

Kafka & Spark ํ™œ์šฉํ•œ ์‹ค์‹œ๊ฐ„ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•ด๋ณด๊ณ  AWS Cloud Datalake๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ฐ•์˜์ž…๋‹ˆ๋‹ค

14๋ช… ์ด ์ˆ˜๊ฐ•ํ•˜๊ณ  ์žˆ์–ด์š”.

Thumbnail

์ดˆ๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[Kafka, Apache Spark] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • Github๊ณผ Actions, AWS Code Deploy๋กœ CI/CD ๊ตฌํ˜„

  • Kafka Broker, Confluent Producer & Consumer

  • Prometheus & Grafana๋ฅผ ์ด์šฉํ•œ Kafka Dashboard ๋ชจ๋‹ˆํ„ฐ๋ง

  • Catalog ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ Spark & Hive Metastore

  • Spark Streaming์„ ์ด์šฉํ•œ ์‹ค์ „ ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„

  • Kafka & Spark, Zookeeper & Yarn์˜ ๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ, ์™œ ๋ฐฐ์›Œ์•ผ ํ• ๊นŒ?


์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ์„ ํ†ตํ•ด ์‹ ์†ํ•œ ๋ถ„์„๊ณผ ์˜์‚ฌ๊ฒฐ์ •์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

  • ์‹ค์‹œ๊ฐ„ ๊ฐœ์ธํ™” ๋งˆ์ผ€ํŒ… & ์ถ”์ฒœ

  • ์‹ค์‹œ๊ฐ„ ํŠธ๋ Œ๋“œ ๋ถ„์„

  • ์‹ค์‹œ๊ฐ„ ๋ณด์•ˆ ์œ„ํ˜‘ ๊ฐ์ง€ ๋ฐ ๋Œ€์‘



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


๊ทธ๋ž˜์„œ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” Streaming ์ฒ˜๋ฆฌ ์กฐํ•ฉ ์ค‘ ํ•˜๋‚˜์ธ Kafka + Spark ๊ธฐ๋ฐ˜์˜ ์‹ค์‹œ๊ฐ„ ํŒŒ์ดํ”„๋ผ์ธ

Kafka & Spark ์€ ๊ธฐ๋ณธ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผํžˆ, ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„์„ ๋„˜์–ด ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ์˜ ์„ค๊ณ„ ๋ฐฉ๋ฒ•๊นŒ์ง€ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜์˜ ํŠน์ง•

๐Ÿ“Œ ๋กœ์ปฌ ๋จธ์‹  ์œ„ ๋‹จ์ผ ๊ตฌ์„ฑ์€ No! ๋Œ€์„ธ๋Š” ํด๋ผ์šฐ๋“œ์ž…๋‹ˆ๋‹ค. AWS Cloud๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ CI/CD๋Š” ๊ธฐ๋ณธ์ด์ฃ ? github Actions์™€ AWS Code Deploy๋ฅผ ํ†ตํ•ด CI/CD๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ๊ธฐ๋ณธ๋ถ€ํ„ฐ ์ฒœ์ฒœํžˆ, ํ•˜์ง€๋งŒ ์‹ค์Šต๊ณผ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด ๊ฐ•์˜ ๋‚ด์šฉ์ด ๋‚ด์žฌํ™”๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ๋ถ€ํ„ฐ ์‹ค์‹œ๊ฐ„ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ ๋ฐ ๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ๊นŒ์ง€ All in One ๊ตฌ์„ฑ

๐Ÿ‘ ์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜ ์ถ”์ฒœํ•ด์š”

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ์–ด์š”.
๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๊ด€์‹ฌ์€ ์žˆ์ง€๋งŒ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๋Š” ๊ฒฝํ—˜ํ•ด๋ณด์ง€ ๋ชปํ•œ ๋ถ„

DataLake ๋ฅผ ์•Œ๊ณ ์‹ถ์–ด์š”.
Cloud ์œ„์— ๊ตฌ์ถ•๋˜๋Š” DataLake๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”์ง€ ๋ฐฐ์šฐ๊ณ  ์‹ถ์œผ์‹  ๋ถ„

์•„ํ‚คํ…ํŠธ๋กœ ์„ฑ์žฅํ•˜๊ณ  ์‹ถ์–ด์š”.
์ธํ”„๋ผ ์„ค๊ณ„๋ถ€ํ„ฐ ์ฝ”๋“œ๋ ˆ๋ฒจ๊นŒ์ง€ ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉด์„œ ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌํ˜„์ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„

์ˆ˜๊ฐ• ํ›„์—๋Š”

  • Kafka Broker ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์›๋ฆฌ ์ดํ•ด, ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ์„ ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Broker ์„œ๋น„์Šค๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • Kafka Producer/Consumer ์˜ ๊ธฐ๋ณธ ์›๋ฆฌ์™€ ๊ณ ๊ธ‰ ์˜ต์…˜๊นŒ์ง€ ์ดํ•ดํ•˜๊ณ  ๋Œ€์šฉ๋Ÿ‰ ํ™˜๊ฒฝ์—์„œ ์„ฑ๋Šฅ๊ณผ ์ •ํ•ฉ์„ฑ๊ฐ„ Trade-off ์ดํ•ด๋ฅผ ํ†ตํ•ด ๊ฒฌ๊ณ ํ•œ Application์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • Spark ์ด ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฒ•์„ ๊ธฐ๋ฐ˜์œผ๋กœ Application์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • AWS S3, Glue, Athena ๋“ฑ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์™€ Spark ์„œ๋น„์Šค์™€์˜ ์—ฐ๊ณ„๋ฅผ ํ†ตํ•ด ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค์–‘์„ฑ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ์–ด๋–ค ๋‚ด์šฉ์„ ๋‹ค๋ฃจ๋‚˜์š”?


  1. ์ด์ œ ๋Œ€์„ธ๋Š” ํด๋ผ์šฐ๋“œ์ž…๋‹ˆ๋‹ค. EC2 ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•ด ์‹ค์ „๊ณผ ๊ฐ™์ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•ด๋ด…๋‹ˆ๋‹ค.

  2. Kafka & Spark์€ ๊ธฐ๋ณธ๋ถ€ํ„ฐ ์ฒœ์ฒœํžˆ ๋ฐฐ์›๋‹ˆ๋‹ค.

  3. AWS์˜ S3, Glue, Athena ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด Datalake on AWS์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ๋ฐฐ์›๋‹ˆ๋‹ค.



ํŒŒ์ดํ”„๋ผ์ธ์€ ์ˆ˜์ง‘๋ถ€ํ„ฐ ํ™œ์šฉ๊นŒ์ง€ ๊ตฌ๋ถ„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ๊ฐ์˜ ๋‹จ๊ณ„๋งˆ๋‹ค ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ์—ฐ๊ณ„ ๋˜๋Š”์ง€๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Kafka ์™€ Spark์„ ๋‹จ์ˆœํžˆ ๋ฐฐ์šฐ๋Š”๋ฐ ๊ทธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ ์‹ค์ œ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด๋ณด๊ณ 

๊ทธ ๊ณผ์ •์—์„œ CI/CD, ๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ, ๋ฌธ์ œ ํ•ด๊ฒฐ๊ณผ ์„ฑ๋Šฅํ–ฅ์ƒ ๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

์ปค๋ฆฌํ˜๋Ÿผ

  1. ๋ฐ์ดํ„ฐ๋ ˆ์ดํฌ ๊ฐœ๋…


  • Lambda

  • Kappa Architecture

  • ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„

  1. Kafka ๊ธฐ๋ณธ


  • Broker

  • Kafka Producer

  • Kafka Consumer

  1. ๋ชจ๋‹ˆํ„ฐ๋ง

  • UI For Apache Kafka

  • Prometheus

  • Grafana

  1. Apache Spark ๊ธฐ๋ณธ

  • Spark Cluster

  • Spark SQL

  • Spark Streaming

  1. ์„ฑ๋Šฅํ–ฅ์ƒ Tip

  • ์„ฑ๋Šฅํ–ฅ์ƒ Checklist

  • Trouble Shooting

  • Spark Monitoring

  1. ๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ

  • Zookeeper Cluster

  • Kafka Broker

  • Spark Cluster


์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„

์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ์„ ํƒ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ๋“ค์˜ ์กฐํ•ฉ.

๊ทธ๋ฆฌ๊ณ  ์‹ค์Šต์„ ์œ„ํ•ด ์„ ํƒํ•˜๋Š” Kafka & Spark์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ณ  ๊ตฌํ˜„ํ•ด๋ด…๋‹ˆ๋‹ค.

CI/CD: Github Actions + Code Deploy

CI/CD ๋Š” ๊ธฐ๋ณธ์ค‘์˜ ๊ธฐ๋ณธ.

๋กœ์ปฌ git โ†’ Github Repository ์—ฐ๋™ ํ›„ ์ž๋™ ๋ฐฐํฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก Actions + Code Deploy ์กฐํ•ฉ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

Kafka Web UI

UI For Apache Kafka ๋ฅผ ํ†ตํ•ด Kafka๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

Prometheus + Grafana

๋ชจ๋‹ˆํ„ฐ๋ง ํŒŒ์ดํ”„๋ผ์ธ ๋Œ€์„ธ.

Prometheus + Grafana ์กฐํ•ฉ์„ ํ†ตํ•ด Kafka ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋” ๋‚˜์•„๊ฐ€ Spark Streaming ์˜ LAG ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐฉ์•ˆ์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

Kafka Source + Spark Streaming

Kafka + Spark Streaming ์กฐํ•ฉ์„ ํ†ตํ•ด ์‹ค์ œ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Dashboard๋ฅผ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

AWS Athena

AWS Athena ์„œ๋น„์Šค๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ์ฟผ๋ฆฌ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•ด Spark Streaming์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ‘ ํ™•์ธํ•ด๋ด…๋‹ˆ๋‹ค.

Python Dashboard

๊ตฌํ˜„ํ•œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ด์šฉํ•ด Dashboard๋กœ ์‹œ๊ฐํ™”ํ•˜๊ณ  ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ๋ฆ„์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ

์ตœ๋Œ€ํ•œ ์‹ค์ œ์™€ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜ ๊ตฌํ˜„์„ ํ†ตํ•ด ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Kafka, Spark, Yarn Cluster ์˜ ๊ฐ€์šฉ์„ฑ์„ ์ดํ•ดํ•˜๊ณ  ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Ansible์„ ์ด์šฉํ•œ Infra ์…‹์—… ์ž๋™ํ™”

์ด ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค ๋งŒ๋“ค๊ธฐ์— ํ•ด์•ผํ•  ๊ฒƒ์ด ๋งŽ์ง€ ์•Š๋ƒ๊ตฌ์š”?

๋งž์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๋งŽ์Šต๋‹ˆ๋‹ค.

์„ค์น˜ํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋งŽ๊ณ  ์ด๊ฒƒ์ €๊ฒƒ ์„ค์ •ํ•ด์ค˜์•ผ ํ• ๊ฒŒ ์•„์ฃผ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ญ ํ•˜๋‚˜ ์ž˜ ์•ˆ๋งž์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ฃ  ๐Ÿคฌ

ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์‹ค์‹œ๊ฐ„ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„์ด๋ผ๋Š” ์ค‘์š”ํ•œ ๋‚ด์šฉ์—๋งŒ ์ฃผ๋ชฉํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Infra ๊ตฌ์„ฑ๊ณผ ๊ฐ์ข… ์…‹์—…์€ ๋ฏธ๋ฆฌ ์ค€๋น„๋œ Ansible Script๋ฅผ ํ†ตํ•ด ์ž๋™ํ™”๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

Ansible Script๋Š” ์•„๋ž˜ github ์ฃผ์†Œ์—์„œ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/hjkim-sun/datalake-ansible-playbook-season1


์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์œ„ github repository ๋‚ด์šฉ์„ cloneํ•˜์—ฌ ์…‹์—… ๊ณผ์ •์„ ์‰ฝ๊ฒŒ ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿšจ์‹ค์Šต ์ „ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”!

โœ” Kafka Client(Producer/Consumer)๋Š” Python ์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.


Python Kafka Library ๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๊ฐ€ ์žˆ์œผ๋‚˜ ๊ทธ ์ค‘ ๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ์ข‹์€ Confluent Kafka Library๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Confluent Kafka ๋Š” Java ๋ชป์ง€์•Š๊ฒŒ ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๋Š” ๋„๊ตฌ๋กœ์จ Python ์„ ํ†ตํ•ด Producer/Consumer๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค.


โœ” Spark ์–ธ์–ด ๋˜ํ•œ Python์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.


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

๐ŸšจAWS ์˜ˆ์ƒ ์‹ค์Šต ๋น„์šฉ

์‹ค์Šต์€ AWS Cloud ์—์„œ ์ง„ํ–‰๋˜๋ฉฐ ์‹ค์Šต ๋น„์šฉ์ด ๋ณ„๋„๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.


โœ” ํ•œ ๋‹ฌ ๋™์•ˆ ์•ฝ 40์‹œ๊ฐ„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์•ฝ 4๋งŒ์› ์ •๋„ AWS ๋น„์šฉ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. (ํ™˜์œจ 1,430 ๊ธฐ์ค€)

์‹ค์Šต ๋น„์šฉ์€ ๋Œ€๋ถ€๋ถ„ EC2(์ปดํ“จํŒ… ์„œ๋น„์Šค)์—์„œ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์‹ค์Šต&๊ณผ์ œ ํ›„ ๊ผญ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ค‘์ง€ํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์™ธ ๋น„์šฉ(์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ณผ๋ฅจ(EBS)๊ณผ EIP)์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ธ์Šคํ„ฐ์Šค๋ฅผ ์ค‘์ง€ํ•˜๋”๋ผ๋„ ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์™„๊ฐ•์„ ๋นจ๋ฆฌ ํ•˜์‹ค์ˆ˜๋ก AWS ์‹ค์Šต ๋น„์šฉ์€ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.


โœ” ์„œ๋ฒ„๋ฅผ ๋ชจ๋‘ ์ค‘์ง€ํ•ด๋†”๋„ ์„œ๋ฒ„ ๋ณผ๋ฅจ ๋น„์šฉ์œผ๋กœ ์ธํ•ด ํ•œ ๋‹ฌ ์•ฝ 3๋งŒ์› ์ •๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋˜‘๊ฐ™์ด 40์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•ด๋„ ํ•œ ๋‹ฌ์ด ์•„๋‹Œ ๋‘ ๋‹ฌ ๋™์•ˆ ์‚ฌ์šฉํ•˜์‹ ๋‹ค๋ฉด 3๋งŒ์›์ด ์ถ”๊ฐ€๋˜์–ด ์ด 7๋งŒ์› ์ •๋„์˜ AWS ์š”๊ธˆ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€๊ธ‰์  ์™„๊ฐ•์„ ๋นจ๋ฆฌ ํ•˜์‹œ๊ธฐ๋ฅผ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์•„๋ž˜ ๋‚ด์šฉ์€ ๋ฐฐ์šฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


  1. Java ๊ธฐ๋ฐ˜์˜ Producer/Consumer ๊ฐœ๋ฐœ

  2. Kafka Connect (Season2 ์˜ˆ์ •)

  3. Schema Registry (Season2 ์˜ˆ์ •)

  4. Kafka Streams

  5. KSQL



  1. ๋จธ์‹ ๋Ÿฌ๋‹ ๋ฐ ๋”ฅ๋Ÿฌ๋‹

  2. Open Table Format (ex. iceberg) (Season2 ์˜ˆ์ •)

  3. Scala ๊ธฐ๋ฐ˜์˜ Application (pyspark์œผ๋กœ๋งŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค)

โœจ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

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

(๊ฒฝํ—˜์ƒ ์งˆ๋ฌธ ๋“ฑ๋ก๋˜๋ฉด ์ œ๊ฐ€ ๋‹ต๋ณ€์„ ๋‹ฌ๊ณ  ์žฌํ™•์ธ ๋˜๊ธฐ๊นŒ์ง€ 3~4 ์ผ ์ •๋„ ์†Œ์š”๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค)


์ด๋Ÿฐ ์˜์‚ฌ์†Œํ†ต์˜ ๋ถˆํŽธํ•จ์„ ์ค„์ด๊ณ  ์ˆ˜๊ฐ•ํ•˜์‹  ๋ถ„๋“ค์—๊ฒŒ ๋๊นŒ์ง€ ๊ณ ํ’ˆ์งˆ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋””์Šค์ฝ”๋“œ ์ฑ„๋„์„ ์šด์˜ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

https://discord.gg/jUESmxtp


๊ฐ•์˜์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด์–ด๋„ ์ข‹๊ณ , ์•„๋‹ˆ์–ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ์–˜๊ธฐ๋ฅผ ๋‚˜๋ˆ„์–ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

์›ํ™œํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•œ ๊ณณ์ด๋‹ˆ ํŽธํ•˜๊ฒŒ ์ž…์žฅํ•ด ์ฃผ์„ธ์š”

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

์‹ค์Šต ํ™˜๊ฒฝ

  • [OS] ๋Œ€๋ถ€๋ถ„์˜ ์‹ค์Šต์€ AWS์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Window/MacOS ์ƒ๊ด€์—†์ด ์ˆ˜๊ฐ• ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • [์„ฑ๋Šฅ] ๋†’์€ CPU/Memory ์ŠคํŽ™์„ ์š”๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋…ธํŠธ๋ถ/๋ฐ์Šคํฌํƒ‘์ด๋ฉด ์ถฉ๋ถ„ํžˆ ์ˆ˜๊ฐ„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • [๊ธฐํƒ€] ์ธํ„ฐ๋„ท์ด ๋˜๋Š” ํ™˜๊ฒฝ์ด๋ฉด ์–ผ๋งˆ๋“ ์ง€ ์ˆ˜๊ฐ• ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  AWS Cloud ๋น„์šฉ ๊ฒฐ์ œ ๊ฐ€๋Šฅํ•œ ์‹ ์šฉ์นด๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•™์Šต ์ž๋ฃŒ

  • ๊ฐ•์˜ 1-2 ์—์„œ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


ํ•„์ˆ˜ ์‚ฌ์ „ ์ง€์‹ ์‚ฌํ•ญ

  1. ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ์ง€์‹


    ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์™€ if/for/while ๋“ฑ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ•. ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ์ •๋„์˜ ์‹ค๋ ฅ

  2. ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ณธ ๋ช…๋ น์–ด


    ๋Œ€๋ถ€๋ถ„์˜ Infra ์ž‘์—…์€ Ansible ์ž๋™ํ™” ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌ๋ˆ…์Šค์˜ ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋Š” ์•Œ๊ณ  ์žˆ์–ด์•ผ ์ˆ˜๊ฐ• ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (vi ํŽธ์ง‘๊ธฐ, cd/mv/rm ๋“ฑ์˜ ๊ธฐ๋ณธ ๋ช…๋ น์–ด)

  3. SQL


    ๊ธฐ๋ณธ sql ์ง€์‹ (SELECT, WHERE, JOIN, GROUP BY, ORDER BY ๋“ฑ) ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋”ฐ๋ผ์˜ค์‹œ๊ธฐ์— ํ›จ์”ฌ ์ˆ˜์›”ํ•ฉ๋‹ˆ๋‹ค.
    (์–ด๋ ค์šด SQL์€ ์—†์Šต๋‹ˆ๋‹ค)

๊ถŒ๊ณ  ์‚ฌ์ „ ์ง€์‹ ์‚ฌํ•ญ

  1. ๋„์ปค ์ปจํ…Œ์ด๋„ˆ
    ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋ฅผ ์…‹์—…ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ์›๋ฆฌ๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

  2. git
    CI/CD ๋ฅผ ์œ„ํ•ด git ์„ ํ™œ์šฉํ•ด ์ง์ ‘ ์ฝ”๋“œ ๋ฐฐํฌ๊นŒ์ง€ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•์€ ๋ชจ๋‘ ์ฐจ๊ทผ์ฐจ๊ทผ ์„ค๋ช…๋“œ๋ฆฌ์ง€๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋”์šฑ ์ข‹์Šต๋‹ˆ๋‹ค.

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

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • Kafka & Spark์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„

  • ์‹ค์‹œ๊ฐ„ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„

  • ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋กœ์จ ์—ฌ๋Ÿฌ ์ง€์‹๊ณผ Skill ๊ฐœ๋ฐœ์ด ํ•„์š”ํ•˜์‹  ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • ํŒŒ์ด์ฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ฐœ๋…

  • SQL์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹ (Filter, GroupBy, OrderBy ์ˆ˜์ค€)

  • Linux ๊ธฐ์ดˆ์ ์ธ ์ปค๋งจ๋“œ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€

์•ˆ๋…•ํ•˜์„ธ์š”
๊น€ํ˜„์ง„์ž…๋‹ˆ๋‹ค.

715

๋ช…

์ˆ˜๊ฐ•์ƒ

32

๊ฐœ

์ˆ˜๊ฐ•ํ‰

119

๊ฐœ

๋‹ต๋ณ€

4.9

์ 

๊ฐ•์˜ ํ‰์ 

2

๊ฐœ

๊ฐ•์˜

์•ˆ๋…•ํ•˜์„ธ์š”.

์ •๋ณด๊ด€๋ฆฌ๊ธฐ์ˆ ์‚ฌ๋ฅผ ์ทจ๋“ํ•œ ์ดํ›„ ์ง€๊ธˆ๊นŒ์ง€ ์–ป์€ ์ง€์‹์„ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ณต์œ ํ•˜๊ณ ,

ํŠนํžˆ ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ฅผ ํฌ๋งํ•˜๊ณ  ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์€ ๋ถ„ ๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜๊ณ ์ž ์ปจํ…์ธ ๋ฅผ ์ œ์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค ^^

Contact: hjkim_sun@naver.com

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

113๊ฐœ โˆ™ (28์‹œ๊ฐ„ 23๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!