๐ ๋ฐ์ดํฐ ์์ง๋์ด๋ง ๋ฐ ํ๋ซํผ ์ฉ์ด ์ ๋ฆฌ์ง #
โ ํค์๋ ๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๐ 1. ๋ฐ์ดํฐ ์ํคํ ์ฒ & ์ค๊ณ #
ํ/์ด ๊ธฐ๋ฐ (Row vs Column) #
๐ ํต์ฌ ์ ์
- Row-based: ๋ฐ์ดํฐ๋ฅผ ํ ๋จ์๋ก ์ ์ฅ. OLTP ์์คํ ์ ์ต์ ํ๋จ. (e.g. MySQL, PostgreSQL)
- Column-based: ๋ฐ์ดํฐ๋ฅผ ์ด ๋จ์๋ก ์ ์ฅ. OLAP ์์คํ ๋ฐ ๋ถ์์ ์ต์ ํ๋จ.(e.g. Parquet, ORC, ClickHouse)
๐ก ์ค๋ฌด ํฌ์ธํธ
- Row-based: ์ ์ฒด ํ ๋จ์๋ก ์ฝ๊ณ ์ฐ๋ฏ๋ก ์ค์๊ฐ ํธ๋์ญ์ ์ ์ ํฉ
- Column-based: Parquet, ORC, ClickHouse, Druid โ ๋ถ์ ์ฟผ๋ฆฌ์ ์ ๋ฆฌ
- ์์ถ๋ฅ : ์ปฌ๋ผ ๊ธฐ๋ฐ์ด ๋์ผ ๋ฐ์ดํฐ ํ์ ์ฐ์ ์ ์ฅ์ผ๋ก ์์ถ๋ฅ ๋์
- Columnar DB๋ ๋ฒกํฐํ, late materialization ๊ฐ์ ์ฟผ๋ฆฌ ์ต์ ํ ์ ๋ต๊ณผ ๊ถํฉ์ด ์ข์
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “์ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์์๋ ์ปฌ๋ผ ๊ธฐ๋ฐ์ ์ ํธํ๋์?” โ ๋ถ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด I/O ๋น์ฉ ์ต์ํ ๊ฐ๋ฅ
CAP #
๐ ํต์ฌ ์ ์
๋ถ์ฐ ์์คํ ์์๋ ์ธ ๊ฐ์ง ์์ฑ ์ค ๋ ๊ฐ์ง๊น์ง๋ง ๋์์ ๋ณด์ฅํ ์ ์์:
- Consistency (C): ๋ชจ๋ ๋ ธ๋๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
- Availability (A): ๋ชจ๋ ์์ฒญ์ ๋ํด ์๋ต์ ๋ฐํํจ
- Partition Tolerance (P): ๋คํธ์ํฌ ๋จ์ ์ํฉ์์๋ ์์คํ ์ด ์๋ ๊ฐ๋ฅ
๐ก ์ค๋ฌด ํฌ์ธํธ
- Kafka: ์ํฉ๋ณ๋ก CP/AP ์ ํ (๋ธ๋ก์ปค ์ฅ์ ์ CP, ๋คํธ์ํฌ ๋ถํ ์ AP)
- ๋ธ๋ก์ปค ์ฅ์ ์: CP (์ผ๊ด์ฑ ์ฐ์ , ๊ฐ์ฉ์ฑ ์ผ์ ์ ํ)
- ํํฐ์ ๋ถํ ์: AP (๊ฐ์ฉ์ฑ ์ฐ์ , ์ผ๊ด์ฑ eventual)
- Cassandra: AP ์์คํ (๋์ ๊ฐ์ฉ์ฑ, ์ผ์์ ๋ถ์ผ์น ํ์ฉ)
- Zookeeper: CP ์์คํ (์ผ๊ด์ฑ ์ค์ฌ)
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “Kafka๋ CAP์์ ์ด๋ค ์ ํ์ ํ๋์?” โ Partition ์ํฉ์์ Consistency๋ฅผ ์ ์งํ๊ณ Availability๋ฅผ ์ ์ ํฌ์ (CP)
OLTP vs OLAP #
๐ ํต์ฌ ์ ์
- OLTP: ์ค์๊ฐ ํธ๋์ญ์ ์ฒ๋ฆฌ. ๋ค์ค ์ฌ์ฉ์ ํ๊ฒฝ์ ์ ํฉ
- OLAP: ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ง๊ณ ๋ฐ ๋ถ์์ ์ ํฉ. ๋ค์ฐจ์ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ
๐ก ์ค๋ฌด ํฌ์ธํธ
- OLTP: ์ ๊ทํ ์คํค๋ง, ๋ฎ์ ์ง์ฐ, ๊ฐํ ์ผ๊ด์ฑ (์: ์ํ ์์คํ )
- OLAP: ๋น์ ๊ทํ, ๋ฐ์ดํฐ ๋งํธ/์จ์ดํ์ฐ์ค์์ ์ฌ์ฉ (์: ํ๋งค ๋ถ์)
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “OLTP ๋ฐ์ดํฐ๋ฅผ OLAP๋ก ์ด๋ป๊ฒ ๋ณํํ๋์?” โ ETL/ELT๋ก ์ ์ โ ๋ชจ๋ธ๋ง โ ์ ์ฌ
Normalize / Denormalize #
๐ ํต์ฌ ์ ์
- ์ ๊ทํ (Normalization): ๋ฐ์ดํฐ ์ค๋ณต ์ ๊ฑฐ, ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ, ํ ์ด๋ธ ๋ถํด ์ค์ฌ
- ๋น์ ๊ทํ (Denormalization): ์ฟผ๋ฆฌ ์ต์ ํ๋ฅผ ์ํด ์๋์ ์ค๋ณต ํ์ฉ
๐ก ์ค๋ฌด ํฌ์ธํธ
- OLTP ์์คํ : ์ ๊ทํ (๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ ์ฅ ๊ณต๊ฐ ์ ์ฝ)
- OLAP ์์คํ : ๋น์ ๊ทํ (์กฐ์ธ ์ต์ํ๋ก ๋น ๋ฅธ ์ฟผ๋ฆฌ)
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “๋ถ์ ํ๊ฒฝ์์ ๋น์ ๊ทํ๋ฅผ ์ ํํ๋ ์ด์ ๋?” โ ๋ค๋์ ์กฐ์ธ์ ํผํ๊ณ ์ฟผ๋ฆฌ ์๋ต ์๊ฐ์ ์ค์ด๊ธฐ ์ํจ
ELT vs ETL #
๐ ํต์ฌ ์ ์
- ETL: ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ โ ๋ณํ โ ์ ์ฌ (์ ํต์ ์ธ ๋ฐฉ์)
- ELT: ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ โ ์ ์ฌ โ ๋ณํ (ํด๋ผ์ฐ๋ ์๋ ๋ฑ์ฅ)
๐ก ์ค๋ฌด ํฌ์ธํธ
- ETL: Spark, Informatica, Talend ๋ฑ์์ ์ฌ์ฉ
- ELT: BigQuery, Snowflake ๋ฑ์์ Push-down ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
- ELT๋ ์ ์ฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋๊ณ , ์คํ ๋ฆฌ์ง ๊ฐ๊ฒฉ ํ๋ฝ์ผ๋ก ๋ถ๋ด ์ ์
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “ELT๊ฐ ์ต๊ทผ ๋ ์ ํธ๋๋ ์ด์ ๋?” โ Cloud DWH์ ์ฑ๋ฅ ํฅ์ + ์ ์ฅ ๋น์ฉ ํ๋ฝ + ์ ์ฐํ ์ฟผ๋ฆฌ ๋ชจ๋ธ
๋ฐฐ์น vs ์คํธ๋ฆฌ๋ฐ #
๐ ํต์ฌ ์ ์
- ๋ฐฐ์น: ๋ฐ์ดํฐ๊ฐ ์ผ์ ๊ธฐ๊ฐ ๋์ ๋์ ๋ ํ ์ผ๊ด ์ฒ๋ฆฌ
- ์คํธ๋ฆฌ๋ฐ: ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ์๋ง์ ์ค์๊ฐ ์ฒ๋ฆฌ๋จ
๐ก ์ค๋ฌด ํฌ์ธํธ
- ๋ฐฐ์น: ๋๋ ์ฒ๋ฆฌ, ์ ํ์ฑ ์ค์, Spark, Airflow, Hive
- ์คํธ๋ฆฌ๋ฐ: ์ค์๊ฐ ๋ฐ์, Kafka, Flink, Spark Structured Streaming
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “์คํธ๋ฆฌ๋ฐ์ด ํ์ํ ๋ํ์ ์ธ ์ฌ๋ก๋?” โ ์ค์๊ฐ ์ฌ๊ธฐ ํ์ง, ์ค์๊ฐ ๋ก๊ทธ ๋ชจ๋ํฐ๋ง, IoT ๋ฐ์ดํฐ ๋ถ์ ๋ฑ
๋ฉฑ๋ฑ์ฑ(idempotence) #
๐ ํต์ฌ ์ ์
- ๊ฐ์ ์ฐ์ฐ์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํด๋ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ ์ฑ์ง
๐ก ์ค๋ฌด ํฌ์ธํธ
- ETL/ELT ์ฌ์๋ ์ ๋์ผ ๊ฒฐ๊ณผ ๋ณด์ฅ ํ์
- Upsert ๋๋ Merge ์ ๋ต, ๋ฉฑ๋ฑ ํค(idempotent key) ํ์ฉ
๐ฏ ๋ฉด์ ํฌ์ธํธ “์ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์์ ๋ฉฑ๋ฑ์ฑ์ด ์ค์ํ ๊น?” โ ์ฅ์ ๋ฐ์ ์ ์ค๋ณต ์คํ์ ๋ํ ์์ ์ฑ ํ๋ณด๋ฅผ ์ํด ํ์
์ค๋ฉ #
๐ ํต์ฌ ์ ์
- ํ๋์ ํ ์ด๋ธ์ ์ฌ๋ฌ ๋ฌผ๋ฆฌ์ ๋ ธ๋๋ก ๋ถ์ฐํด ์ ์ฅํ์ฌ ํ์ฅ์ฑ๊ณผ ์ฒ๋ฆฌ๋์ ํ๋ณดํ๋ ๋ฐฉ์
๐ก ์ค๋ฌด ํฌ์ธํธ
- ์ค๋ ํค: ๊ท ๋ฑ ๋ถํฌ + ์ฟผ๋ฆฌ ํจ์จ์ฑ ๊ณ ๋ ค
- ํฌ๋ก์ค ์ค๋ ์ฐ์ฐ์ ๋ณต์กํ๊ณ ๋น์ฉ ์ฆ๊ฐ
- MongoDB, Elasticsearch ๋ฑ์์ ๋๋ฆฌ ์ฌ์ฉ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “์ค๋ ํค๋ ์ด๋ป๊ฒ ๊ณ ๋ฅด๋๊ฐ?” โ ๊ท ๋ฑ ๋ถ์ฐ, ๋ถ๋ณ์ฑ, ์ฟผ๋ฆฌ ์ ๊ทผ ํจํด์ ๋ง์กฑํด์ผ ํจ
๋ณต์ #
๐ ํต์ฌ ์ ์
- ๋ฐ์ดํฐ์ ๊ณ ๊ฐ์ฉ์ฑ(HA)์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ณต์์ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ๊ธฐ์
๐ก ์ค๋ฌด ํฌ์ธํธ
- ์ฝ๊ธฐ ํ์ฅ (Read Replica)
- ์ฅ์ ๋ณต๊ตฌ (Failover)
- ์ด์คํ, Multi-region ๋ณต์ ๋ฑ์ผ๋ก ํ์ฉ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “๋ณต์ ์ง์ฐ์ด ๋ฐ์ํ์ ๋ ์ด๋ป๊ฒ ๋์ํ๋์?” โ ์ฝ๊ธฐ ์ผ๊ด์ฑ ์กฐ์ , Staleness ํ์ฉ ์ฌ๋ถ ํ๋จ
Consistency vs Latency ํธ๋ ์ด๋์คํ #
๐ ํต์ฌ ์ ์
- ์ผ๊ด์ฑ ๋ณด์ฅ์ ๊ฐํํ๋ฉด, ์ผ๋ฐ์ ์ผ๋ก ์๋ต ์๊ฐ(latency)์ ๋์ด๋จ
๐ก ์ค๋ฌด ํฌ์ธํธ
- Redis: strong consistency (LAT โ)
- DynamoDB: eventual consistency (LAT โ)
- DB๋ง๋ค ์กฐ์ ๊ฐ๋ฅํ ์ฝ๊ธฐ ์ผ๊ด์ฑ ์ต์ ์กด์ฌ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “๋ถ์ฐ ์บ์ ์์คํ ์์ ์ด๋ค ์ผ๊ด์ฑ ์์ค์ด ํ์ํ๊ฐ์?” โ ์บ์ ํน์ฑ์ latency ์ฐ์ , ์ผ๊ด์ฑ ํฌ์ ๊ฐ๋ฅ
Eventual Consistency #
๐ ํต์ฌ ์ ์
- ์๊ฐ์ด ์ง๋๋ฉด ๊ฒฐ๊ตญ ๋ชจ๋ ๋ณต์ ๋ ธ๋์ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋จ์ ๋ณด์ฅ
๐ก ์ค๋ฌด ํฌ์ธํธ
- DNS, SNS ์ข์์ ์ ๋ฑ ์ค์๊ฐ ์ ํฉ์ฑ ๋ถํ์ํ ์๋น์ค์ ์ ํฉ
- Write Fast, Read Eventually Accurate ์ ๋ต
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “์ต์ข ์ผ๊ด์ฑ์ด ์ ์ฉ๋ ์์คํ ์์๋?” โ SNS ์ข์์ ์, ์ผํ๋ชฐ ์ํ ์ฐ ์ ๋ฑ
Throughput vs Latency #
๐ ํต์ฌ ์ ์
- Throughput: ์ด๋น ์ฒ๋ฆฌ ๊ฐ๋ฅํ ์์ ๋
- Latency: ๋จ์ผ ์์ฒญ ์ฒ๋ฆฌ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ
๐ก ์ค๋ฌด ํฌ์ธํธ
- Throughput ์ค์ฌ: ๋ฐฐ์น ํ์ดํ๋ผ์ธ (Spark)
- Latency ์ค์ฌ: ์ค์๊ฐ ์๋ต (REST API, Kafka)
- Kafka: ํํฐ์ ์ฆ๊ฐ โ ์ฒ๋ฆฌ๋ ์ฆ๊ฐ, ๋จ latency ์ฆ๊ฐ ๊ฐ๋ฅ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “Kafka์์ Throughput์ ๋์ด๋ ๋ฐฉ๋ฒ์?” โ batch.size, linger.ms ์กฐ์ + ์์ถ ํ์ฑํ + ํํฐ์ ์ ์ฆ๊ฐ
๐๏ธ 2. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง & ์คํค๋ง #
Fact & Dimension #
๐ ํต์ฌ ์ ์
- Fact Table: ์์น ๊ธฐ๋ฐ ์ด๋ฒคํธ ๋ฐ์ดํฐ ์ ์ฅ (์ธก์ ๊ฐ, ์งํ ์ค์ฌ)
- Dimension Table: ์์ฑ/๋งฅ๋ฝ ์ ๋ณด ์ ์ฅ (์ ์, ์ค๋ช ์ค์ฌ)
๐ก ์ค๋ฌด ํฌ์ธํธ
- Fact: ์ฅ์๊ฐ ์์ด๋ ๋์ฉ๋ ํ ์ด๋ธ, ์ธ๋ํค๋ก dimension ์ฐธ์กฐ
- Dimension: ๋ถ์ ํธ์ ์ํ ์์ฑ ๋ถ๋ฆฌ (e.g., ์ ํ๋ช , ๊ณ ๊ฐ๊ตฐ ๋ฑ)
- Star Schema ๊ตฌ์ฑ ์ ํ์ ์์
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “Fact Table๊ณผ Dimension Table์ ๊ตฌ๋ถ ๊ธฐ์ค์?” โ ์๊ฐ์ ๋ฐ๋ผ ๋์ ๋๊ณ ์์น ์ค์ฌ์ด๋ฉด Fact, ์ค๋ช ์ ๋ณด๋ Dimension
SCD #
Slowly Changing Dimension
๐ ํต์ฌ ์ ์
- ์๊ฐ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ Dimension ๋ฐ์ดํฐ๋ฅผ ์ถ์ /๊ด๋ฆฌํ๋ ์ ๋ต
๐ก ์ค๋ฌด ํฌ์ธํธ
- SCD Type 1: ๊ฐ ๋ฎ์ด์ฐ๊ธฐ (๊ณผ๊ฑฐ ๋ฌด์)
- SCD Type 2: ๋ณ๊ฒฝ ์ด๋ ฅ row๋ก ์ ์ฅ (์์/์ข ๋ฃ์ผ ์ปฌ๋ผ)
- Iceberg ๋ฑ ํ ์ด๋ธ ํฌ๋งท์์ ๊ตฌํ ์ฉ์ด
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “SCD Type 2์ ์ฅ๋จ์ ์?” โ ์ด๋ ฅ ๋ณด์กด ๊ฐ๋ฅ, ์ฟผ๋ฆฌ ๋ณต์ก๋ ์ฆ๊ฐ
Schema Evolution #
๐ ํต์ฌ ์ ์
- ๋ฐ์ดํฐ ์ ์ฅ ๊ตฌ์กฐ(schema)๊ฐ ์๊ฐ์ ๋ฐ๋ผ ํ์ฅ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋ ์ ์๋๋ก ํ์ฉํ๋ ๊ธฐ๋ฅ
๐ก ์ค๋ฌด ํฌ์ธํธ
- Iceberg, Delta Lake, Avro ๋ฑ์์ ์ง์
- ํ๋ ์ถ๊ฐ/์ญ์ /ํ์ ๋ณ๊ฒฝ ์ ํ์ ํธํ์ฑ ์ ์ง ๊ณ ๋ ค ํ์
- ์คํค๋ง ๋ ์ง์คํธ๋ฆฌ ํ์ฉ ์ ์งํ ์ ์ฑ ๋ช ์ ๊ฐ๋ฅ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “Schema Evolution์ ์์ ํ๊ฒ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์?” โ backward/forward ํธํ ์ ์ฑ ์ ์ + ํ ์คํธ ์๋ํ
Star vs Snowflake #
๐ ํต์ฌ ์ ์
- Star: Fact + ๋จ์ผ ๊ณ์ธต์ Dimension
- Snowflake: Dimension์ ๋ค์ ์ ๊ทํํ์ฌ ๋ณต์กํ ๊ตฌ์กฐ๋ก ๋ถ๋ฆฌ
๐ก ์ค๋ฌด ํฌ์ธํธ
- Star: ๋จ์ํ ๊ตฌ์กฐ, ๋น ๋ฅธ ์ฟผ๋ฆฌ (OLAP ์ ํฉ)
- Snowflake: ๊ณต๊ฐ ํจ์จ, ์ ์ง๊ด๋ฆฌ ํธ์ (์ ๊ทํ ๊ธฐ๋ฐ)
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “Star Schema๋ฅผ ์ค๋ฌด์์ ์ ํธํ๋ ์ด์ ๋?” โ ์กฐ์ธ ์ต์ํ + ์ฌ์ฉ์ ์นํ์ ๊ตฌ์กฐ
๋ฐ์ดํฐ ํ์ ์ต์ ํ #
๐ ํต์ฌ ์ ์
- ์ ๋ฐ๋, ๋ฉ๋ชจ๋ฆฌ, ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๊ณ ๋ คํ์ฌ ๋ฐ์ดํฐ ํ์ ์ ํจ์จ์ ์ผ๋ก ์ ์ํ๋ ์์ ๐ก ์ค๋ฌด ํฌ์ธํธ
- ์ ์/๋ถ๋ฆฌ์ธ โ INT8/BOOLEAN์ผ๋ก ์ต์ ํ
- ๊ณ ์ ๊ฐ ์ ์ ๋ฌธ์์ด โ ENUM ๋๋ Dictionary Encoding
- ๋ ์ง/์๊ฐ โ ์ ์ ๊ธฐ๋ฐ ํ์์คํฌํ ๋ณํ์ผ๋ก ์ ์ฅ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “๋ฐ์ดํฐ ํ์ ์ ์๋ชป ์ ์ํ๋ฉด ์๊ธฐ๋ ๋ฌธ์ ๋?” โ ์ฑ๋ฅ ์ ํ, ์คํ ๋ฆฌ์ง ๋ญ๋น, ์ธ๋ฑ์ค ๋ฌด๋ ฅํ
์คํค๋ง ๋ ์ง์คํธ๋ฆฌ #
๐ ํต์ฌ ์ ์
- ๋ฉ์์ง ์คํค๋ง๋ฅผ ์ค์์์ ๊ด๋ฆฌํ์ฌ ์์ฐ์-์๋น์ ๊ฐ ํธํ์ฑ ๋ณด์ฅ
๐ก ์ค๋ฌด ํฌ์ธํธ
- Kafka + Avro ํตํฉ ์ ๊ฑฐ์ ํ์
- Schema Compatibility ์ ์ฑ ์ค์ (BACKWARD, FORWARD ๋ฑ)
- ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ์๋ ๊ฒ์ฆ ๊ธฐ๋ฅ ํฌํจ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “Schema Registry ์์ ๋ ์๊ธฐ๋ ๋ฌธ์ ๋?” โ ๋ฉ์์ง ํฌ๋งท ๋ถ์ผ์น๋ก ์ธํ ํ์ฑ ์คํจ, ์ญ์ง๋ ฌํ ์๋ฌ
Data Vault #
๐ ํต์ฌ ์ ์
- ์ด๋ ฅ ๋ณด์กด + ํ์ฅ์ฑ + ๊ฐ์ฌ ์ถ์ ์ ๊ณ ๋ คํ ์ํฐํ๋ผ์ด์ฆ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ
๐ก ์ค๋ฌด ํฌ์ธํธ
- Hub (Business Key), Link (๊ด๊ณ), Satellite (์์ฑ ์ด๋ ฅ) ๊ตฌ์กฐ
- ๋ณํ ์ถ์ , SCD๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
- ๋์ ๋์ด๋๋ ๋์ผ๋ ๊ฑฐ๋ฒ๋์ค์ ์ ๋ฆฌ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “Data Vault๊ฐ Star Schema๋ณด๋ค ์ ๋ฆฌํ ์ํฉ์?” โ ๋น๋ฒํ ๊ตฌ์กฐ ๋ณ๊ฒฝ, ์ด๋ ฅ ๊ด๋ฆฌ, ๊ฐ์ฌ๋ฅผ ๊ณ ๋ คํ ๋
๐ง 3. ๋ฐ์ดํฐ ์ฒ๋ฆฌ & ์ต์ ํ #
Backfilling #
๐ ํต์ฌ ์ ์
- ๊ณผ๊ฑฐ์ ๋๋ฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌํ์ ์ผ๋ก ์ฑ์ ๋ฃ๋ ์์ . ์ฃผ๋ก ETL ํ์ดํ๋ผ์ธ ์ค๋จ, ์ ๊ท ํ์ดํ๋ผ์ธ ๊ฐ๋ฐ ์ ์ํ๋จ
๐ก ์ค๋ฌด ํฌ์ธํธ
- ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ํด ํ์ํ ์์ ์ด๋, ์ํ ์ ๊ธฐ์ค ์์ ๋ช ํํ ์ ์ํด์ผ ํจ
- ๋ฉฑ๋ฑ์ฑ ๋ณด์ฅ ํ์ (์ค๋ณต ๋ฐฉ์ง)
- Airflow + Spark๋ก ์๊ฐ ๋ฒ์ ์ง์ ํ์ฌ ์ฌ์ฒ๋ฆฌ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “๋ฐฑํ ์ ์ฃผ์์ฌํญ์ ๋ฌด์์ธ๊ฐ์?” โ ๋ฐ์ดํฐ ์ค๋ณต, ์ง์ฐ ๋ฐ์ดํฐ, ํ์์กด, ์งํ ์๊ณก ๋ฑ์ ๊ณ ๋ คํด์ผ ํจ
ํํฐ์ ๋ #
๐ ํต์ฌ ์ ์
- ํ ์ด๋ธ์ ํน์ ๊ธฐ์ค(์: ๋ ์ง, ์ง์ญ ๋ฑ)์ผ๋ก ๋ถํ ํ์ฌ ์ ์ฅํจ์ผ๋ก์จ ์กฐํ ์ฑ๋ฅ ํฅ์์ ๋๋ชจํ๋ ๊ธฐ๋ฒ
๐ก ์ค๋ฌด ํฌ์ธํธ
- ์๊ฐ ํํฐ์ ๋์ด ๊ฐ์ฅ ์ผ๋ฐ์ (์: dt ์ปฌ๋ผ ๊ธฐ์ค)
- Hive, BigQuery, Iceberg ๋ฑ์์ ๊ธฐ๋ณธ ์ ๊ณต
- ํํฐ์ ํค๋ ์์ฃผ ์ฌ์ฉํ๋ ํํฐ ์กฐ๊ฑด๊ณผ ์ผ์น์์ผ์ผ ํจ๊ณผ์
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “ํํฐ์ ๋์ด ์ ์ค์ํ๊ฐ์?” โ ๋ฐ์ดํฐ ๋ฒ์ ์ ํ โ I/O ์ค์ด๊ณ ์ฟผ๋ฆฌ ์ฑ๋ฅ ํฅ์
CDC #
๐ ํต์ฌ ์ ์
- ์๋ณธ DB์ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์๊ฐ ๋๋ ์ค์ค์๊ฐ์ผ๋ก ๊ฐ์งํ์ฌ ํ๋ฅ ์์คํ ์ผ๋ก ์ ๋ฌํ๋ ๋ฐฉ์
๐ก ์ค๋ฌด ํฌ์ธํธ
- Debezium, Maxwell, StreamSets, Oracle GoldenGate ๋ฑ ๋๊ตฌ ํ์ฉ
- ๋ก๊ทธ ๊ธฐ๋ฐ(CDC Log), ํธ๋ฆฌ๊ฑฐ ๊ธฐ๋ฐ, ํ์์คํฌํ ๋น๊ต ๋ฐฉ์ ์กด์ฌ
- Kafka๋ก ์ ๋ฌ ํ Spark/Flink์์ ์ฒ๋ฆฌ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “CDC ๊ตฌํ ์ ๊ณ ๋ คํด์ผ ํ ์ ์?” โ ์์ ๋ณด์ฅ, ์ค๋ณต ์ฒ๋ฆฌ, ์คํค๋ง ๋ณ๊ฒฝ ๋์
์ธ๋ฑ์ฑ ์ ๋ต #
๐ ํต์ฌ ์ ์
- ๋ฐ์ดํฐ ์กฐํ ์ฑ๋ฅ ํฅ์์ ์ํด ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋ ์ ๋ต
๐ก ์ค๋ฌด ํฌ์ธํธ
- B-Tree, Bitmap, Hash ์ธ๋ฑ์ค ์กด์ฌ
- ์ ์ ํ ์ธ๋ฑ์ฑ์ ์กฐํ ์ฑ๋ฅ ํฅ์, ๊ณผ๋ํ ์ธ๋ฑ์ค๋ ์ฐ๊ธฐ ์ฑ๋ฅ ์ ํ
- ๋ณตํฉ ์ธ๋ฑ์ค ์์ ์ค์ (WHERE ์กฐ๊ฑด๊ณผ ์ ๋ ฌ ์์ ๋ถ์ ํ์)
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “์ธ๋ฑ์ค๊ฐ ์คํ๋ ค ์ฑ๋ฅ์ ์ ํ์ํค๋ ๊ฒฝ์ฐ๋?” โ ๋ถํ์ํ๊ฑฐ๋ ์ค๋ณต๋ ์ธ๋ฑ์ค, ์์ฃผ ๊ฐฑ์ ๋๋ ์ปฌ๋ผ
์์ถ ํฌ๋งท (Parquet, ORC) #
๐ ํต์ฌ ์ ์
- ๋ถ์์ฉ ๋ฐ์ดํฐ ์ ์ฅ ์ ์ฉ๋ ์ต์ ํ์ I/O ์ฑ๋ฅ ํฅ์์ ์ํ ์ปฌ๋ผ ๊ธฐ๋ฐ ์์ถ ํฌ๋งท
๐ก ์ค๋ฌด ํฌ์ธํธ
- Parquet: Spark, Hive, BigQuery ๋ฑ์์ ๊ธฐ๋ณธ ์ฌ์ฉ
- ORC: Hive ์ต์ ํ์ฉ ํฌ๋งท
- Columnar ๊ตฌ์กฐ๋ผ ์์ถ๋ฅ ๋๊ณ , ์ฟผ๋ฆฌ ์๋ ๋น ๋ฆ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “CSV ๋์ Parquet์ ์ฌ์ฉํ๋ ์ด์ ๋?” โ ์์ถ ํจ์จ + Columnar ์ฝ๊ธฐ + ์คํค๋ง ํฌํจ
ํํฐ์ ํ๋ฃจ๋ #
๐ ํต์ฌ ์ ์
- ํ์ํ ํํฐ์ ๋ง ์ฝ๋๋ก ์ฟผ๋ฆฌ ์ํ ์ ์๋์ผ๋ก ํํฐ์ ์ ๊ฑธ๋ฌ๋ด๋ ์ต์ ํ ๊ธฐ๋ฒ
๐ก ์ค๋ฌด ํฌ์ธํธ
- WHERE ์กฐ๊ฑด์ ํํฐ์ ํค๋ฅผ ํฌํจํด์ผ ๋์
- Hive, Spark, Iceberg ๋ชจ๋ ์ง์
- ํํฐ์ ์๊ฐ ๋ง์์๋ก ํจ๊ณผ ๊ทน๋ํ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “ํํฐ์ ํ๋ฃจ๋์ด ์๋ ๋ ๋ฌธ์ ์ ์?” โ ์ ์ฒด ์ค์บ ๋ฐ์ โ ์ฑ๋ฅ ์ ํ
์กฐ์ธ ์ต์ ํ #
๐ ํต์ฌ ์ ์
- ์กฐ์ธ ์ํ ์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ ์ด๋ ๋ฐ ๊ณ์ฐ ๋น์ฉ์ ์ต์ํํ๋ ๋ค์ํ ์ ๋ต
๐ก ์ค๋ฌด ํฌ์ธํธ
- Broadcast Join: ์ ํ ์ด๋ธ ๋ฉ๋ชจ๋ฆฌ ํ์ฌ (Spark)
- Sort-Merge Join: ๋์ฉ๋ ์ ๋ ฌ ๊ธฐ๋ฐ ์กฐ์ธ
- ์กฐ์ธ ์์ ๋ฐ ํํฐ๋ง ์์๋ ์ฑ๋ฅ์ ์ํฅ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “Spark์์ ์กฐ์ธ ์ฑ๋ฅ์ ๋์ด๋ ค๋ฉด?” โ Broadcast Join, ํํฐ๋ง ์ฐ์ , ํํฐ์ ๋ ์ ๋ต ๊ณ ๋ ค
๋ฒกํฐํ #
๐ ํต์ฌ ์ ์
- CPU์ SIMD(๋์ ๋ช ๋ น ์ฒ๋ฆฌ)๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ธ๋ก ๋จ์๋ก ์ฐ์ฐ์ ์ํํ๋ ๋ฐฉ์
๐ก ์ค๋ฌด ํฌ์ธํธ
- Spark SQL Catalyst Optimizer์์ ๊ธฐ๋ณธ ์ ์ฉ
- Arrow ๊ธฐ๋ฐ ์ฐ์ฐ, Pandas UDF ๋ฑ์์ ํ์ฉ
- Columnar ํฌ๋งท๊ณผ ๊ถํฉ์ด ์ข์
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “๋ฒกํฐํ ์ฐ์ฐ์ด๋ ๋ฌด์์ด๊ณ , ์ธ์ ์ ๋ฆฌํ๊ฐ์?” โ ๋๋ ๋ฐ์ดํฐ ์ฐ์ฐ์์ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฒ๋ฆฌ๋ก CPU ํจ์จ ๊ทน๋ํ
Columnar Storage #
๐ ํต์ฌ ์ ์
- ๋ฐ์ดํฐ๋ฅผ ์ด ๋จ์๋ก ์ ์ฅํ๋ ๊ตฌ์กฐ๋ก, ๋ถ์ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋์ด๊ณ ์์ถ๋ฅ ์ ํฅ์์ํค๋ ์ ์ฅ ๋ฐฉ์
๐ก ์ค๋ฌด ํฌ์ธํธ
- Parquet, ORC, ClickHouse ๋ฑ
- Column ๋จ์ I/O + ๊ณ ์์ถ + ๋ฒกํฐํ ์ฒ๋ฆฌ ์ต์ ํ
- ๋ถ์ ์์ฃผ์ OLAP ํ๊ฒฝ์ ์ ํฉ
๐ฏ ๋ฉด์ ํฌ์ธํธ
- “Row vs Column Storage์ ์ฐจ์ด๋?” โ Row: ํธ๋์ญ์ , Column: ๋ถ์
๐ข 4. ๋ชจ๋ ๋ฐ์ดํฐ ํ๋ซํผ & ๊ฑฐ๋ฒ๋์ค #
๋ฐ์ดํฐ ๋งํธ / ๋ ์ดํฌํ์ฐ์ค #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Data Mesh / Discovery / Hub #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Data Catalog #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๋ฐ์ดํฐ ํ์ง #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Lineage #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Governance #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Metadata ๊ด๋ฆฌ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Data Contract #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
โก 5. Kafka #
KRaft vs Zookeeper #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
ํํฐ์ ์ ๋ต #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์ปจ์๋จธ ๊ทธ๋ฃน & ์คํ์ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Exactly once #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Schema Registry #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Kafka Connect #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
ํธ๋์ญ์ & ๋ฉฑ๋ฑ์ฑ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Backpressure #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๐ 6. Spark #
Tungsten #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
RDD vs DF vs DS #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
ํํฐ์ ๋ ์ ๋ต #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์กฐ์ธ ๋ฐฉ์ (Broadcast, Shuffle) #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
DPP (๋์ ํํฐ์ ํ๋ฃจ๋) #
### AQE๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Catalyst #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์คํธ๋ฆฌ๋ฐ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Checkpointing #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๐ 7. Flink #
์ด๋ฒคํธ ์๊ฐ vs ์ฒ๋ฆฌ ์๊ฐ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Watermark #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์๋์ฐ ์ฐ์ฐ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Checkpointing & Savepoint #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๋ฐฑํ๋ ์ (Backpressure) #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์ ํํ ํ ๋ฒ ์ฒ๋ฆฌ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์ํ ๊ด๋ฆฌ (State Backend) #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
CEP (Complex Event Processing) #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๐๏ธ 8. ํ ์ด๋ธ ํฌ๋งท (Iceberg & Delta Lake) #
ACID ํธ๋์ญ์ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์๊ฐ ์ฌํ (Time Travel) #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์คํค๋ง ์งํ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
ํํฐ์ ์งํ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์์ถ (Compaction) #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Z-ordering #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๋์์ฑ ์ ์ด #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
์ฆ๋ถ ์ฝ๊ธฐ #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๐ 9. Airflow #
์ฌ๋ฌ Executor #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
DAG ์ค๊ณ ์ ๋ต #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
XCom #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Branching #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Sensor #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Hook #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
SubDAG #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
๋์ DAG #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ
Backfill #
๐ ํต์ฌ ์ ์ ๐ก ์ค๋ฌด ํฌ์ธํธ ๐ฏ ๋ฉด์ ํฌ์ธํธ