๐Ÿ“ฆ Parquet๊ณผ Avro๋ž€? โ€” ๋น…๋ฐ์ดํ„ฐ ํŒŒ์ผ ํฌ๋งท ์™„์ „ ์ •๋ณต

GarionNachalยท2026๋…„ 2์›” 23์ผ

databricks

๋ชฉ๋ก ๋ณด๊ธฐ
26/45
post-thumbnail

"๋ฐ์ดํ„ฐ ํฌ๋งท์„ ์ž˜๋ชป ์„ ํƒํ•˜๋ฉด, ์„ฑ๋Šฅ๊ณผ ๋น„์šฉ์ด 10๋ฐฐ ์ฐจ์ด๋‚ฉ๋‹ˆ๋‹ค."
๋น…๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง์—์„œ ํŒŒ์ผ ํฌ๋งท ์„ ํƒ์€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์„ฑํŒจ๋ฅผ ๊ฐ€๋ฆ…๋‹ˆ๋‹ค.


๐Ÿงญ ๋ชฉ์ฐจ

  1. ๋น…๋ฐ์ดํ„ฐ ํŒŒ์ผ ํฌ๋งท์ด๋ž€?
  2. Apache Parquet๋ž€?
  3. Apache Avro๋ž€?
  4. ํ•ต์‹ฌ ์ฐจ์ด: Row vs Column ์ €์žฅ ๋ฐฉ์‹
  5. ์žฅ๋‹จ์  ์ƒ์„ธ ๋น„๊ต
  6. ํ•œ๋ˆˆ์— ๋ณด๋Š” ๋น„๊ตํ‘œ
  7. ์–ธ์ œ ๋ฌด์—‡์„ ์จ์•ผ ํ• ๊นŒ?
  8. ์‹ค์ „ ํ™œ์šฉ: ETL ํŒŒ์ดํ”„๋ผ์ธ์—์„œ์˜ ์กฐํ•ฉ
  9. ๊ฒฐ๋ก 

๋น…๋ฐ์ดํ„ฐ ํŒŒ์ผ ํฌ๋งท์ด๋ž€?

๋น…๋ฐ์ดํ„ฐ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ๋Š” ๋‹จ์ˆœํ•œ CSV๋‚˜ JSON์œผ๋กœ ์ €์žฅํ•˜๊ธฐ์—” ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค.
์ˆ˜์‹ญ TB, ์ˆ˜๋ฐฑ PB์— ๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅ ยท ์••์ถ• ยท ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ˆ˜ ํŒŒ์ผ ํฌ๋งท์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ๋น…๋ฐ์ดํ„ฐ ํŒŒ์ผ ํฌ๋งท์œผ๋กœ๋Š” Parquet, Avro, ORC ๋“ฑ์ด ์žˆ์œผ๋ฉฐ,
์ด ๊ธ€์—์„œ๋Š” ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋‘ ํฌ๋งท์ธ Parquet๊ณผ Avro๋ฅผ ๊นŠ์ด ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

Big Data File Formats
โ–ฒ ๋น…๋ฐ์ดํ„ฐ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ํŒŒ์ผ ํฌ๋งท ๋น„๊ต


Apache Parquet๋ž€?

Apache Parquet์€ ์ปฌ๋Ÿผ ๊ธฐ๋ฐ˜(Columnar) ์ €์žฅ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ ํฌ๋งท์ž…๋‹ˆ๋‹ค.
2013๋…„ Twitter์™€ Cloudera๊ฐ€ ๊ณต๋™ ๊ฐœ๋ฐœํ–ˆ์œผ๋ฉฐ, ํ˜„์žฌ ๋น…๋ฐ์ดํ„ฐ ๋ถ„์„์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ ํฌ๋งท์ž…๋‹ˆ๋‹ค.

๐Ÿ—๏ธ ๊ตฌ์กฐ

Parquet์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰(Row) ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ ์—ด(Column) ๋‹จ์œ„๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ:

IDNameAgeCity
101Alice25New York
102Bob30Chicago
103Carol28Seattle

Parquet์ด ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹:

ID:   [101, 102, 103]
Name: [Alice, Bob, Carol]
Age:  [25, 30, 28]
City: [New York, Chicago, Seattle]

๊ฐ ์—ด์ด ํ•จ๊ป˜ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์—, Age ์ปฌ๋Ÿผ๋งŒ ํ•„์š”ํ•œ ์ฟผ๋ฆฌ๋Š” ๋‚˜๋จธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „ํ˜€ ์ฝ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

Parquet Columnar Format
โ–ฒ Parquet ์ปฌ๋Ÿผ ๊ธฐ๋ฐ˜ ์ €์žฅ ๊ตฌ์กฐ

โœจ ์ฃผ์š” ํŠน์ง•

  • ์ปฌ๋Ÿผ ๋‹จ์œ„ ์ €์žฅ: ๋ถ„์„ ์ฟผ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ์ฝ์–ด I/O ์ตœ์†Œํ™”
  • ๋›ฐ์–ด๋‚œ ์••์ถ•๋ฅ : Dictionary Encoding, Run-Length Encoding, Bit-packing ๋“ฑ ๊ณ ๊ธ‰ ์••์ถ• ๊ธฐ๋ฒ• ์ง€์›
  • Predicate Pushdown: ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก ์ž์ฒด๋ฅผ ์Šคํ‚ต
  • ์ค‘์ฒฉ ๊ตฌ์กฐ ์ง€์›: Google Dremel ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์œผ๋กœ ๋ณต์žกํ•œ ์ค‘์ฒฉ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
  • ๊ด‘๋ฒ”์œ„ํ•œ ์ƒํƒœ๊ณ„: Apache Spark, Presto, Hive, Snowflake, BigQuery ๋“ฑ๊ณผ ์™„๋ฒฝ ํ˜ธํ™˜

Apache Avro๋ž€?

Apache Avro๋Š” ํ–‰ ๊ธฐ๋ฐ˜(Row-oriented) ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
2009๋…„ Apache Hadoop ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, ํŠนํžˆ ์ŠคํŠธ๋ฆฌ๋ฐ ํ™˜๊ฒฝ์—์„œ ๊ฐ•์ ์„ ๋ณด์ž…๋‹ˆ๋‹ค.

๐Ÿ—๏ธ ๊ตฌ์กฐ

Avro๋Š” JSON์œผ๋กœ ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•˜๊ณ , ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๋งท์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
์Šคํ‚ค๋งˆ๊ฐ€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ํ—ค๋”์— ํ•จ๊ป˜ ์ €์žฅ๋˜์–ด ์ž๊ธฐ ์„œ์ˆ ์ (Self-describing) ๊ตฌ์กฐ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

Avro๊ฐ€ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹:

[101, Alice, 25, New York]
[102, Bob, 30, Chicago]
[103, Carol, 28, Seattle]

๋ ˆ์ฝ”๋“œ ์ „์ฒด๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋˜๋ฏ€๋กœ, ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Avro Architecture
โ–ฒ Apache Avro ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ

โœจ ์ฃผ์š” ํŠน์ง•

  • ํ–‰ ๋‹จ์œ„ ์ €์žฅ: ๋ ˆ์ฝ”๋“œ ์ „์ฒด ์ฝ๊ธฐ/์“ฐ๊ธฐ์— ์ตœ์ ํ™”
  • ์Šคํ‚ค๋งˆ ์ง„ํ™”(Schema Evolution): ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ•„๋“œ ์ถ”๊ฐ€/์‚ญ์ œ/์ˆ˜์ • ๊ฐ€๋Šฅ
  • ์ปดํŒฉํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๋งท: ๋„คํŠธ์›Œํฌ ์ „์†ก ๋น„์šฉ ์ตœ์†Œํ™”
  • ์–ธ์–ด ์ค‘๋ฆฝ์ : Java, Python, C, C++, C# ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ง€์›
  • Splittable: ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ(Spark, Hadoop)์—์„œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • Apache Kafka ํ‘œ์ค€: ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ์—์„œ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ ํฌ๋งท

Kafka Avro Streaming
โ–ฒ Apache Kafka + Avro๋ฅผ ํ™œ์šฉํ•œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ


ํ•ต์‹ฌ ์ฐจ์ด: Row vs Column ์ €์žฅ ๋ฐฉ์‹

๋‘ ํฌ๋งท์˜ ๊ฐ€์žฅ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋Š” ์ €์žฅ ๋ฐฉ์‹์— ์žˆ์Šต๋‹ˆ๋‹ค.

Row vs Columnar Storage
โ–ฒ ํ–‰ ๊ธฐ๋ฐ˜(Avro) vs ์ปฌ๋Ÿผ ๊ธฐ๋ฐ˜(Parquet) ์ €์žฅ ๋ฐฉ์‹ ๋น„๊ต

์ €์žฅ ๋ฐฉ์‹ํฌ๋งทํŠน์ง•
Row-basedAvroํ•œ ๋ ˆ์ฝ”๋“œ์˜ ๋ชจ๋“  ํ•„๋“œ๊ฐ€ ํ•จ๊ป˜ ์ €์žฅ โ†’ ์“ฐ๊ธฐ ๋น ๋ฆ„
ColumnarParquet๊ฐ™์€ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•จ๊ป˜ ์ €์žฅ โ†’ ๋ถ„์„ ์ฟผ๋ฆฌ ๋น ๋ฆ„

๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ:

  • Avro(ํ–‰ ๊ธฐ๋ฐ˜) = ์—‘์…€์„ ํ•œ ์ค„์”ฉ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹. ํ•œ ์‚ฌ๋žŒ์˜ ์ •๋ณด๋ฅผ ํ†ต์งธ๋กœ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋น ๋ฆ„.
  • Parquet(์ปฌ๋Ÿผ ๊ธฐ๋ฐ˜) = ์—‘์…€์˜ ์—ด์„ ๋”ฐ๋กœ ๋ฌถ์–ด ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹. "๋‚˜์ด" ์—ด ํ•˜๋‚˜๋งŒ ๋ณผ ๋•Œ ์ดˆ๊ณ ์†.

์žฅ๋‹จ์  ์ƒ์„ธ ๋น„๊ต

โœ… Apache Parquet

์žฅ์ 

ํ•ญ๋ชฉ๋‚ด์šฉ
๐Ÿš€ ๋ถ„์„ ์ฟผ๋ฆฌ ์„ฑ๋Šฅํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ์ฝ์–ด I/O๋ฅผ ๋Œ€ํญ ์ ˆ๊ฐ
๐Ÿ’พ ์••์ถ• ํšจ์œจ๋™์ผ ํƒ€์ž… ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ์—ฌ ์žˆ์–ด ์••์ถ•๋ฅ  ํƒ์›” (๋ณดํ†ต CSV ๋Œ€๋น„ 3~10๋ฐฐ)
๐Ÿ“Š OLAP ์ตœ์ ํ™”์ง‘๊ณ„, ํ•„ํ„ฐ๋ง, BI ๋Œ€์‹œ๋ณด๋“œ์— ์ตœ์ 
๐Ÿ” Predicate Pushdown๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ๋ธ”๋ก ์™„์ „ ์Šคํ‚ต
โ˜๏ธ ํด๋ผ์šฐ๋“œ ์นœํ™”์ AWS Athena, Google BigQuery, Snowflake ๊ธฐ๋ณธ ์ง€์›

๋‹จ์ 

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

โœ… Apache Avro

์žฅ์ 

ํ•ญ๋ชฉ๋‚ด์šฉ
โšก ๋น ๋ฅธ ์“ฐ๊ธฐ ์„ฑ๋Šฅํ–‰์„ ์ˆœ์ฐจ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ์“ฐ๊ธฐ/์ง๋ ฌํ™” ์ดˆ๊ณ ์†
๐Ÿ”„ ์Šคํ‚ค๋งˆ ์ง„ํ™”ํ•„๋“œ ์ถ”๊ฐ€/์‚ญ์ œํ•ด๋„ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ์œ ์ง€
๐ŸŒŠ ์ŠคํŠธ๋ฆฌ๋ฐ ํ‘œ์ค€Apache Kafka์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ ์ง๋ ฌํ™” ํฌ๋งท
๐Ÿ“ฆ ์ž๊ธฐ ์„œ์ˆ ์ ์Šคํ‚ค๋งˆ๊ฐ€ ๋ฐ์ดํ„ฐ ๋‚ด๋ถ€์— ํฌํ•จ๋˜์–ด ์ด์‹์„ฑ ํƒ์›”
๐ŸŒ ๋‹ค์–ธ์–ด ์ง€์›Java, Python, C++ ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด ํด๋ผ์ด์–ธํŠธ

๋‹จ์ 

ํ•ญ๋ชฉ๋‚ด์šฉ
๐Ÿ“‰ ๋ถ„์„ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ์ €ํ•˜์ „์ฒด ํ–‰์„ ์ฝ์–ด์•ผ ํ•˜๋ฏ€๋กœ ํŠน์ • ์ปฌ๋Ÿผ ์กฐํšŒ ๋А๋ฆผ
๐Ÿ’พ ์••์ถ• ํšจ์œจ ์ƒ๋Œ€์  ๋‚ฎ์ŒParquet ๋Œ€๋น„ ํŒŒ์ผ ํฌ๊ธฐ ํผ
๐Ÿ” ์ฟผ๋ฆฌ ์ตœ์ ํ™” ์ œํ•œPredicate Pushdown ๋“ฑ ๊ณ ๊ธ‰ ์ตœ์ ํ™” ์–ด๋ ค์›€
๐Ÿ“– ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ๋ถˆ๊ฐ€๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๋งท

ํ•œ๋ˆˆ์— ๋ณด๋Š” ๋น„๊ตํ‘œ

Parquet vs Avro Comparison
โ–ฒ Parquet vs Avro ํ•ต์‹ฌ ๋น„๊ต

๋น„๊ต ํ•ญ๋ชฉApache AvroApache Parquet
์ €์žฅ ๋ฐฉ์‹ํ–‰ ๊ธฐ๋ฐ˜ (Row-oriented)์ปฌ๋Ÿผ ๊ธฐ๋ฐ˜ (Columnar)
ํŒŒ์ผ ํ™•์žฅ์ž.avro.parquet
์ตœ์  ์šฉ๋„์ŠคํŠธ๋ฆฌ๋ฐ, ์ด๋ฒคํŠธ, ์Šคํ‚ค๋งˆ ์ง„ํ™”๋ถ„์„ ์ฟผ๋ฆฌ, ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค
์Šคํ‚ค๋งˆ ์ง„ํ™”โญโญโญ ํƒ์›”โญโญ ์ œํ•œ์ 
์••์ถ• ํšจ์œจโญโญ ๋ณดํ†ตโญโญโญ ํƒ์›”
์ฝ๊ธฐ ์„ฑ๋Šฅโญโญ (์ „์ฒด ํ–‰ ์ฝ๊ธฐ)โญโญโญ (์ปฌ๋Ÿผ ์„ ํƒ ์ฝ๊ธฐ)
์“ฐ๊ธฐ ์„ฑ๋Šฅโญโญโญ ๋น ๋ฆ„โญโญ ๋А๋ฆผ
์ฟผ๋ฆฌ ์ตœ์ ํ™”โญ ์ œํ•œ์ โญโญโญ ํƒ์›”
ํŒŒ์ผ ํฌ๊ธฐ์ƒ๋Œ€์ ์œผ๋กœ ํผ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์Œ
์ค‘์ฒฉ ๋ฐ์ดํ„ฐJSON ์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜Dremel ์ธ์ฝ”๋”ฉ ์ตœ์ ํ™”
์ฃผ์š” ํ”Œ๋žซํผKafka, Hadoop, SparkSpark, Hive, Presto, Snowflake
์ฃผ์š” ์ƒํƒœ๊ณ„์ŠคํŠธ๋ฆฌ๋ฐ, ๋กœ๊ทธ, ์šด์˜ ์‹œ์Šคํ…œ๋ฐ์ดํ„ฐ ๋ ˆ์ดํฌ, BI, ๋ฐฐ์น˜ ๋ถ„์„

์–ธ์ œ ๋ฌด์—‡์„ ์จ์•ผ ํ• ๊นŒ?

๐ŸŸฆ Avro๋ฅผ ์„ ํƒํ•˜์„ธ์š”, ๋งŒ์•ฝ:

โœ… Apache Kafka๋กœ ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ํ•œ๋‹ค
โœ… ์Šคํ‚ค๋งˆ๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๊ณ  ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค
โœ… ์“ฐ๊ธฐ(Write) ์ž‘์—…์ด ์••๋„์ ์œผ๋กœ ๋งŽ๋‹ค
โœ… ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•ด์•ผ ํ•œ๋‹ค
โœ… ๋กœ๊ทธ ์ˆ˜์ง‘, IoT ์„ผ์„œ ๋ฐ์ดํ„ฐ, ์ด๋ฒคํŠธ ์ˆ˜์ง‘์„ ํ•œ๋‹ค
โœ… ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค

๐ŸŸง Parquet์„ ์„ ํƒํ•˜์„ธ์š”, ๋งŒ์•ฝ:

โœ… ๋ฐ์ดํ„ฐ ๋ถ„์„, BI ๋Œ€์‹œ๋ณด๋“œ, OLAP ์ฟผ๋ฆฌ๊ฐ€ ์ฃผ ๋ชฉ์ ์ด๋‹ค
โœ… AWS Athena, BigQuery, Snowflake์—์„œ ์ฟผ๋ฆฌํ•œ๋‹ค
โœ… ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์€ ๋น„์šฉ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค
โœ… ์ฝ๊ธฐ(Read) ์ž‘์—…์ด ์“ฐ๊ธฐ๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ๋‹ค
โœ… Apache Spark๋กœ ๋ฐฐ์น˜ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•œ๋‹ค
โœ… ํŠน์ • ์ปฌ๋Ÿผ๋งŒ ์„ ํƒํ•ด์„œ ์ฟผ๋ฆฌํ•˜๋Š” ํŒจํ„ด์ด ๋งŽ๋‹ค

์‹ค์ „ ํ™œ์šฉ: ETL ํŒŒ์ดํ”„๋ผ์ธ์—์„œ์˜ ์กฐํ•ฉ

์‹ค์ œ ํ˜„์—…์—์„œ๋Š” ๋‘ ํฌ๋งท์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

[์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ˆ˜์ง‘]          [๋ฐฐ์น˜ ๋ถ„์„]
Producer โ†’ Kafka(Avro) โ†’ ETL โ†’ Data Lake(Parquet) โ†’ BI ๋„๊ตฌ
ETL ๋‹จ๊ณ„๊ถŒ์žฅ ํฌ๋งท์ด์œ 
๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ (Ingestion)โœ… Avro์‹ค์‹œ๊ฐ„ Kafka ์ŠคํŠธ๋ฆฌ๋ฐ, ๋น ๋ฅธ ์“ฐ๊ธฐ
์ค‘๊ฐ„ ์ฒ˜๋ฆฌ (Processing)โœ… Avro์Šคํ‚ค๋งˆ ์ง„ํ™” ์œ ์—ฐ์„ฑ ํ™•๋ณด
์ตœ์ข… ์ €์žฅ (Analytics)โœ… Parquet๋น ๋ฅธ ์ฟผ๋ฆฌ, ๋†’์€ ์••์ถ•๋ฅ 

๐Ÿ’ก ์‹ค์ „ ํŒ: Kafka์—์„œ Avro๋กœ ์ˆ˜์ง‘ โ†’ Spark๋กœ ๋ณ€ํ™˜ โ†’ Parquet์œผ๋กœ Data Lake ์ €์žฅ.
์ด ํŒจํ„ด์ด AWS, GCP, Azure ๋ชจ๋‘์—์„œ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค.


Apache Spark์—์„œ์˜ ์ฝ”๋“œ ์˜ˆ์‹œ

Avro ์ฝ๊ธฐ/์“ฐ๊ธฐ

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("AvroExample").getOrCreate()

# Avro ํŒŒ์ผ ์ฝ๊ธฐ
df = spark.read.format("avro").load("data.avro")
df.show()

# DataFrame์„ Avro๋กœ ์ €์žฅ
df.write.format("avro").save("output.avro")

Parquet ์ฝ๊ธฐ/์“ฐ๊ธฐ

# Parquet ํŒŒ์ผ ์ฝ๊ธฐ
df = spark.read.parquet("data.parquet")
df.show()

# DataFrame์„ Parquet์œผ๋กœ ์ €์žฅ
df.write.mode("overwrite").parquet("output.parquet")

โœ๏ธ Spark์—์„œ Parquet์€ ๊ธฐ๋ณธ(default) ์ €์žฅ ํฌ๋งท์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


๊ฒฐ๋ก 

AvroParquet
ํ•œ ์ค„ ์š”์•ฝ์ŠคํŠธ๋ฆฌ๋ฐยท์ง„ํ™”ํ•˜๋Š” ์Šคํ‚ค๋งˆ์˜ ์™•๋ถ„์„ยท์••์ถ• ํšจ์œจ์˜ ์™•
ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ์ง๋ ฌํ™”, ์ŠคํŠธ๋ฆฌ๋ฐ, ์œ ์—ฐ์„ฑ์ปฌ๋Ÿผ ์Šค์บ”, ์••์ถ•, ๋ถ„์„ ์„ฑ๋Šฅ

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

"์ •๋‹ต์€ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ์›Œํฌ๋กœ๋“œ์— ๋งž๋Š” ํฌ๋งท์„ ์„ ํƒํ•˜๋ผ."


๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

profile
AI๋ฅผ ๊ฟˆ๊พธ๋Š” BackEnd๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€