spark

2 개의 포스트

네이버 TV (새 탭에서 열림)

네이버웹툰은 기존 데이터 파이프라인에서 발생하던 복잡한 데이터 적재(Backfill) 작업과 높은 운영 비용 문제를 해결하기 위해 DBT와 Airflow를 결합한 'Flow.er' 시스템을 구축했습니다. Flow.er는 데이터 간의 의존성을 명확히 정의하는 데이터 계보(Lineage)를 중심으로 설계되어, 엔지니어가 데이터의 흐름을 온디맨드로 파악하고 관리할 수 있게 돕습니다. 이를 통해 데이터 품질을 높이는 동시에 여러 데이터 조직으로 확장 가능한 고도화된 데이터 플랫폼으로 발전하고 있습니다. **과거 파이프라인의 한계와 Flow.er의 탄생** * 과거에는 파이프라인 복구와 수동 백필 작업에 과도한 운영 리소스가 소모되어 업무 효율이 저하되는 문제가 있었습니다. * 데이터 간의 복잡한 연결 고리를 한눈에 파악하기 어려워 데이터 정합성을 유지하고 장애에 대응하는 데 한계가 존재했습니다. * 이러한 문제를 극복하기 위해 데이터 계보를 가시화하고 자동화된 운영이 가능한 'Flow.er' 서비스에 대한 PoC를 거쳐 실무에 도입했습니다. **DBT와 Airflow를 활용한 계보 중심 아키텍처** * **DBT의 역할**: SQL 기반의 데이터 모델링을 통해 데이터 변환 로직을 관리하며, 모델 간 의존성을 바탕으로 데이터 계보와 관련 문서(Documentation)를 자동 생성합니다. * **Airflow의 역할**: DBT로 정의된 모델들이 선후 관계에 맞춰 정확히 실행되도록 워크플로우를 오케스트레이션하고 스케줄링을 담당합니다. * **개발 생산성 향상**: 개인 인스턴스를 제공하여 개발자가 격리된 환경에서 모델을 테스트할 수 있게 하고, CI/CD 파이프라인을 통해 코드 변경 사항을 안전하게 배포합니다. **시스템 안정성 및 확장을 위한 컴포넌트** * **Playground & Tower**: 자유로운 데이터 실험을 위한 샌드박스 환경인 Playground와 파이프라인 상태를 실시간으로 감시하는 Tower를 통해 운영 가시성을 확보했습니다. * **Partition Checker**: 상위 데이터 소스의 파티션 생성 여부를 사전에 체크하여 데이터 누락을 방지하고 적재 정합성을 획기적으로 개선했습니다. * **Manager DAG System**: 수많은 데이터 모델과 DAG를 효율적으로 관리하기 위해 관리 전용 시스템을 개선하여 운영 편의성을 극대화했습니다. **Flow.er의 미래와 기술적 지향점** * **MCP(Model Context Protocol) 서버**: 데이터 모델의 컨텍스트를 외부 도구나 AI 에이전트가 이해할 수 있는 규격으로 제공하여 데이터 활용도를 높일 예정입니다. * **AI Agent 연동**: 단순한 파이프라인 운영을 넘어 AI가 데이터 계보를 분석하고 문제를 해결하거나 코드를 최적화하는 단계로의 발전을 준비하고 있습니다. 데이터 파이프라인의 복잡성으로 인해 백필과 운영에 고통받고 있다면, DBT를 활용해 계보를 명확히 정의하고 이를 Airflow와 유기적으로 연결하는 접근 방식이 필수적입니다. 데이터 계보 중심의 아키텍처는 단순한 자동화를 넘어 데이터 프로덕트의 신뢰성을 담보하는 가장 강력한 수단이 될 것입니다.

Building highly reliable data pipelines at Datadog (새 탭에서 열림)

데이터독(Datadog)은 매일 수조 건의 데이터를 처리하며 시스템의 신뢰성을 '정해진 시간 내에 정확한 결과물을 출력할 확률'로 정의합니다. 이들은 파이프라인의 장애를 완전히 막는 대신, 장애가 발생하더라도 데이터 전달 기한을 지킬 수 있도록 결함 허용(Fault Tolerance)과 빠른 복구에 초점을 맞춘 아키텍처를 구축했습니다. 특히 개별 작업 단위로 클러스터를 분리하고 장시간 실행되는 작업을 작게 쪼개는 전략을 통해 대규모 데이터 처리의 안정성을 확보하고 있습니다. ### 작업 격리를 위한 개별 클러스터 아키텍처 * 하나의 거대한 공유 클러스터를 사용하는 대신, 각 데이터 파이프라인 작업마다 독립적인 전용 클러스터를 할당하여 운영합니다. * 작업 간 리소스 경쟁을 원천 차단하여 특정 작업의 부하가 다른 파이프라인에 영향을 주지 않으며, 클러스터별 상태를 명확히 파악할 수 있어 모니터링이 용이합니다. * 작업의 특성에 따라 CPU 최적화 인스턴스나 메모리 최적화 인스턴스를 선택하는 등 하드웨어를 유연하게 튜닝할 수 있습니다. * 새로운 버전의 Hadoop이나 Spark를 도입할 때 전체 시스템을 중단할 필요 없이, 특정 클러스터부터 점진적으로 업그레이드하며 버그나 호환성을 테스트할 수 있습니다. ### 스팟 인스턴스 활용과 실패를 고려한 설계 * 비용 절감을 위해 AWS 스팟 인스턴스를 적극 활용하며, 이는 클러스터가 언제든 중단될 수 있다는 전제하에 파이프라인을 설계하도록 강제하는 '카오스 엔지니어링'의 효과를 줍니다. * 단일 작업의 실행 시간이 길어질수록 실패 시 손실되는 작업량과 복구 시간이 늘어나므로, 이를 방지하기 위해 작업을 수직적·수평적으로 세분화합니다. * **수직적 분할:** 데이터 변환 과정을 여러 단계의 작업으로 나누고, 단계 사이의 중간 데이터를 S3에 저장(Checkpointing)하여 실패 시 처음부터 다시 시작하지 않고 중간 지점부터 재개할 수 있게 합니다. * **수평적 분할:** 입력 데이터를 샤드(Shard) 단위로 파티셔닝하여 여러 작업이 병렬로 처리하게 함으로써 개별 작업의 규모를 작게 유지합니다. ### 롤업(Rollup) 파이프라인의 최적화 사례 * 과거 14시간 이상 소요되던 단일 메트릭 집계 작업을 '집계' 단계와 '커스텀 포맷 저장' 단계로 분리하여 관리합니다. * 첫 번째 집계 작업의 결과물을 S3에 Parquet 파일로 저장함으로써, 두 번째 단계에서 장애가 발생하더라도 집계 과정을 다시 반복할 필요가 없습니다. * Kafka 파티션 구조를 기반으로 데이터를 샤딩하여, 데이터 규모가 급증하거나 특정 샤드에 문제가 발생했을 때 해당 부분만 격리하여 리소스를 집중 투입하거나 빠르게 복구할 수 있습니다. * 이러한 구조는 작업 시작 오버헤드나 S3 쓰기 비용을 발생시키지만, 장애 복구 시간을 단축하고 전체 시스템의 데이터 가용성을 보장하는 데 결정적인 역할을 합니다. 대규모 데이터 시스템에서 신뢰성은 시스템이 절대 중단되지 않는 것이 아니라, 중단되었을 때 얼마나 빠르게 복구되어 사용자에게 제때 데이터를 전달하느냐에 달려 있습니다. 이를 위해 파이프라인을 최대한 작고 독립적인 단위로 쪼개고 중간 상태를 유지하는 설계는 복잡한 데이터 환경에서 필수적인 전략입니다.