Ver3.0 ๐ ๋น ๋ฐ์ดํฐ ๋ถ์์ ์ํ ๋ถ์ฐ ์ปดํจํ ๊ณผ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์ฒ๋ฆฌ ์ํคํ ์ฒ

๐ ๋น ๋ฐ์ดํฐ ๋ถ์์ ์ํ ๋ถ์ฐ ์ปดํจํ ๊ณผ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์ฒ๋ฆฌ ์ํคํ ์ฒ
๋ฐ์ดํฐ ํ์ ์๋, ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ? ๐ก
๐ ๋น ๋ฐ์ดํฐ ์๋, ์ ๋ถ์ฐ ์ปดํจํ ์ด ํ์ํ ๊น?
์์ฆ ํ๋ฃจ์ ์์ฑ๋๋ ๋ฐ์ดํฐ๊ฐ ์ผ๋ง๋ ๋๋์ง ์์? ๋ฌด๋ ค 2.5ํธํธ๋ฆฌ์ธ ๋ฐ์ดํธ๋ ใ
ใ
ใ
์ซ์๋ก ์ฐ๋ฉด 2,500,000,000,000,000,000 ๋ฐ์ดํธ์ผ. ์ง์ง ์์๋ ์ ๋๋ ์์ด์ง? ๐ฑ
์ด๋ฐ ์์ฒญ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ผ๋ฐ์ ์ธ ์ปดํจํฐ ํ ๋๋ก๋ ์ ๋ ๋ถ๊ฐ๋ฅํด. ์๋ฅผ ๋ค์ด๋ณผ๊ฒ. ๋ทํ๋ฆญ์ค๊ฐ ํ๋ฃจ์ ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ๊ฐ ์ฝ 1ํํ๋ฐ์ดํธ ์ ๋์ธ๋ฐ, ์ด๊ฑธ ์ผ๋ฐ ๋
ธํธ๋ถ์ผ๋ก ์ฒ๋ฆฌํ๋ ค๋ฉด ๋ช ๋
์ด ๊ฑธ๋ฆด์ง ๋ชฐ๋ผ ใ
ใ
๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ ๋ฐ๋ก ๋ถ์ฐ ์ปดํจํ
์ด์ผ!
๋ถ์ฐ ์ปดํจํ
์ ์ฝ๊ฒ ๋งํ๋ฉด "์ฌ๋ฌ ๋์ ์ปดํจํฐ๊ฐ ํ๋ ฅํด์ ์ผ์ ๋๋ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์"์ด์ผ. ๋ง์น ํผ์์ ํผ์ 100ํ์ ๋จน๋ ๊ฒ ์๋๋ผ, ์น๊ตฌ๋ค์ด๋ ๋๋ ๋จน๋ ๊ฒ์ฒ๋ผ ๋ง์ด์ง ๐
๐ง ๋ถ์ฐ ์ปดํจํ ์ ํต์ฌ ๊ฐ๋ ๋ค
1. ์ํ์ ํ์ฅ vs ์์ง์ ํ์ฅ
์ปดํจํฐ ์ฑ๋ฅ์ ๋์ด๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋ ๊ฐ์ง์ผ.
์์ง์ ํ์ฅ(Scale-up)์ ํ ๋์ ์ปดํจํฐ๋ฅผ ๋ ๊ฐ๋ ฅํ๊ฒ ๋ง๋๋ ๊ฑฐ์ผ. CPU๋ฅผ ๋ ์ข์ ๊ฑธ๋ก ๋ฐ๊พธ๊ณ , RAM์ 128GB์์ 256GB๋ก ๋๋ฆฌ๊ณ , SSD๋ฅผ ๋ ๋น ๋ฅธ ๊ฑธ๋ก ๊ต์ฒดํ๋ ์์ด์ง. ๊ทผ๋ฐ ๋ฌธ์ ๊ฐ ๋ญ๋๋ฉด, ํ๊ณ๊ฐ ์์ด ใ
ใ
์๋ฌด๋ฆฌ ์ข์ ๋ถํ์ ์จ๋ ๋ฌผ๋ฆฌ์ ํ๊ณ๊ฐ ์กด์ฌํ๊ฑฐ๋ . ๊ฒ๋ค๊ฐ ๋น์ฉ๋ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฌ๋ผ๊ฐ.
๋ฐ๋ฉด ์ํ์ ํ์ฅ(Scale-out)์ ์ปดํจํฐ๋ฅผ ์ฌ๋ฌ ๋ ์ถ๊ฐํ๋ ๋ฐฉ์์ด์ผ. ์ฑ๋ฅ์ด ๋ณดํต์ธ ์๋ฒ 10๋, 100๋, 1000๋๋ฅผ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ๋ ๊ฑฐ์ง. ๋น
๋ฐ์ดํฐ ์ฒ๋ฆฌ์์๋ ์ด ๋ฐฉ์์ด ํจ์ฌ ํจ์จ์ ์ด์ผ! ๐ช
๊ตฌ๊ธ์ด๋ ํ์ด์ค๋ถ ๊ฐ์ ํ์ฌ๋ค์ด ๋ฐ๋ก ์ด ๋ฐฉ์์ ์ฐ๋๋ฐ, ์๋ง ๋์ ์๋ฒ๋ฅผ ํด๋ฌ์คํฐ๋ก ๊ตฌ์ฑํด์ ์ด์ํด. ํ ๋๊ฐ ๊ณ ์ฅ ๋๋ ๋ค๋ฅธ ์๋ฒ๋ค์ด ๊ณ์ ์ผํ๋๊น ์์ ์ฑ๋ ๋์์ง๋ ๊ฑฐ์ง.
2. ๋ฐ์ดํฐ ํํฐ์ ๋๊ณผ ์ค๋ฉ
๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ๋๋ ์ ์ฅํ๋ ๊ฑธ ํํฐ์
๋์ด๋ผ๊ณ ํด. ์ด๊ฒ ์ ์ค์ํ๋๋ฉด, 100TB์ง๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ์ ์ ์ฅํ๋ฉด ๊ฒ์ํ ๋ ์์ฒญ ๋๋ฆฌ์์? ๊ทธ๋์ ์ด๊ฑธ 10TB์ฉ 10๊ฐ๋ก ์ชผ๊ฐ์ ๊ฐ๊ฐ ๋ค๋ฅธ ์๋ฒ์ ์ ์ฅํ๋ ๊ฑฐ์ผ.
ํํฐ์
๋ ๋ฐฉ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ด:
โข ๋ฒ์ ๊ธฐ๋ฐ ํํฐ์
๋(Range Partitioning): ๋ ์ง๋ ID ๋ฒ์๋ก ๋๋๋ ๋ฐฉ์. ์๋ฅผ ๋ค์ด 2020๋
๋ฐ์ดํฐ๋ ์๋ฒ1, 2021๋
๋ฐ์ดํฐ๋ ์๋ฒ2 ์ด๋ฐ ์.
โข ํด์ ๊ธฐ๋ฐ ํํฐ์
๋(Hash Partitioning): ๋ฐ์ดํฐ์ ํค ๊ฐ์ ํด์ ํจ์์ ๋ฃ์ด์ ๋์จ ๊ฒฐ๊ณผ๋ก ์๋ฒ๋ฅผ ๊ฒฐ์ . ๋ฐ์ดํฐ๊ฐ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ๋๋ ์ฅ์ ์ด ์์ด.
โข ๋ฆฌ์คํธ ๊ธฐ๋ฐ ํํฐ์
๋(List Partitioning): ํน์ ๊ฐ์ ๋ชฉ๋ก์ผ๋ก ๋ถํ . ์๋ฅผ ๋ค์ด ์์ธ ๋ฐ์ดํฐ๋ ์๋ฒ1, ๋ถ์ฐ ๋ฐ์ดํฐ๋ ์๋ฒ2 ๊ฐ์ ์์ด์ง.
์ค๋ฉ(Sharding)์ ํํฐ์
๋์ ํ ์ข
๋ฅ์ธ๋ฐ, ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉํ๋ ์ฉ์ด์ผ. MongoDB๋ Cassandra ๊ฐ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ง์ด ์ฐ์ด์ง ใ
ใ
3. ๋ณต์ ์ ์ผ๊ด์ฑ
๋ถ์ฐ ์์คํ
์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ณณ์ ๋ณต์ฌํด๋๋ ๊ฑธ ๋ณต์ (Replication)๋ผ๊ณ ํด. ์ ๋ณต์ ๋ฅผ ํ ๊น? ๐ค
์ฒซ์งธ, ๊ฐ์ฉ์ฑ(Availability) ๋๋ฌธ์ด์ผ. ์๋ฒ ํ ๋๊ฐ ๊ณ ์ฅ ๋๋ ๋ค๋ฅธ ์๋ฒ์ ๋ณต์ฌ๋ณธ์ด ์์ผ๋๊น ์๋น์ค๊ฐ ์ค๋จ๋์ง ์์.
๋์งธ, ์ฑ๋ฅ ํฅ์์ ์ํด์์ผ. ์ฌ๋ฌ ๊ณณ์์ ๋์์ ์ฝ๊ธฐ ์์
์ ์ฒ๋ฆฌํ ์ ์์ผ๋๊น ์๋๊ฐ ๋นจ๋ผ์ง์ง.
์
์งธ, ์ง์ญ์ ๋ถ์ฐ์ ์ํด์์ผ. ํ๊ตญ ์ฌ์ฉ์๋ ํ๊ตญ ์๋ฒ์์, ๋ฏธ๊ตญ ์ฌ์ฉ์๋ ๋ฏธ๊ตญ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๋คํธ์ํฌ ์ง์ฐ์ด ์ค์ด๋ค๊ฑฐ๋ .
๊ทผ๋ฐ ๋ณต์ ๋ฅผ ํ๋ฉด ๊ณจ์น ์ํ ๋ฌธ์ ๊ฐ ์๊ฒจ. ๋ฐ๋ก ์ผ๊ด์ฑ(Consistency) ๋ฌธ์ ์ผ! ์๋ฒ A์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋๋ฐ, ์๋ฒ B์๋ ์์ง ๋ฐ์์ด ์ ๋๋ค๋ฉด? ์ฌ์ฉ์๊ฐ ์ด๋ ์๋ฒ์ ์ ์ํ๋๋์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ฒ ๋๋ ๊ฑฐ์ง ใ
ใ
ใ
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ฌ๋ฌ ์ผ๊ด์ฑ ๋ชจ๋ธ์ด ์์ด:
| ์ผ๊ด์ฑ ๋ชจ๋ธ | ์ค๋ช | ์ฅ๋จ์ |
|---|---|---|
| ๊ฐํ ์ผ๊ด์ฑ | ๋ชจ๋ ๋ณต์ ๋ณธ์ด ํญ์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง | ์ ํํ์ง๋ง ๋๋ฆผ |
| ์ต์ข ์ผ๊ด์ฑ | ์๊ฐ์ด ์ง๋๋ฉด ๊ฒฐ๊ตญ ๋ชจ๋ ๋ณต์ ๋ณธ์ด ๋์ผํด์ง | ๋น ๋ฅด์ง๋ง ์ผ์์ ๋ถ์ผ์น ๊ฐ๋ฅ |
| ์ธ๊ณผ์ ์ผ๊ด์ฑ | ์ธ๊ณผ๊ด๊ณ๊ฐ ์๋ ์์ ๋ค๋ง ์์ ๋ณด์ฅ | ์ค๊ฐ ์์ค์ ์ฑ๋ฅ๊ณผ ์ผ๊ด์ฑ |
Amazon์ DynamoDB๋ ์ต์ข ์ผ๊ด์ฑ์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๊ณ , Google์ Spanner๋ ๊ฐํ ์ผ๊ด์ฑ์ ์ ๊ณตํด. ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์์ผ๋ ์ํฉ์ ๋ง๊ฒ ์ ํํด์ผ ํด!
โ๏ธ ํด๋ผ์ฐ๋ ์ปดํจํ ๊ณผ ๋น ๋ฐ์ดํฐ์ ๋ง๋จ
ํด๋ผ์ฐ๋ ์ปดํจํ
์ ๋น
๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์์ ๊ฒ์์ฒด์ธ์ ์ผ! ์์ ์๋ ๋น
๋ฐ์ดํฐ ๋ถ์ํ๋ ค๋ฉด ์์ฒญ๋ ์ด๊ธฐ ํฌ์๊ฐ ํ์ํ์ด. ์๋ฒ ์์ญ ๋๋ฅผ ์ฌ๊ณ , ๋ฐ์ดํฐ์ผํฐ ๊ตฌ์ถํ๊ณ , ์ ๊ธฐ์ธ ๋ด๊ณ ... ์ค์๊ธฐ์
์ ์๋๋ ๋ชป ๋์ง ใ
ใ
๊ทผ๋ฐ ํด๋ผ์ฐ๋๊ฐ ๋ฑ์ฅํ๋ฉด์ ์์ ๋ฌ๋ผ์ก์ด! ํ์ํ ๋๋ง ์ปดํจํ
์์์ ๋น๋ ค ์ฐ๊ณ , ์ด ๋งํผ๋ง ๋์ ๋ด๋ฉด ๋๋๊น. ๋ง์น ์๋์ฐจ๋ฅผ ์ฌ๋ ๊ฒ ์๋๋ผ ํ์ํ ๋๋ง ๋ ํธํ๋ ๊ฒ์ฒ๋ผ ๋ง์ด์ผ ๐
ํด๋ผ์ฐ๋ ์๋น์ค ๋ชจ๋ธ
ํด๋ผ์ฐ๋ ์๋น์ค๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ๋ชจ๋ธ๋ก ๋๋์ด:
1. IaaS (Infrastructure as a Service)
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ธํ๋ผ๋ฅผ ์ ๊ณตํ๋ ์๋น์ค์ผ. ๊ฐ์ ์๋ฒ, ์คํ ๋ฆฌ์ง, ๋คํธ์ํฌ ๊ฐ์ ๊ฑฐ. AWS EC2, Google Compute Engine, Azure Virtual Machines๊ฐ ๋ํ์ ์ด์ง. ์์ ๋๊ฐ ๋์ง๋ง ๊ด๋ฆฌํ ๊ฒ ๋ง์.
2. PaaS (Platform as a Service)
๊ฐ๋ฐ ํ๋ซํผ์ ์ ๊ณตํด. ์ด์์ฒด์ , ๋ฏธ๋ค์จ์ด, ๋ฐํ์ ํ๊ฒฝ๊น์ง ๋ค ์ค๋น๋์ด ์์ด์ ๊ฐ๋ฐ์๋ ์ฝ๋๋ง ์์ฑํ๋ฉด ๋ผ. Google App Engine, AWS Elastic Beanstalk ๊ฐ์ ๊ฒ ์์ง.
3. SaaS (Software as a Service)
์์ฑ๋ ์ํํธ์จ์ด๋ฅผ ์๋น์ค๋ก ์ ๊ณตํ๋ ๊ฑฐ์ผ. Gmail, Dropbox, Salesforce ๊ฐ์ ๊ฒ๋ค. ์ฌ์ฉ์๋ ๊ทธ๋ฅ ์น ๋ธ๋ผ์ฐ์ ๋ก ์ ์ํด์ ์ฐ๊ธฐ๋ง ํ๋ฉด ๋ผ ใ
ใ
โข ์คํ ์ธ์คํด์ค(Spot Instance) ํ์ฉ: ์ผ๋ฐ ๊ฐ๊ฒฉ์ 70~90% ํ ์ธ
โข ์๋ ์ค์ผ์ผ๋ง ์ค์ : ํ์ํ ๋๋ง ๋ฆฌ์์ค ์ฆ๊ฐ
โข ๋ฐ์ดํฐ ์ ์ก ๋น์ฉ ์ฃผ์: ๋ฆฌ์ ๊ฐ ๋ฐ์ดํฐ ์ด๋์ ๋น์ฉ ๋ฐ์
โข ์์ฝ ์ธ์คํด์ค: ์ฅ๊ธฐ ์ฌ์ฉ ์ ์ต๋ 75% ํ ์ธ
์ฃผ์ ํด๋ผ์ฐ๋ ๋น ๋ฐ์ดํฐ ์๋น์ค
๊ฐ ํด๋ผ์ฐ๋ ์ ๊ณต์๋ง๋ค ๋น
๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ด๋ฆฌํ ์๋น์ค๋ฅผ ์ ๊ณตํด. ์ง์ Hadoop ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ํธํ์ง!
AWS (Amazon Web Services)
โข Amazon EMR: Hadoop, Spark ๊ธฐ๋ฐ ๋น
๋ฐ์ดํฐ ์ฒ๋ฆฌ
โข Amazon Redshift: ํํ๋ฐ์ดํธ๊ธ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค
โข Amazon Kinesis: ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
โข AWS Glue: ETL(Extract, Transform, Load) ์๋น์ค
โข Amazon Athena: S3 ๋ฐ์ดํฐ๋ฅผ SQL๋ก ์ง์ ์ฟผ๋ฆฌ
Google Cloud Platform (GCP)
โข BigQuery: ์๋ฒ๋ฆฌ์ค ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค, ์ง์ง ๋น ๋ฆ!
โข Dataproc: ๊ด๋ฆฌํ Spark/Hadoop ์๋น์ค
โข Dataflow: Apache Beam ๊ธฐ๋ฐ ์คํธ๋ฆผ/๋ฐฐ์น ์ฒ๋ฆฌ
โข Pub/Sub: ๋ฉ์์ง ๋ฐ ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ
Microsoft Azure
โข Azure Synapse Analytics: ํตํฉ ๋ถ์ ์๋น์ค
โข HDInsight: ๊ด๋ฆฌํ Hadoop/Spark ํด๋ฌ์คํฐ
โข Azure Databricks: Apache Spark ๊ธฐ๋ฐ ๋ถ์ ํ๋ซํผ
โข Azure Stream Analytics: ์ค์๊ฐ ๋ถ์ ์์ง
๊ฐ์ธ์ ์ผ๋ก BigQuery๋ ์ง์ง ์ฌ๊ธฐ์ ์ผ๋ก ๋นจ๋ผ ใ ใ ใ ํ ๋ผ๋ฐ์ดํธ๊ธ ๋ฐ์ดํฐ๋ฅผ ๋ช ์ด ๋ง์ ์ฟผ๋ฆฌํ ์ ์๊ฑฐ๋ . ๋ฌผ๋ก ๋น์ฉ๋ ๊ทธ๋งํผ ๋๊ฐ์ง๋ง... ๐
๐ฏ ํต์ฌ ๋ถ์ฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ
Apache Hadoop - ๋น ๋ฐ์ดํฐ์ ์์
Hadoop์ ๋น
๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์์กฐ ๊ฒฉ์ด์ผ. 2006๋
์ Doug Cutting์ด ๋ง๋ค์๋๋ฐ, ์ด๋ฆ์ด ์ฌ๋ฐ์ด ใ
ใ
๊ทธ์ ์๋ค์ด ๊ฐ์ง๊ณ ๋๋ ๋
ธ๋ ์ฝ๋ผ๋ฆฌ ์ธํ ์ด๋ฆ์ด Hadoop์ด์๋.
Hadoop์ ํต์ฌ์ ๋ ๊ฐ์ง์ผ:
1. HDFS (Hadoop Distributed File System)
๋ถ์ฐ ํ์ผ ์์คํ
์ด์ผ. ํฐ ํ์ผ์ ๋ธ๋ก ๋จ์(๊ธฐ๋ณธ 128MB)๋ก ์ชผ๊ฐ์ ์ฌ๋ฌ ์๋ฒ์ ์ ์ฅํด. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋ธ๋ก์ 3๊ฐ์ฉ ๋ณต์ ํด์ ์ ์ฅํ๋๊น ์๋ฒ ํ๋๊ฐ ์ฃฝ์ด๋ ๋ฐ์ดํฐ๊ฐ ์์ ํ์ง!
์๋ฅผ ๋ค์ด 1GB ํ์ผ์ด ์์ผ๋ฉด ์ด๊ฑธ 8๊ฐ ๋ธ๋ก์ผ๋ก ๋๋ . ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋ธ๋ก์ ์๋ฒ A, B, C์ ๋ถ์ฐ ์ ์ฅํ๋ ๊ฑฐ์ผ. ๋ง์ฝ ์๋ฒ A๊ฐ ๊ณ ์ฅ ๋๋ฉด? ๊ฑฑ์ ์์ด, ์๋ฒ B๋ C์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๋๋๊น ๐
2. MapReduce
๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ ์์ํฌ์ผ. ์ด๋ฆ ๊ทธ๋๋ก Map ๋จ๊ณ์ Reduce ๋จ๊ณ๋ก ๋๋์ด.
Map ๋จ๊ณ: ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ํค-๊ฐ ์์ผ๋ก ๋ณํ
Shuffle ๋จ๊ณ: ๊ฐ์ ํค๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ค์ ๋ชจ์
Reduce ๋จ๊ณ: ๋ชจ์ธ ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํด์ ์ต์ข
๊ฒฐ๊ณผ ์์ฑ
๊ฐ๋จํ ์๋ฅผ ๋ค์ด๋ณผ๊ฒ. ์์ฒญ ํฐ ํ
์คํธ ํ์ผ์์ ๋จ์ด ๊ฐ์๋ฅผ ์ธ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ ๋ค๊ณ ํด๋ณด์:
// Map ํจ์
map(String key, String value):
// key: ๋ฌธ์ ์ด๋ฆ
// value: ๋ฌธ์ ๋ด์ฉ
for each word w in value:
EmitIntermediate(w, "1");
// Reduce ํจ์
reduce(String key, Iterator values):
// key: ๋จ์ด
// values: "1"์ ๋ฆฌ์คํธ
int result = 0;
for each v in values:
result += ParseInt(v);
Emit(AsString(result));
์ด๋ ๊ฒ ํ๋ฉด "hello world hello"๋ผ๋ ํ
์คํธ์์ Map ๋จ๊ณ์์ (hello, 1), (world, 1), (hello, 1)์ด ๋์ค๊ณ , Shuffle ํ์ Reduce ๋จ๊ณ์์ (hello, 2), (world, 1)์ด ์ต์ข
๊ฒฐ๊ณผ๋ก ๋์!
๊ทผ๋ฐ MapReduce๋ ์ข ๋๋ ค ใ
ใ
์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋์คํฌ์ ๊ณ์ ์ฐ๊ณ ์ฝ์ด์ผ ํ๊ฑฐ๋ . ๊ทธ๋์ ์์ฆ์ Spark๋ฅผ ๋ ๋ง์ด ์จ.
Apache Spark - ์ฐจ์ธ๋ ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ
Spark๋ 2014๋
์ ๋์จ ํ๋ ์์ํฌ์ธ๋ฐ, Hadoop๋ณด๋ค ์ต๋ 100๋ฐฐ ๋น ๋ฅด๋ค๊ณ ํด! ๐ฑ ์ด๋ป๊ฒ ๊ทธ๊ฒ ๊ฐ๋ฅํ ๊น?
๋น๋ฐ์ ์ธ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ์ผ. MapReduce๋ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋๋ฐ, Spark๋ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ ์ฅํด. ๋์คํฌ I/O๊ฐ ์ผ๋ง๋ ๋๋ฆฐ์ง ์์ง? ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ๋ณด๋ค ์๋ฐฑ ๋ฐฐ ๋น ๋ฅด๊ฑฐ๋ !
Spark์ ํต์ฌ ๊ฐ๋
์ RDD (Resilient Distributed Dataset)์ผ. ๋ถ๋ณ(immutable)ํ๊ณ ๋ถ์ฐ๋ ๋ฐ์ดํฐ ์ปฌ๋ ์
์ธ๋ฐ, ์ฌ๋ฌ ์ฐ์ฐ์ ์ฒด์ด๋ํ ์ ์์ด:
// Scala ์์
val textFile = spark.textFile("hdfs://...")
val counts = textFile
.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://...")
์ด ์ฝ๋๋ ์๊น MapReduce ์์ ๋ ๊ฐ์ ์ผ์ ํ๋๋ฐ, ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ๋น ๋ฅด์ง?
Spark๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋์ด ์์ด:
โข Spark SQL: SQL ์ฟผ๋ฆฌ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ
โข Spark Streaming: ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
โข MLlib: ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โข GraphX: ๊ทธ๋ํ ์ฒ๋ฆฌ
์์ฆ ๋ฐ์ดํฐ ์์ง๋์ด ์ฑ์ฉ ๊ณต๊ณ ๋ณด๋ฉด Spark ๊ฒฝํ์ ๊ฑฐ์ ํ์๋ก ์๊ตฌํด. ๊ทธ๋งํผ ์
๊ณ ํ์ค์ด ๋๋ค๋ ๊ฑฐ์ง!
โข ์บ์ฑ ํ์ฉ: ๋ฐ๋ณต ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ .cache() ๋๋ .persist()
โข ๋ธ๋ก๋์บ์คํธ ๋ณ์: ์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ ธ๋์ ๋ณต์ฌํด์ ์กฐ์ธ ์ฑ๋ฅ ํฅ์
โข ์ ์ ํ ํ์ผ ํฌ๋งท: Parquet์ด๋ ORC ๊ฐ์ ์ปฌ๋ผ ๊ธฐ๋ฐ ํฌ๋งท ์ฌ์ฉ
โข ๋ฉ๋ชจ๋ฆฌ ์ค์ : executor-memory, driver-memory ์ ์ ํ ์กฐ์
Apache Kafka - ์ค์๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ
Kafka๋ LinkedIn์์ ๋ง๋ ๋ถ์ฐ ๋ฉ์์ง ์์คํ
์ด์ผ. ์ค์๊ฐ์ผ๋ก ์์ฒญ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ด์ ์์ฆ ๊ฑฐ์ ๋ชจ๋ ๋๊ธฐ์
์ด ์ฐ๊ณ ์์ง ใ
ใ
Kafka์ ํต์ฌ ๊ฐ๋
๋ค:
โข Producer: ๋ฐ์ดํฐ๋ฅผ ์์ฑํด์ Kafka์ ๋ณด๋ด๋ ์ ํ๋ฆฌ์ผ์ด์
โข Consumer: Kafka์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๊ฐ๋ ์ ํ๋ฆฌ์ผ์ด์
โข Topic: ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์นดํ
๊ณ ๋ฆฌ. ์๋ฅผ ๋ค์ด "user-clicks", "purchase-events" ๊ฐ์ ๊ฑฐ
โข Partition: Topic์ ์ฌ๋ฌ ๊ฐ๋ก ๋๋ ๊ฒ. ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํด ํ์ํด
โข Broker: Kafka ์๋ฒ. ์ฌ๋ฌ ๋๋ฅผ ํด๋ฌ์คํฐ๋ก ๊ตฌ์ฑ
Kafka๊ฐ ์ ๋น ๋ฅด๋๋ฉด, ๋์คํฌ์ ์์ฐจ์ ์ผ๋ก ์ฐ๊ธฐ ๋๋ฌธ์ด์ผ. ๋๋ค ์ก์ธ์ค๊ฐ ์๋๋ผ ์์ฐจ ์ฐ๊ธฐ๋ ์์ฒญ ๋น ๋ฅด๊ฑฐ๋ ! ์ด๋น ์๋ฐฑ๋ง ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์์ด ๐จ
์ค์ ์ฌ์ฉ ์๋ฅผ ๋ค์ด๋ณผ๊ฒ. ๋ทํ๋ฆญ์ค๋ Kafka๋ก ํ๋ฃจ์ ์์กฐ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํด. ์ฌ์ฉ์๊ฐ ์์์ ์ฌ์ํ๊ฑฐ๋ ์ผ์์ ์งํ๊ฑฐ๋ ๊ฒ์ํ๋ ๋ชจ๋ ํ๋์ด Kafka๋ฅผ ํตํด ์ค์๊ฐ์ผ๋ก ์์ง๋๊ณ ๋ถ์๋ผ. ์ด๊ฑธ ๋ฐํ์ผ๋ก ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ํ๋ ๊ฑฐ์ง!
๐๏ธ ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ํคํ ์ฒ ํจํด
Lambda Architecture
Lambda Architecture๋ Nathan Marz๊ฐ ์ ์ํ ์ํคํ
์ฒ์ผ. ๋ฐฐ์น ์ฒ๋ฆฌ์ ์ค์๊ฐ ์ฒ๋ฆฌ๋ฅผ ๋์์ ์ง์ํ๋ ๊ฒ ํน์ง์ด์ง.
์ธ ๊ฐ์ ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋ผ:
1. Batch Layer (๋ฐฐ์น ๋ ์ด์ด)
๋ชจ๋ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ์ํํด. Hadoop์ด๋ Spark๋ฅผ ์ฌ์ฉํ์ง. ์ ํํ์ง๋ง ๋๋ ค. ๋ช ์๊ฐ์์ ํ๋ฃจ ์ ๋ ๊ฑธ๋ฆด ์ ์์ด.
2. Speed Layer (์คํผ๋ ๋ ์ด์ด)
์ค์๊ฐ์ผ๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํด. Spark Streaming์ด๋ Flink๋ฅผ ์ฌ์ฉํด. ๋น ๋ฅด์ง๋ง ๊ทผ์ฌ์น์ผ ์ ์์ด.
3. Serving Layer (์๋น ๋ ์ด์ด)
๋ฐฐ์น ๋ ์ด์ด์ ์คํผ๋ ๋ ์ด์ด์ ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ์ ์ฟผ๋ฆฌ์ ์๋ตํด. ์ฌ์ฉ์๋ ์ด ๋ ์ด์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ง.
์๋ฅผ ๋ค์ด ์น์ฌ์ดํธ ๋ฐฉ๋ฌธ์ ์๋ฅผ ์ธ๋ ์์คํ
์ ๋ง๋ ๋ค๊ณ ํด๋ณด์:
โข ๋ฐฐ์น ๋ ์ด์ด: ์ด์ ๊น์ง์ ์ ํํ ๋ฐฉ๋ฌธ์ ์ ๊ณ์ฐ
โข ์คํผ๋ ๋ ์ด์ด: ์ค๋ ์ค์๊ฐ ๋ฐฉ๋ฌธ์ ์ ๊ณ์ฐ
โข ์๋น ๋ ์ด์ด: ๋ ๊ฐ์ ํฉ์ณ์ ์ ์ฒด ๋ฐฉ๋ฌธ์ ์ ์ ๊ณต
์ฅ์ ์ ์ ํ์ฑ๊ณผ ์๋๋ฅผ ๋์์ ์ป์ ์ ์๋ค๋ ๊ฑฐ์ผ. ๋จ์ ์ ๋ ๊ฐ์ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ์ ์งํด์ผ ํด์ ๋ณต์กํ๋ค๋ ๊ฑฐ์ง ใ
ใ
Kappa Architecture
Kappa Architecture๋ Jay Kreps๊ฐ ์ ์ํ ๊ฑด๋ฐ, Lambda์ ๋ณต์ก์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์์ด. ํต์ฌ ์์ด๋์ด๋ "๋ฐฐ์น ๋ ์ด์ด๋ฅผ ์์ ์!"์ผ ใ
ใ
ใ
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆผ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฑฐ์ผ. ๋ฐฐ์น ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ฉด? ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์คํธ๋ฆฌ๋ฐํด์ ์ฒ๋ฆฌํ๋ฉด ๋ผ! ์ด๊ฑธ ๋ฆฌํ๋ ์ด(Replay)๋ผ๊ณ ํด.
Kafka๊ฐ ์ด ์ํคํ
์ฒ์ ์๋ฒฝํด. Kafka๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ๊ธฐ๊ฐ ๋ณด๊ดํ๋๊น, ํ์ํ๋ฉด ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฝ์ด์ ์ฒ๋ฆฌํ ์ ์๊ฑฐ๋ .
์ฅ์ :
โข ํ๋์ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ๋ง ์ ์งํ๋ฉด ๋ผ์ ๊ฐ๋จ
โข ์ฝ๋ ์ค๋ณต์ด ์์ด
โข ์ค์๊ฐ ์ฒ๋ฆฌ์ ์ต์ ํ
๋จ์ :
โข ๋งค์ฐ ํฐ ๋ฐ์ดํฐ์
์ ๋ฆฌํ๋ ์ดํ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์์ด
โข ๋ณต์กํ ๋ฐฐ์น ์ฒ๋ฆฌ์๋ ๋ถ์ ํฉํ ์ ์์ด
Data Lake vs Data Warehouse
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์๋ ๋ ๊ฐ์ง ์ ๊ทผ๋ฒ์ด ์์ด.
Data Warehouse (๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค)
๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ค์ ์ ์ฅ์์ผ. ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ํ๊ณ ์คํค๋ง๋ฅผ ์ ์ํด์ ์ ์ฅํด. ์ฟผ๋ฆฌ๊ฐ ๋น ๋ฅด๊ณ ๋น์ฆ๋์ค ์ธํ
๋ฆฌ์ ์ค(BI)์ ์ ํฉํ์ง.
ํน์ง:
โข Schema-on-Write: ๋ฐ์ดํฐ๋ฅผ ์ธ ๋ ์คํค๋ง ์ ์
โข ์ ์ ๋ ๋ฐ์ดํฐ๋ง ์ ์ฅ
โข ๋น์ฉ์ด ๋์
โข SQL ์ฟผ๋ฆฌ์ ์ต์ ํ
๋ํ์ ์ธ ์ ํ: Amazon Redshift, Google BigQuery, Snowflake
Data Lake (๋ฐ์ดํฐ ๋ ์ดํฌ)
๋ชจ๋ ์ข
๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ์๋ณธ ๊ทธ๋๋ก ์ ์ฅํ๋ ์ ์ฅ์์ผ. ๊ตฌ์กฐํ ๋ฐ์ดํฐ, ๋ฐ๊ตฌ์กฐํ ๋ฐ์ดํฐ, ๋น๊ตฌ์กฐํ ๋ฐ์ดํฐ ๋ชจ๋ OK!
ํน์ง:
โข Schema-on-Read: ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์คํค๋ง ํด์
โข ์๋ณธ ๋ฐ์ดํฐ ๊ทธ๋๋ก ์ ์ฅ
โข ๋น์ฉ์ด ์ ๋ ด (์ฃผ๋ก S3 ๊ฐ์ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง ์ฌ์ฉ)
โข ์ ์ฐํ์ง๋ง ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ธ ์ ์์ด
๋ํ์ ์ธ ์ ํ: AWS S3 + Athena, Azure Data Lake, Google Cloud Storage
์์ฆ ํธ๋ ๋๋ Data Lakehouse์ผ! Data Lake์ ์ ์ฐ์ฑ๊ณผ Data Warehouse์ ์ฑ๋ฅ์ ๊ฒฐํฉํ ๊ฑฐ์ง. Databricks์ Delta Lake๊ฐ ๋ํ์ ์ด์ผ.
โก ์ค์๊ฐ ์คํธ๋ฆผ ์ฒ๋ฆฌ ๊ธฐ์
Apache Flink - ์ง์ ํ ์คํธ๋ฆผ ์ฒ๋ฆฌ
Flink๋ "์ง์ง" ์คํธ๋ฆผ ์ฒ๋ฆฌ ์์ง์ด์ผ. Spark Streaming์ด ๋ง์ดํฌ๋ก ๋ฐฐ์น ๋ฐฉ์์ธ ๋ฐ๋ฉด, Flink๋ ์ด๋ฒคํธ ํ๋ํ๋๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํด.
Flink์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๋ค:
1. Event Time Processing
๋ฐ์ดํฐ๊ฐ ์ค์ ๋ก ๋ฐ์ํ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ฒ๋ฆฌํด. ๋คํธ์ํฌ ์ง์ฐ์ด๋ ์์ ๋ค๋ฐ๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง. ์๋ฅผ ๋ค์ด IoT ์ผ์ ๋ฐ์ดํฐ๊ฐ ๋คํธ์ํฌ ๋ฌธ์ ๋ก ๋ฆ๊ฒ ๋์ฐฉํด๋, ์ค์ ์ธก์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ํํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด!
2. Watermark
"์ด ์๊ฐ ์ด์ ์ ๋ฐ์ดํฐ๋ ๋ ์ด์ ์ ์ฌ ๊ฑฐ์ผ"๋ผ๊ณ ํ์ํ๋ ๋ฉ์ปค๋์ฆ์ด์ผ. ์ด๊ฑธ ํตํด ์๋์ฐ๋ฅผ ๋ซ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ ์์ง.
3. Exactly-Once Semantics
๊ฐ ์ด๋ฒคํธ๊ฐ ์ ํํ ํ ๋ฒ๋ง ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํด. ์ค๋ณต ์ฒ๋ฆฌ๋ ๋๋ฝ์ด ์๋ค๋ ๊ฑฐ์ง! ๊ธ์ต ๊ฑฐ๋ ๊ฐ์ ์ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ์์ ์ด์ผ.
4. State Management
์คํธ๋ฆผ ์ฒ๋ฆฌ ์ค์ ์ํ๋ฅผ ์ ์งํ ์ ์์ด. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๋ณ ๋์ ๊ตฌ๋งค ๊ธ์ก์ ๊ณ์ฐํ๋ ค๋ฉด ๊ฐ ์ฌ์ฉ์์ ์ํ๋ฅผ ๊ธฐ์ตํด์ผ ํ์์? Flink๋ ์ด๊ฑธ ์๋์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ฅ์ ๋ฐ์ ์ ๋ณต๊ตฌ๋ ํด์ค.
// Flink ์์ (Java)
DataStream<String> stream = env.addSource(new FlinkKafkaConsumer<>(...));
DataStream<Tuple2<String, Integer>> wordCounts = stream
.flatMap(new Tokenizer())
.keyBy(value -> value.f0)
.window(TumblingEventTimeWindows.of(Time.seconds(5)))
.sum(1);
wordCounts.print();
์ด ์ฝ๋๋ 5์ด ์๋์ฐ๋ง๋ค ๋จ์ด ๊ฐ์๋ฅผ ์ธ๋ ๊ฑฐ์ผ. Event Time์ ์ฌ์ฉํ๋๊น ๋ฐ์ดํฐ๊ฐ ๋ฆ๊ฒ ๋์ฐฉํด๋ ์ ํํ๊ฒ ์ฒ๋ฆฌ๋ผ!
์ค์๊ฐ ์ฒ๋ฆฌ์ ์๋์ฐ ๊ฐ๋
์คํธ๋ฆผ ๋ฐ์ดํฐ๋ ๋์ด ์์์? ๊ทธ๋ผ ์ธ์ ์ง๊ณ๋ฅผ ํด์ผ ํ ๊น? ์ฌ๊ธฐ์ ์๋์ฐ(Window) ๊ฐ๋
์ด ํ์ํด!
1. Tumbling Window (ํ
๋ธ๋ง ์๋์ฐ)
๊ฒน์น์ง ์๋ ๊ณ ์ ํฌ๊ธฐ ์๋์ฐ์ผ. ์๋ฅผ ๋ค์ด 5๋ถ ์๋์ฐ๋ฉด 00:00-00:05, 00:05-00:10, 00:10-00:15 ์ด๋ฐ ์์ผ๋ก ๋๋์ด. ๊ฐ ์ด๋ฒคํธ๋ ์ ํํ ํ๋์ ์๋์ฐ์๋ง ์ํด.
2. Sliding Window (์ฌ๋ผ์ด๋ฉ ์๋์ฐ)
๊ฒน์น๋ ์๋์ฐ์ผ. ์๋ฅผ ๋ค์ด 10๋ถ ์๋์ฐ๋ฅผ 5๋ถ๋ง๋ค ์ฌ๋ผ์ด๋ํ๋ฉด 00:00-00:10, 00:05-00:15, 00:10-00:20 ์ด๋ ๊ฒ ๋ผ. ์ด๋ ํ๊ท ๊ฐ์ ๊ฑธ ๊ณ์ฐํ ๋ ์ ์ฉํด!
3. Session Window (์ธ์
์๋์ฐ)
ํ๋์ด ์๋ ์๊ฐ(gap)์ ๊ธฐ์ค์ผ๋ก ์๋์ฐ๋ฅผ ๋๋ . ์๋ฅผ ๋ค์ด 30๋ถ ๋์ ํ๋์ด ์์ผ๋ฉด ์ธ์
์ด ๋๋ ๊ฑธ๋ก ๊ฐ์ฃผํ๋ ๊ฑฐ์ง. ์น์ฌ์ดํธ ์ฌ์ฉ์ ์ธ์
๋ถ์ํ ๋ ๋ฑ์ด์ผ!
4. Global Window (๊ธ๋ก๋ฒ ์๋์ฐ)
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ์๋์ฐ๋ก ์ทจ๊ธํด. ์ปค์คํ
ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํด์ ์ธ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ง ์ง์ ์ ์ดํ ์ ์์ด.
โข Tumbling Window 1๋ถ ์ฌ์ฉ
โข ๊ฐ ์๋์ฐ์์ ์ ์๋ฅผ ์ง๊ณ
โข Top 10์ ๊ณ์ฐํด์ ๋ฆฌ๋๋ณด๋ ์ ๋ฐ์ดํธ
โข Flink์ State๋ฅผ ์ฌ์ฉํด์ ๊ฐ ํ๋ ์ด์ด์ ๋์ ์ ์ ๊ด๋ฆฌ
์ด๋ ๊ฒ ํ๋ฉด ์๋ฐฑ๋ง ๋ช ์ด ๋์์ ํ๋ ์ดํด๋ ์ค์๊ฐ์ผ๋ก ๋ฆฌ๋๋ณด๋๋ฅผ ์ ์งํ ์ ์์ด!
๐ ๋ฐ์ดํฐ ๋ณด์๊ณผ ๊ฑฐ๋ฒ๋์ค
๋น
๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ค ๋ณด๋ฉด ๋ฏผ๊ฐํ ์ ๋ณด๋ ๋ง์ด ํฌํจ๋ผ. ๊ฐ์ธ์ ๋ณด, ๊ธ์ต ์ ๋ณด, ์๋ฃ ์ ๋ณด ๋ฑ๋ฑ. ์ด๊ฑธ ์ ๋๋ก ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ํฐ์ผ ๋์ง ใ
ใ
ใ
GDPR ์๋ฐํ๋ฉด ๋ฒ๊ธ์ด ์ด๋ง์ด๋งํด ๐ฑ
๋ฐ์ดํฐ ์ํธํ
โข ์ ์ฅ ์ ์ํธํ(Encryption at Rest): ๋์คํฌ์ ์ ์ฅ๋ ๋ ์ํธํ. AWS S3๋ ๊ธฐ๋ณธ์ผ๋ก AES-256 ์ํธํ ์ ๊ณต
โข ์ ์ก ์ค ์ํธํ(Encryption in Transit): ๋คํธ์ํฌ๋ก ์ ์ก๋ ๋ ์ํธํ. TLS/SSL ์ฌ์ฉ
โข ์ปฌ๋ผ ๋ ๋ฒจ ์ํธํ: ํน์ ๋ฏผ๊ฐํ ์ปฌ๋ผ๋ง ์ํธํ. ์ฃผ๋ฏผ๋ฒํธ, ์ ์ฉ์นด๋ ๋ฒํธ ๊ฐ์ ๊ฑฐ
์ ๊ทผ ์ ์ด
โข RBAC (Role-Based Access Control): ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด. ๊ฐ๋ฐ์, ๋ถ์๊ฐ, ๊ด๋ฆฌ์ ๋ฑ ์ญํ ๋ณ๋ก ๊ถํ ๋ถ์ฌ
โข ABAC (Attribute-Based Access Control): ์์ฑ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด. ๋ถ์, ์ง๊ธ, ํ๋ก์ ํธ ๋ฑ ๋ค์ํ ์์ฑ ์กฐํฉ์ผ๋ก ๊ถํ ๊ฒฐ์
โข ๋ฐ์ดํฐ ๋ง์คํน: ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ค์ ๋ณด์ฌ์ค. ์๋ฅผ ๋ค์ด ์ฃผ๋ฏผ๋ฒํธ๋ฅผ "123456-*******"๋ก ํ์
๊ฐ์ฌ ๋ก๊ทธ
๋๊ฐ, ์ธ์ , ์ด๋ค ๋ฐ์ดํฐ์ ์ ๊ทผํ๋์ง ๋ชจ๋ ๊ธฐ๋กํด์ผ ํด. ๋์ค์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ถ์ ํ ์ ์์ด์ผ ํ๊ฑฐ๋ . AWS CloudTrail, Azure Monitor ๊ฐ์ ์๋น์ค๋ฅผ ํ์ฉํ๋ฉด ๋ผ.
๋ฐ์ดํฐ ํ์ง ๊ด๋ฆฌ
"Garbage In, Garbage Out"์ด๋ผ๋ ๋ง ๋ค์ด๋ดค์ง? ์ฐ๋ ๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ฉด ์ฐ๋ ๊ธฐ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค๋ ๊ฑฐ์ผ. ์๋ฌด๋ฆฌ ์ข์ ์๊ณ ๋ฆฌ์ฆ์ ์จ๋ ๋ฐ์ดํฐ ํ์ง์ด ๋์๋ฉด ์์ฉ์์ด ใ
ใ
๋ฐ์ดํฐ ํ์ง์ 6๊ฐ์ง ์ฐจ์:
1. ์ ํ์ฑ(Accuracy): ๋ฐ์ดํฐ๊ฐ ์ค์ ๊ฐ๊ณผ ์ผ์นํ๋๊ฐ?
2. ์์ ์ฑ(Completeness): ํ์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์๋๊ฐ?
3. ์ผ๊ด์ฑ(Consistency): ์ฌ๋ฌ ๊ณณ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์๋ก ์ผ์นํ๋๊ฐ?
4. ์ ์์ฑ(Timeliness): ๋ฐ์ดํฐ๊ฐ ์ต์ ์ธ๊ฐ?
5. ์ ํจ์ฑ(Validity): ๋ฐ์ดํฐ๊ฐ ์ ์๋ ํ์๊ณผ ๊ท์น์ ๋ฐ๋ฅด๋๊ฐ?
6. ์ ์ผ์ฑ(Uniqueness): ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ์๋๊ฐ?
๋ฐ์ดํฐ ํ์ง์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ:
โข ๋ฐ์ดํฐ ํ๋กํ์ผ๋ง: ๋ฐ์ดํฐ์ ํต๊ณ์ ํน์ฑ ๋ถ์. ํ๊ท , ๋ถ์ฐ, ๊ฒฐ์ธก์น ๋น์จ ๋ฑ
โข ๋ฐ์ดํฐ ๊ฒ์ฆ ๊ท์น: ์
๋ ฅ ์์ ์ ๊ฒ์ฆ. ์๋ฅผ ๋ค์ด ๋์ด๋ 0-150 ์ฌ์ด์ฌ์ผ ํ๋ค๋ ๊ท์น
โข ์ด์์น ํ์ง: ํต๊ณ์ ๋ฐฉ๋ฒ์ด๋ ๋จธ์ ๋ฌ๋์ผ๋ก ์ด์ํ ๋ฐ์ดํฐ ์ฐพ๊ธฐ
โข ๋ฐ์ดํฐ ์ ์ : ์ค๋ฅ ์์ , ์ค๋ณต ์ ๊ฑฐ, ํ์คํ ๋ฑ
โข Great Expectations: Python ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ฒ์ฆ ํ๋ ์์ํฌ
โข Talend Data Quality: ์์ฉ ๋ฐ์ดํฐ ํ์ง ๊ด๋ฆฌ ๋๊ตฌ
โข AWS Glue DataBrew: ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ ์ ์๋น์ค
๐ ์ฑ๋ฅ ์ต์ ํ ์ ๋ต
๋ฐ์ดํฐ ์์ถ
๋น
๋ฐ์ดํฐ๋ ์ฉ๋์ด ํฌ๋๊น ์์ถ์ด ์์ฒญ ์ค์ํด! ์์ถํ๋ฉด ์ ์ฅ ๊ณต๊ฐ๋ ์ ์ฝ๋๊ณ , ๋คํธ์ํฌ ์ ์ก๋ ๋นจ๋ผ์ง๊ณ , I/O๋ ์ค์ด๋ค์ด.
์ฃผ์ ์์ถ ์๊ณ ๋ฆฌ์ฆ:
โข Gzip: ์์ถ๋ฅ ์ข์(70-80%), ์๋๋ ๋ณดํต. CPU๋ฅผ ์ข ๋ง์ด ์จ
โข Snappy: ์์ถ๋ฅ ์ ๋ฎ์(50-60%), ์๋ ์์ฒญ ๋น ๋ฆ. Hadoop์์ ๋ง์ด ์จ
โข LZ4: Snappy๋ณด๋ค ๋ ๋น ๋ฆ. ์ค์๊ฐ ์ฒ๋ฆฌ์ ์ ํฉ
โข Zstandard: ์์ถ๋ฅ ๊ณผ ์๋์ ๊ท ํ์ด ์ข์. ์ต๊ทผ ์ธ๊ธฐ ์์น ์ค
ํ์ผ ํฌ๋งท๋ ์ค์ํด:
โข Parquet: ์ปฌ๋ผ ๊ธฐ๋ฐ ํฌ๋งท. ๋ถ์ ์ฟผ๋ฆฌ์ ์ต์ ํ. ์์ถ๋ฅ ๋ ์ข์
โข ORC: Parquet๊ณผ ๋น์ทํ๋ฐ Hive์ ์ต์ ํ
โข Avro: ๋ก์ฐ ๊ธฐ๋ฐ ํฌ๋งท. ์คํค๋ง ์งํ(Schema Evolution)์ ๊ฐํจ
์ค์ ๊ฒฝํ์ Parquet + Snappy ์กฐํฉ์ด ๊ฐ์ฅ ๋ฌด๋ํด. ์์ถ๋ฅ ๋ ๊ด์ฐฎ๊ณ ์ฟผ๋ฆฌ ์ฑ๋ฅ๋ ์ข๊ฑฐ๋ !
ํํฐ์ ๋ ์ ๋ต
๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋๋๋๋์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ์์ฒญ ๋ฌ๋ผ์ ธ. ์๋ชป ํํฐ์
๋ํ๋ฉด ์ฟผ๋ฆฌํ ๋ ๋ชจ๋ ํํฐ์
์ ๋ค ์ฝ์ด์ผ ํด์ ๋๋ ค ใ
ใ
์๊ฐ ๊ธฐ๋ฐ ํํฐ์
๋
๊ฐ์ฅ ํํ ๋ฐฉ๋ฒ์ด์ผ. ๋ ์ง๋ณ๋ก ํํฐ์
์ ๋๋๋ ๊ฑฐ์ง.
์์: /data/year=2024/month=01/day=15/
์ด๋ ๊ฒ ํ๋ฉด ํน์ ๋ ์ง ๋ฐ์ดํฐ๋ง ์กฐํํ ๋ ํด๋น ํํฐ์
๋ง ์ฝ์ผ๋ฉด ๋ผ. ์์ฒญ ๋น ๋ฅด์ง!
ํด์ ํํฐ์
๋
ํค ๊ฐ์ ํด์ํด์ ํํฐ์
๊ฒฐ์ . ๋ฐ์ดํฐ๊ฐ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ๋๋ ์ฅ์ ์ด ์์ด.
๋ฒ์ ํํฐ์
๋
๊ฐ์ ๋ฒ์๋ก ํํฐ์
๋๋. ์๋ฅผ ๋ค์ด ๋์ด๋๋ณ๋ก 10-19, 20-29, 30-39 ์ด๋ฐ ์.
๋ณตํฉ ํํฐ์
๋
์ฌ๋ฌ ๊ธฐ์ค์ ์กฐํฉ. ์๋ฅผ ๋ค์ด ๋ ์ง + ์ง์ญ์ผ๋ก ํํฐ์
๋ํ๋ฉด "2024๋
1์ ์์ธ ๋ฐ์ดํฐ"๋ง ๋น ๋ฅด๊ฒ ์กฐํ ๊ฐ๋ฅ!
์บ์ฑ๊ณผ ์ธ๋ฑ์ฑ
์บ์ฑ
์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด๋๋ ๊ฑฐ์ผ. Spark์์๋ .cache()๋ .persist()๋ฅผ ์ฌ์ฉํด.
์๋ฅผ ๋ค์ด ์ฌ๋ฌ ๋ฒ ์กฐ์ธํด์ผ ํ๋ ์์ ํ
์ด๋ธ์ด ์๋ค๋ฉด ์บ์ฑํ๋ ๊ฒ ์ข์. ๋งค๋ฒ ๋์คํฌ์์ ์ฝ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฑฐ๋ !
์ธ๋ฑ์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ๋ฑ์ค์ฒ๋ผ, ๋น
๋ฐ์ดํฐ์๋ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ์ ์์ด.
โข Bloom Filter: ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ๋น ๋ฅด๊ฒ ํ์ธ. ํ์ผ์ ์ฝ๊ธฐ ์ ์ ํํฐ๋ง ๊ฐ๋ฅ
โข Zone Map: ๊ฐ ๋ธ๋ก์ ์ต์/์ต๋ ๊ฐ ์ ์ฅ. ๋ฒ์ ์ฟผ๋ฆฌ ์ต์ ํ
โข Bitmap Index: ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ์ปฌ๋ผ(์ฑ๋ณ, ๋ฑ๊ธ ๋ฑ)์ ํจ๊ณผ์
โ ์์ถ ํ์ฑํ (Snappy ์ถ์ฒ)
โ ํํฐ์ ๋ ์ ๋ต ์๋ฆฝ
โ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ์บ์ฑ
โ ๋ถํ์ํ ์ปฌ๋ผ ์ฝ์ง ์๊ธฐ (์ปฌ๋ผ ํ๋ฃจ๋)
โ ์กฐ์ธ ์์ ์ต์ ํ (์์ ํ ์ด๋ธ์ ๋จผ์ )
โ ๋ธ๋ก๋์บ์คํธ ์กฐ์ธ ํ์ฉ
โ ์ ์ ํ ํํฐ์ ๊ฐ์ ์ค์
โ ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ต์ ํ
๐ ์ค์ ํ๋ก์ ํธ ์ฌ๋ก
์ฌ๋ก 1: ์ค์๊ฐ ์ถ์ฒ ์์คํ
์จ๋ผ์ธ ์ผํ๋ชฐ์ ์ค์๊ฐ ์ํ ์ถ์ฒ ์์คํ
์ ๋ง๋ ๋ค๊ณ ํด๋ณด์.
์ํคํ
์ฒ:
1. ์ฌ์ฉ์ ํ๋ ๋ฐ์ดํฐ(ํด๋ฆญ, ์กฐํ, ๊ตฌ๋งค)๋ฅผ Kafka๋ก ์์ง
2. Flink๋ก ์ค์๊ฐ ์คํธ๋ฆผ ์ฒ๋ฆฌ
3. Redis์ ์ค์๊ฐ ์ถ์ฒ ๊ฒฐ๊ณผ ์ ์ฅ
4. ๋ฐฐ์น๋ก Spark๋ฅผ ์ฌ์ฉํด ํ์
ํํฐ๋ง ๋ชจ๋ธ ํ์ต
5. ํ์ต๋ ๋ชจ๋ธ์ Flink์ ๋ฐฐํฌ
๊ธฐ์ ์คํ:
โข ๋ฐ์ดํฐ ์์ง: Kafka
โข ์ค์๊ฐ ์ฒ๋ฆฌ: Flink
โข ๋ฐฐ์น ์ฒ๋ฆฌ: Spark
โข ์ ์ฅ์: S3 (์๋ณธ ๋ฐ์ดํฐ), Redis (์ค์๊ฐ ๊ฒฐ๊ณผ)
โข ๋ชจ๋ธ ํ์ต: Spark MLlib
์ฑ๊ณผ:
โข ์ถ์ฒ ์๋ต ์๊ฐ: 50ms ์ดํ
โข ํด๋ฆญ๋ฅ (CTR) 30% ํฅ์
โข ์ ํ์จ 15% ์ฆ๊ฐ
์ด๋ฐ ์์คํ
์ ๊ตฌ์ถํ๋ฉด ์ฌ์ฉ์๊ฐ ์ํ์ ํด๋ฆญํ๋ ์๊ฐ ์ค์๊ฐ์ผ๋ก ๊ด๋ จ ์ํ์ ์ถ์ฒํ ์ ์์ด. ์๋ง์กด์ด๋ ๋ทํ๋ฆญ์ค๊ฐ ๋ฐ๋ก ์ด๋ฐ ๋ฐฉ์์ ์ฐ์ง!
์ฌ๋ก 2: IoT ์ผ์ ๋ฐ์ดํฐ ๋ถ์
์ค๋งํธ ํฉํ ๋ฆฌ์์ ์์ฒ ๊ฐ์ ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ๋ ์์คํ
์ด์ผ.
์๊ตฌ์ฌํญ:
โข ์ผ์ 10,000๊ฐ์์ ์ด๋น 100,000๊ฐ ์ด๋ฒคํธ ๋ฐ์
โข ์ด์ ์งํ ์ค์๊ฐ ํ์ง
โข ์ฅ๋น ๊ณ ์ฅ ์์ธก
โข ๊ณผ๊ฑฐ ๋ฐ์ดํฐ ๋ถ์์ ํตํ ์ต์ ํ
์๋ฃจ์
:
1. ์ผ์ ๋ฐ์ดํฐ๋ฅผ MQTT๋ก ์์งํด์ Kafka๋ก ์ ์ก
2. Kafka Streams๋ก ์ค์๊ฐ ์ด์ ํ์ง
3. ์๊ณ๊ฐ ์ด๊ณผ ์ ์๋ ๋ฐ์ก
4. ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ S3์ ์ ์ฅ (Parquet ํฌ๋งท)
5. ๋งค์ผ ๋ฐค Spark๋ก ๋ฐฐ์น ๋ถ์ ์ํ
6. ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ๋ก ๊ณ ์ฅ ์์ธก
7. ๊ฒฐ๊ณผ๋ฅผ Redshift์ ์ ์ฅํ๊ณ Tableau๋ก ์๊ฐํ
ํจ๊ณผ:
โข ์ฅ๋น ๋ค์ดํ์ 40% ๊ฐ์
โข ์ ์ง๋ณด์ ๋น์ฉ 25% ์ ๊ฐ
โข ์์ฐ์ฑ 20% ํฅ์
์ฌ๋ก 3: ๋ก๊ทธ ๋ถ์ ์์คํ
๋๊ท๋ชจ ์น ์๋น์ค์ ๋ก๊ทธ๋ฅผ ๋ถ์ํ๋ ์์คํ
์ด์ผ. ํ๋ฃจ์ ์ ํ
๋ผ๋ฐ์ดํธ์ ๋ก๊ทธ๊ฐ ์์ฑ๋ผ ใ
ใ
ใ
ELK ์คํ ํ์ฉ:
โข Elasticsearch: ๋ก๊ทธ ์ ์ฅ ๋ฐ ๊ฒ์
โข Logstash: ๋ก๊ทธ ์์ง ๋ฐ ํ์ฑ
โข Kibana: ์๊ฐํ ๋ฐ ๋์๋ณด๋
์ถ๊ฐ ๊ตฌ์ฑ:
โข Filebeat๋ก ๊ฐ ์๋ฒ์์ ๋ก๊ทธ ์์ง
โข Kafka๋ฅผ ์ค๊ฐ ๋ฒํผ๋ก ์ฌ์ฉ (๋ก๊ทธ ์ ์ค ๋ฐฉ์ง)
โข Spark๋ก ๋ฐฐ์น ๋ถ์ (์ฌ์ฉ์ ํ๋ ํจํด, ์๋ฌ ๋ถ์)
โข S3์ ์ฅ๊ธฐ ๋ณด๊ด (Glacier๋ก ์์นด์ด๋น)
ํ์ฉ ์ฌ๋ก:
โข ์ค์๊ฐ ์๋ฌ ๋ชจ๋ํฐ๋ง
โข ์ฌ์ฉ์ ํ๋ ๋ถ์
โข ๋ณด์ ์ด๋ฒคํธ ํ์ง
โข ์ฑ๋ฅ ๋ณ๋ชฉ ์ง์ ํ์
โข A/B ํ
์คํธ ๊ฒฐ๊ณผ ๋ถ์
๐ฎ ๋ฏธ๋ ํธ๋ ๋์ ์ ๋ง
์๋ฒ๋ฆฌ์ค ๋น ๋ฐ์ดํฐ
์์ฆ ๋์ธ๋ ์๋ฒ๋ฆฌ์ค(Serverless)์ผ! ์๋ฒ๋ฅผ ์ง์ ๊ด๋ฆฌํ ํ์ ์์ด ์ฝ๋๋ง ์์ฑํ๋ฉด ๋๋ ๊ฑฐ์ง.
์๋ฒ๋ฆฌ์ค ๋น
๋ฐ์ดํฐ ์๋น์ค:
โข AWS Lambda + Athena: S3 ๋ฐ์ดํฐ๋ฅผ SQL๋ก ์ฟผ๋ฆฌ
โข Google BigQuery: ์์ ๊ด๋ฆฌํ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค
โข Azure Synapse Serverless: ์จ๋๋งจ๋ ์ฟผ๋ฆฌ ์๋น์ค
โข Snowflake: ์๋ ์ค์ผ์ผ๋ง ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค
์ฅ์ :
โข ์ธํ๋ผ ๊ด๋ฆฌ ๋ถํ์
โข ์ฌ์ฉํ ๋งํผ๋ง ๊ณผ๊ธ
โข ์๋ ์ค์ผ์ผ๋ง
โข ๋น ๋ฅธ ์์ ๊ฐ๋ฅ
๋จ์ :
โข ๋น์ฉ ์์ธก์ด ์ด๋ ค์ธ ์ ์์
โข ๋ฒค๋ ์ข
์์ฑ
โข ์ปค์คํฐ๋ง์ด์ง ์ ํ
๊ฐ์ธ์ ์ผ๋ก ์คํํธ์
์ด๋ ์ค์๊ธฐ์
์ ์๋ฒ๋ฆฌ์ค๋ก ์์ํ๋ ๊ฒ ์ข๋ค๊ณ ๋ด. ์ด๊ธฐ ํฌ์ ๋น์ฉ์ด ๊ฑฐ์ ์์ผ๋๊น!
AI/ML๊ณผ์ ํตํฉ
๋น
๋ฐ์ดํฐ์ ์ธ๊ณต์ง๋ฅ์ ๊ฒฐํฉ์ด ์ ์ ๋ ์ค์ํด์ง๊ณ ์์ด. MLOps๋ผ๋ ๊ฐ๋
๋ ๋ฑ์ฅํ์ง.
MLOps ํ์ดํ๋ผ์ธ:
1. ๋ฐ์ดํฐ ์์ง ๋ฐ ์ ์ฒ๋ฆฌ (Airflow, Prefect)
2. ํผ์ฒ ์์ง๋์ด๋ง (Feast, Tecton)
3. ๋ชจ๋ธ ํ์ต (TensorFlow, PyTorch)
4. ๋ชจ๋ธ ๋ฐฐํฌ (MLflow, Kubeflow)
5. ๋ชจ๋ํฐ๋ง ๋ฐ ์ฌํ์ต (Prometheus, Grafana)
AutoML๋ ๋ฐ์ ํ๊ณ ์์ด. Google AutoML, H2O.ai ๊ฐ์ ๋๊ตฌ๋ค์ด ์๋์ผ๋ก ์ต์ ์ ๋ชจ๋ธ์ ์ฐพ์์ฃผ์ง. ๋ฐ์ดํฐ ์ฌ์ด์ธํฐ์คํธ๊ฐ ์๋์ด๋ ๋จธ์ ๋ฌ๋์ ํ์ฉํ ์ ์๊ฒ ๋๋ ๊ฑฐ์ผ!
์ค์๊ฐ ML ์ถ๋ก ๋ ์ค์ํ ํธ๋ ๋์ผ. ๋ชจ๋ธ์ ํ์ตํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ์ค์๊ฐ์ผ๋ก ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํด์ผ ํ๊ฑฐ๋ . Kafka + Flink + TensorFlow Serving ์กฐํฉ์ ๋ง์ด ์จ.
์ฃ์ง ์ปดํจํ
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ฐ๋๋ก ๋ณด๋ด๋ ๊ฒ ์๋๋ผ, ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๋ ๊ณณ(์ฃ์ง)์์ ์ฒ๋ฆฌํ๋ ๊ฑฐ์ผ.
์ ์ฃ์ง ์ปดํจํ
์ด ํ์ํ ๊น?
โข ๋คํธ์ํฌ ๋์ญํญ ์ ์ฝ
โข ์ง์ฐ ์๊ฐ ๊ฐ์
โข ํ๋ผ์ด๋ฒ์ ๋ณดํธ
โข ์คํ๋ผ์ธ ๋์ ๊ฐ๋ฅ
์๋ฅผ ๋ค์ด ์์จ์ฃผํ์ฐจ๋ ์ค์๊ฐ ํ๋จ์ด ํ์ํ์์? ํด๋ผ์ฐ๋๋ก ๋ฐ์ดํฐ ๋ณด๋ด๊ณ ์๋ต ๋ฐ์ผ๋ฉด ๋๋ฌด ๋๋ ค. ๊ทธ๋์ ์ฐจ๋ ๋ด๋ถ์์ ์ง์ ์ฒ๋ฆฌํ๋ ๊ฑฐ์ง!
์ฃ์ง ์ปดํจํ
๊ธฐ์ :
โข AWS IoT Greengrass
โข Azure IoT Edge
โข Google Cloud IoT Edge
โข Apache EdgeX Foundry
๋ฏธ๋์๋ ํด๋ผ์ฐ๋์ ์ฃ์ง๊ฐ ํ์ด๋ธ๋ฆฌ๋๋ก ๋์ํ ๊ฑฐ์ผ. ๊ฐ๋จํ ์ฒ๋ฆฌ๋ ์ฃ์ง์์, ๋ณต์กํ ๋ถ์์ ํด๋ผ์ฐ๋์์ ํ๋ ์์ผ๋ก!
๋ฐ์ดํฐ ๋ฉ์ (Data Mesh)
์ต๊ทผ ๋ ์ค๋ฅด๋ ๊ฐ๋
์ธ๋ฐ, ์ค์ ์ง์ค์ ๋ฐ์ดํฐ ํ๋ซํผ ๋์ ๋๋ฉ์ธ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ๊ด๋ฆฌํ๋ ๊ฑฐ์ผ.
Data Mesh์ 4๊ฐ์ง ์์น:
1. Domain-oriented decentralization
๊ฐ ๋๋ฉ์ธ(๋ง์ผํ
, ์์
, ์ ํ ๋ฑ)์ด ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ๊ด๋ฆฌ
2. Data as a product
๋ฐ์ดํฐ๋ฅผ ์ ํ์ฒ๋ผ ์ทจ๊ธ. ํ์ง, ๋ฌธ์ํ, SLA ๋ณด์ฅ
3. Self-serve data infrastructure
๊ฐ ํ์ด ์ค์ค๋ก ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ ์ ์๋ ํ๋ซํผ ์ ๊ณต
4. Federated computational governance
์ค์์์ ํ์ค๊ณผ ์ ์ฑ
์ ์ ํ๋, ์คํ์ ๊ฐ ๋๋ฉ์ธ์์
์์ง ์ด๊ธฐ ๋จ๊ณ์ง๋ง, ๋๊ท๋ชจ ์กฐ์ง์์๋ ์ ์ ๋ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์์ด. ์ ํต์ ์ธ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค๋ ๋ฐ์ดํฐ ๋ ์ดํฌ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ ์ ์๊ฑฐ๋ !
๐ ํ์ต ๋ก๋๋งต๊ณผ ์ปค๋ฆฌ์ด ํจ์ค
๋น ๋ฐ์ดํฐ ์์ง๋์ด๊ฐ ๋๋ ค๋ฉด?
๋น
๋ฐ์ดํฐ ๋ถ์ผ๋ ์ง์
์ฅ๋ฒฝ์ด ์ข ์์ด. ๋ฐฐ์์ผ ํ ๊ฒ ๋ง๊ฑฐ๋ ใ
ใ
ใ
ํ์ง๋ง ์ฒด๊ณ์ ์ผ๋ก ์ ๊ทผํ๋ฉด ์ถฉ๋ถํ ๊ฐ๋ฅํด!
1๋จ๊ณ: ๊ธฐ์ด ๋ค์ง๊ธฐ (3-6๊ฐ์)
โข ํ๋ก๊ทธ๋๋ฐ: Python ๋๋ Scala ํ์. Java๋ ์๋ฉด ์ข์
โข SQL: ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ๊ธฐ๋ณธ. ๊ณ ๊ธ ์ฟผ๋ฆฌ๊น์ง ๋ง์คํฐ
โข ๋ฆฌ๋
์ค: ์ปค๋งจ๋๋ผ์ธ ์ฌ์ฉ๋ฒ, ์ ์คํฌ๋ฆฝํธ
โข Git: ๋ฒ์ ๊ด๋ฆฌ๋ ํ์
โข ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ: ๊ธฐ๋ณธ์ ์ธ CS ์ง์
2๋จ๊ณ: ๋น
๋ฐ์ดํฐ ๊ธฐ์ ํ์ต (6-12๊ฐ์)
โข Hadoop ์ํ๊ณ: HDFS, MapReduce, YARN
โข Spark: RDD, DataFrame, Spark SQL
โข Kafka: ๋ฉ์์ง, ์คํธ๋ฆฌ๋ฐ
โข NoSQL: MongoDB, Cassandra, HBase ์ค ํ๋
โข ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค: Hive, Presto ๋ฑ
3๋จ๊ณ: ํด๋ผ์ฐ๋์ ์ค์ (6-12๊ฐ์)
โข AWS/GCP/Azure ์ค ํ๋ ์ ํํด์ ๊น๊ฒ ํ๊ธฐ
โข Docker & Kubernetes: ์ปจํ
์ด๋ ๊ธฐ์
โข Airflow: ์ํฌํ๋ก์ฐ ๊ด๋ฆฌ
โข ์ค์ ํ๋ก์ ํธ: ํฌํธํด๋ฆฌ์ค ๋ง๋ค๊ธฐ
โข ์๊ฒฉ์ฆ: AWS Certified Data Analytics, GCP Professional Data Engineer ๋ฑ
4๋จ๊ณ: ์ ๋ฌธ์ฑ ๊ฐํ (๊ณ์)
โข ๋จธ์ ๋ฌ๋: ๋ฐ์ดํฐ ๊ณผํ ์ง์
โข ์คํธ๋ฆผ ์ฒ๋ฆฌ: Flink, Kafka Streams ์ฌํ
โข ๋ฐ์ดํฐ ๊ฑฐ๋ฒ๋์ค: ๋ณด์, ํ์ง ๊ด๋ฆฌ
โข ์ํคํ
์ฒ ์ค๊ณ: ์์คํ
์ค๊ณ ๋ฅ๋ ฅ
โข "Designing Data-Intensive Applications" - Martin Kleppmann
โข "Spark: The Definitive Guide" - Bill Chambers, Matei Zaharia
โข "Streaming Systems" - Tyler Akidau
์จ๋ผ์ธ ๊ฐ์:
โข Coursera: Big Data Specialization (UC San Diego)
โข Udacity: Data Engineer Nanodegree
โข DataCamp: Data Engineer Track
์ค์ต ํ๋ซํผ:
โข Databricks Community Edition (๋ฌด๋ฃ Spark ํ๊ฒฝ)
โข AWS Free Tier (1๋ ๋ฌด๋ฃ)
โข Google Cloud Free Tier
์ปค๋ฆฌ์ด ํจ์ค
๋น
๋ฐ์ดํฐ ๋ถ์ผ์ ์ปค๋ฆฌ์ด๋ ๋ค์ํด:
1. ๋ฐ์ดํฐ ์์ง๋์ด (Data Engineer)
๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ, ETL ๊ฐ๋ฐ, ์ธํ๋ผ ๊ด๋ฆฌ
์ฐ๋ด: ์ฃผ๋์ด 4,000๋ง์~, ์๋์ด 8,000๋ง์~
2. ๋ฐ์ดํฐ ์ํคํ
ํธ (Data Architect)
์ ์ฒด ๋ฐ์ดํฐ ์์คํ
์ค๊ณ, ๊ธฐ์ ์ ํ, ํ์ค ์๋ฆฝ
์ฐ๋ด: 8,000๋ง์~1์ต 5,000๋ง์
3. ๋น
๋ฐ์ดํฐ ํ๋ซํผ ์์ง๋์ด
Hadoop, Spark ํด๋ฌ์คํฐ ์ด์, ์ฑ๋ฅ ์ต์ ํ
์ฐ๋ด: 5,000๋ง์~1์ต์
4. ์คํธ๋ฆผ ์ฒ๋ฆฌ ์์ง๋์ด
์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์คํ
๊ฐ๋ฐ
์ฐ๋ด: 6,000๋ง์~1์ต 2,000๋ง์
5. MLOps ์์ง๋์ด
๋จธ์ ๋ฌ๋ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ, ๋ชจ๋ธ ๋ฐฐํฌ ์๋ํ
์ฐ๋ด: 6,000๋ง์~1์ต 3,000๋ง์
์์ฆ์ ๋ฐ์ดํฐ ์์ง๋์ด ์์๊ฐ ์์ฒญ๋. ๋ฐ์ดํฐ ์ฌ์ด์ธํฐ์คํธ๋ณด๋ค ์คํ๋ ค ๋ ๋ง์ด ์ฐพ๋ ๊ฒ ๊ฐ์. ๋ฐ์ดํฐ ๊ณผํ์๊ฐ ๋ถ์ํ ๋ฐ์ดํฐ๋ฅผ ์ค๋นํด์ฃผ๋ ์ฌ๋์ด ํ์ํ๋๊น!
์ฌ๋ฅ๋ท์์ ๋ฉํ ๋ง ๋ฐ๊ธฐ
ํผ์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ๋งํ๋ ๋ถ๋ถ์ด ๋ง์. ํนํ ์ค๋ฌด ๊ฒฝํ์ด ์์ผ๋ฉด ์ด๋ค ๊ธฐ์ ์ ์ด๋ป๊ฒ ์จ์ผ ํ ์ง ๊ฐ์ด ์ ์ค์์?
์ฌ๋ฅ๋ท์์๋ ํ์ง ๋น
๋ฐ์ดํฐ ์์ง๋์ด๋ค์ด ๋ฉํ ๋ง์ ์ ๊ณตํด. ์ค์ ํ๋ก์ ํธ ๊ฒฝํ์ ๊ณต์ ํ๊ณ , ํฌํธํด๋ฆฌ์ค ๋ง๋๋ ๊ฒ๋ ๋์์ฃผ์ง. ์ทจ์
์ค๋นํ๋ ์ฌ๋๋คํํ
์ง์ง ๋์ ๋ง์ด ๋ผ!
ํนํ ์ด๋ฐ ๋ถ๋ถ์์ ๋ฉํ ๋ง์ด ์ ์ฉํด:
โข ํ์ต ๋ก๋๋งต ์ค๊ณ
โข ํ๋ก์ ํธ ์์ด๋์ด ๋ฐ ๊ตฌํ ๋ฐฉ๋ฒ
โข ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ์ต์ ํ
โข ๋ฉด์ ์ค๋น ๋ฐ ์ด๋ ฅ์ ์์ฑ
โข ์ค๋ฌด ๋
ธํ์ฐ ์ ์
ํผ์ 1๋
๊ฑธ๋ฆด ๊ฑธ ๋ฉํ ๋ง ๋ฐ์ผ๋ฉด 6๊ฐ์ ๋ง์ ๋๋ผ ์ ์์ด. ์ํ์ฐฉ์ค๋ฅผ ์ค์ผ ์ ์๊ฑฐ๋ ใ
ใ
๐ฏ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
์... ์ฌ๊ธฐ๊น์ง ์ฝ์๋ค๋ฉด ์ง์ง ๋๋จํด! ๐ ๋น
๋ฐ์ดํฐ ๋ถ์ฐ ์ปดํจํ
๊ณผ ํด๋ผ์ฐ๋ ์ํคํ
์ฒ์ ๋ํด ๊ฝค ๋ง์ ๋ด์ฉ์ ๋ค๋ค์ง?
ํต์ฌ๋ง ๋ค์ ์ ๋ฆฌํด๋ณผ๊ฒ:
โ
๋ถ์ฐ ์ปดํจํ
์ ํ์์ฑ
๋น
๋ฐ์ดํฐ๋ ํ ๋์ ์ปดํจํฐ๋ก ์ฒ๋ฆฌ ๋ถ๊ฐ๋ฅ. ์ฌ๋ฌ ๋๋ฅผ ์ฐ๊ฒฐํด์ ๋ณ๋ ฌ ์ฒ๋ฆฌํด์ผ ํด.
โ
์ฃผ์ ๊ธฐ์ ์คํ
Hadoop, Spark, Kafka, Flink ๋ฑ. ๊ฐ๊ฐ์ ํน์ฑ์ ์ดํดํ๊ณ ์ํฉ์ ๋ง๊ฒ ์ ํ.
โ
ํด๋ผ์ฐ๋์ ์ค์์ฑ
AWS, GCP, Azure ๊ฐ์ ํด๋ผ์ฐ๋ ํ๋ซํผ์ด ๋น
๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ฏผ์ฃผํํ์ด. ์ด์ ๋๊ตฌ๋ ๋น
๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์์ง.
โ
์ํคํ
์ฒ ํจํด
Lambda, Kappa, Data Lake, Data Warehouse ๋ฑ. ์๊ตฌ์ฌํญ์ ๋ง๋ ์ํคํ
์ฒ ์ ํ์ด ์ค์.
โ
์ฑ๋ฅ ์ต์ ํ
์์ถ, ํํฐ์
๋, ์บ์ฑ, ์ธ๋ฑ์ฑ ๋ฑ ๋ค์ํ ๊ธฐ๋ฒ ํ์ฉ.
โ
๋ฏธ๋ ํธ๋ ๋
์๋ฒ๋ฆฌ์ค, AI/ML ํตํฉ, ์ฃ์ง ์ปดํจํ
, Data Mesh ๋ฑ ๊ณ์ ์งํ ์ค.
๋น
๋ฐ์ดํฐ ๋ถ์ผ๋ ๊ณ์ ๋ฐ์ ํ๊ณ ์์ด. ์๋ก์ด ๊ธฐ์ ์ด ๊ณ์ ๋์ค๋๊น ํ์ ํ์ต์ด ํ์ํ์ง. ํ์ง๋ง ๊ธฐ๋ณธ ์๋ฆฌ๋ ํฌ๊ฒ ์ ๋ฐ๋์ด. ๋ถ์ฐ ์ฒ๋ฆฌ, ๋ณ๋ ฌํ, ํ์ฅ์ฑ ๊ฐ์ ํต์ฌ ๊ฐ๋
์ ์ ์ดํดํ๋ฉด ์๋ก์ด ๊ธฐ์ ๋ ๋นจ๋ฆฌ ๋ฐฐ์ธ ์ ์์ด!
๋ฐ์ดํฐ๋ 21์ธ๊ธฐ์ ์์ ๋ผ๊ณ ํ์์? ๋ฐ์ดํฐ๋ฅผ ์ ๋ค๋ฃจ๋ ๋ฅ๋ ฅ์ ์์ผ๋ก ๋์ฑ ์ค์ํด์ง ๊ฑฐ์ผ. ์ง๊ธ ์์ํ๋ฉด ๋ฆ์ง ์์! ๐ช
๊ถ๊ธํ ์ ์ด ์๊ฑฐ๋ ๋ ๊น์ด ๋ฐฐ์ฐ๊ณ ์ถ๋ค๋ฉด ์ฌ๋ฅ๋ท์์ ์ ๋ฌธ๊ฐ๋ค๊ณผ ์ํตํด๋ด. ์ค๋ฌด ๊ฒฝํ์ด ํ๋ถํ ๋ฉํ ๋ค์ด ๋ง์ผ๋๊น ๋ง์ ๋์์ ๋ฐ์ ์ ์์ ๊ฑฐ์ผ!
์, ์ด์ ์ค์ต์ ์์ํด๋ณผ๊น? ์ด๋ก ๋ง ์๋ ๊ฒ๋ณด๋ค ์ง์ ํด๋ณด๋ ๊ฒ ๋ฐฑ๋ฐฐ ๋ซ์ง ใ
ใ
ใ
์์ ํ๋ก์ ํธ๋ถํฐ ์์ํด์ ์ ์ ํค์๋๊ฐ ๋ด. ํ์ดํ
! ๐
๐ ์ด ๊ธ์ด ๋์์ด ๋์๋์? ๐
๋น
๋ฐ์ดํฐ์ ๋ถ์ฐ ์ปดํจํ
์ ๊ณ์ ์งํํ๋ ๋ถ์ผ์
๋๋ค.
์ค๋ฌด ๊ฒฝํ๊ณผ ์ต์ ํธ๋ ๋๋ฅผ ํจ๊ป ๊ณต์ ํ๋ฉฐ ์ฑ์ฅํด์!
์ฌ๋ฅ๋ท์์ ๋ ๋ง์ ์ง์๊ณผ ๊ฒฝํ์ ๋๋ ๋ณด์ธ์! ๐ก
๊ด๋ จ ํค์๋
๋๊ธ ์์ฑ
์ด ๊ธ์ ๋ํ ์ฌ๋ฌ๋ถ์ ์๊ฐ์ ๋ค๋ ค์ฃผ์ธ์
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค
๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธํด์ฃผ์ธ์.
๋๊ธ 0
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์์ง ๋๊ธ์ด ์์ต๋๋ค.