일단 데이터 엔지니어링에 대해 알고 싶으면 두가지책을 추천함

책 난이도는 빅지기가 젤 쉽고 견고한 데이터 엔지니어링은 약간 클린코드 같은 느낌임

데이터 엔지니어링에서 파이프라인은 크게 배치와 스트리밍이 있는데 배치는 우리가 일반적으로 아는 배치고, 스트리밍은 무한한 데이터를 의미함

스트리밍 시스템을 구축할 때 사용하는 게 flink 와 spark streaming 이 있음

각각 설계이념이 달라서 무한한 데이터를 어떻게 보는 관점이 다름

자 그러면 이제 데이터를 입수하는 건 카프카라는 이벤트 큐를 통해서 데이터 발생하는 곳에서 특정 트리거를 통해 입수해

그러면 그 데이터는 어떻게 저장해야할까? 그걸 우리는 스토리지 포맷이라고 부릅니다

가장 많이 쓰는 스토리지 포맷은 아이스버그, 델타 레이크, 후디가 있어요

아이스버그는 웬만한 기술과 호환성이 좋고 델타 레이크는 스파크에 최적화 되어있음

파이프라인은 여러 작은 태스크로 나눠져잇을 거고 그 태스크를 관리하는걸 오케스트레이션 툴, 흔하게는 에어플로우를 사용하는 것

graph TD
    subgraph Data Sources
        MongoDB[MongoDB]
    end

    subgraph Change Data Capture & Streaming
        MongoDB -- oplog / Change Streams --> CDC_Tool[CDC Tool e.g., Debezium]
        CDC_Tool -- Real-time Data Stream --> Kafka[Kafka / Message Queue]
    end

    subgraph Data Processing & Transformation
        Kafka -- Consume Data --> Spark_Streaming[Spark Streaming / Structured Streaming]
        Spark_Streaming -- Transform & Prepare --> Parquet_Files[Parquet Files]
    end

    subgraph Data Lake Storage & Virtualization
        Parquet_Files -- Store in --> Cloud_Storage[Cloud Object Storage AWS S3, GCS, Azure Data Lake Storage]
        Cloud_Storage -- Provides access to --> DuckLake[DuckLake Virtualization Layer for DuckDB]
    end

    subgraph Analytics & Querying
        DuckLake -- Exposes Files as Tables to --> DuckDB[DuckDB In-process OLAP DB]
        DuckDB -- Ad-hoc Queries / Analysis --> BI_Tools[BI Tools / Reporting]
        DuckDB -- Data Access for --> Developers[Data Scientists / Developers]
    end

    style MongoDB fill:#ADD8E6,stroke:#333,stroke-width:2px
    style CDC_Tool fill:#90EE90,stroke:#333,stroke-width:2px
    style Kafka fill:#FFD700,stroke:#333,stroke-width:2px
    style Spark_Streaming fill:#FFA07A,stroke:#333,stroke-width:2px
    style Parquet_Files fill:#DDA0DD,stroke:#333,stroke-width:2px
    style Cloud_Storage fill:#87CEEB,stroke:#333,stroke-width:2px
    style DuckLake fill:#F0E68C,stroke:#333,stroke-width:2px
    style DuckDB fill:#FFB6C1,stroke:#333,stroke-width:2px
    style BI_Tools fill:#D3D3D3,stroke:#333,stroke-width:2px
    style Developers fill:#D3D3D3,stroke:#333,stroke-width:2px