사진과 음악을 좋아하는 개발자 지망생의 블로그

[데이터 웨어하우스 - 중급] 5. 데이터 파이프라인 본문

개발/데이터 웨어하우스 - 중급

[데이터 웨어하우스 - 중급] 5. 데이터 파이프라인

devculture309 2023. 6. 5. 18:16
반응형

1. 데이터 파이프라인이란?

1) ETL vs ELT

1. ETL 

  • ETL은 데이터를 외부 소스에서 추출하고, 필요한 형식으로 변환한 후, 데이터 웨어하우스에 로드하는 과정을 말합니다.
  • 데이터 웨어하우스 외부에서 데이터를 가져와서 변환한 후에 로드하는 방식으로 동작합니다.
  • 데이터 파이프라인, ETL, 데이터 워크플로우, DAG(Directed Acyclic Graph) 등의 용어로 설명될 수 있습니다.

2. ELT

  • ELT는 데이터 웨어하우스 내부에 데이터를 로드한 후, 데이터를 조작하여 새로운 데이터를 생성하는 프로세스를 의미합니다.
  • ELT는 주로 데이터 분석가들이 수행하는 작업으로, 데이터 레이크(데이터 웨어하우스 이전 단계에서 데이터를 저장하는 곳) 위에서 이러한 작업들이 발생하기도 합니다.
  • 데이터 웨어하우스에 데이터를 로드한 후에 변환 작업을 수행하며, 이러한 프로세스 전용 도구들이 있으며, 그 중에서 가장 유명한 도구는 dbt(Data Build Tool)입니다.

 

2) Data Lake vs. Data Warehouse

1. Data Lake

  • 데이터 레이크는 구조화된 데이터와 비구조화된 데이터를 모두 포함하는 저장소입니다.
  • 보존 기한이 없는 모든 종류의 데이터를 원래 형태로 보존하는 것을 목표로 합니다.
  • 보통 데이터 웨어하우스보다 훨씬 더 큰 저장 용량을 가지고 있으며, 비용 효율적인 스토리지를 제공합니다.
  • 데이터 레이크는 다양한 형식과 소스의 데이터를 수용할 수 있어 유연성이 높습니다.

2. Data Warehouse

  • 구조화된 데이터를 저장하고 처리하는 중앙 데이터 스토리지
  • 데이터 웨어하우스는 비즈니스 인텔리전스(BI) 도구(예: Looker, Tableau, Superset 등)의 백엔드로 사용되어 데이터 분석 및 리포팅을 지원합니다
  • 보존 기한이 있는 데이터를 저장하며, 데이터의 품질과 일관성을 유지하기 위해 데이터 변환, 정규화, 집계 등의 작업이 수행됩니다.

 

3) Data Lake & ELT

데이터 레이크ELT를 함께 사용할 때, 데이터는 데이터 레이크에 저장되고 ELT 프로세스를 통해 데이터 웨어하우스나 데이터 마트로 이동하게 됩니다. 이 과정에서 데이터 파이프라인을 스케줄링하고 관리하기 위해 Airflow와 같은 도구가 필요합니다.

 

Airflow는 데이터 파이프라인의 스케줄링과 관리를 위한 오픈 소스 플랫폼으로, ETL 및 ELT 작업을 자동화하고 조정하는 데 사용됩니다. Airflow를 사용하면 다양한 작업들을 시간 및 우선순위에 따라 조정하고, 작업 간의 의존성을 설정하여 데이터 파이프라인을 효율적으로 관리할 수 있습니다.

 

4) Data Pipeline의 정의

 

데이터 파이프라인(Data Pipeline)은 데이터를 소스로부터 목적지로 복사하거나 이동하는 작업을 말합니다. 이 작업은 일반적으로 파이썬, 스칼라 등의 코딩 언어나 SQL을 사용하여 구현됩니다. 대부분의 경우 데이터 웨어하우스가 데이터 파이프라인의 목적지가 되, 데이터를 모으고 저장하여 분석과 보고를 위해 활용합니다.

 

데이터 소스는 다양한 형태와 종류의 데이터를 포함할 수 있습니다. 예를 들면 클릭 스트림, 통화 데이터, 광고 성과 데이터, 거래 데이터, 센서 데이터, 메타데이터 등이 있습니다. 구체적인 예시로는 프로덕션 데이터베이스, 로그 파일, API, 스트림 데이터(Kafka 토픽) 등이 있습니다.

 

데이터 파이프라인의 목적지로는 데이터 웨어하우스 외에도 캐시 시스템(예: Redis, Memcache), 프로덕션 데이터베이스, NoSQL 데이터베이스, Amazon S3 등이 사용될 수 있습니다. 목적지는 데이터를 저장하고 분석 및 액세스하기 위한 용도에 따라 선택됩니다.

 

데이터 파이프라인은 데이터의 이동과 복사를 자동화하여 데이터 소스에서 데이터 목적지로 효율적이고 신뢰성 있는 방식으로 데이터를 전송하는 역할을 합니다. 데이터 파이프라인을 구축하고 관리함으로써 데이터 엔지니어는 데이터 처리 및 분석 작업을 원활하게 수행할 수 있습니다.

 

5) 데이터 파이프라인의 종류

1. Raw Data ETL Jobs

외부와 내부 데이터 소스에서 데이터를 읽어와서 적절한 데이터 포맷으로 변환한 후 데이터 웨어하우스에 로드하는 작업을 수행합니다. 많은 경우 API를 통해 데이터를 가져오게 됩니다. 데이터의 크기가 커지면 Spark와 같은 도구가 필요할 수 있습니다. 이러한 작업은 보통 데이터 엔지니어가 담당합니다.

 

2. Summary/Report Jobs

데이터 웨어하우스나 데이터 레이크에서 데이터를 읽어와 다시 데이터 웨어하우스에 기록하거나, 원시 데이터를 가지고 리포트 형태나 요약 테이블을 생성하는 작업을 수행합니다. 특정한 형태로는 AB 테스트 결과를 분석하는 데이터 파이프라인도 있을 수 있습니다. 요약 테이블의 경우 SQL을 사용하여 생성할 수 있으며, 데이터 분석가가 주로 담당합니다. 데이터 엔지니어는 데이터 분석가가 편리하게 작업할 수 있는 환경을 구축하는 데 중점을 둡니다. 이러한 작업을 위해 Analytics Engineer를 활용하는 경우도 있습니다. (예: DBT)

 

3. Production Data Jobs

이 종류의 데이터 파이프라인은 데이터 웨어하우스로부터 데이터를 읽어와 다른 스토리지(주로 프로덕션 환경)에 쓰는 작업을 수행합니다. 이러한 작업은 주로 써머리 정보가 프로덕션 환경에서 성능상 필요한 경우나, 머신러닝 모델에서 필요한 피처를 미리 계산하는 경우에 사용됩니다. 일반적으로 NoSQL 데이터베이스 (예: Cassandra, HBase, DynamoDB), 관계형 데이터베이스 (예: MySQL), 캐시 (예: Redis, Memcache), 검색 엔진 (예: Elasticsearch) 등이 흔한 타겟 스토리지로 활용됩니다.

 

 

 

2. 데이터 파이프라인을 만들 때 고려할 점

1) 이상과 현실간의 괴리

데이터 파이프라인을 구축하고 관리하는 것은 이상적으로는 잘 동작하고 쉽게 관리될 것으로 기대될 수 있지만, 현실은 그렇지 않을 수 있습니다. 다음은 현실적인 측면에서의 데이터 파이프라인에 대한 몇 가지 고려 사항입니다

 

  1. 데이터 파이프라인은 다양한 이유로 실패할 수 있습니다. 버그나 오류가 발생할 수 있으며, 데이터 소스 자체에서 문제가 발생할 수도 있습니다. 데이터 소스가 사용 불가능하거나 데이터 형식이 변경되는 경우에 대비해야 합니다. 이러한 이슈들은 파이프라인의 정상적인 동작을 방해할 수 있습니다.
  2. 데이터 파이프라인의 수가 증가하면 유지보수 비용이 기하급수적으로 증가할 수 있습니다. 또한, 데이터 소스 간의 의존성이 생기면 파이프라인이 더 복잡해지기 때문에, 의존성을 충분히 이해하지 못하면 파이프라인의 동작에 문제가 발생할 수 있습니다 따라서, 소스의 진실성(source of truth)을 유지하고 검색 비용 등을 관리해야 합니다.

2) Best Practices

  1. 작은 데이터의 경우 전체 데이터를 매번 복사하여 테이블을 생성하는 Full Refresh 방법을 사용하는 것이 좋습니다.
  2. Incremental Update만 가능한 경우, 데이터 소스에 따라 필요한 조건들을 충족해야 합니다. 프로덕션 데이터베이스 테이블의 경우 "created," "modified," "deleted"와 같은 필드가 필요할 수 있으며, API 데이터 소스의 경우 특정 날짜 이후로 생성되거나 업데이트된 레코드를 가져올 수 있어야 합니다. 또한 멱등성(Idempotency)을 보장해야 합니다.
  3. 실패한 파이프라인을 쉽게 재실행하고, 과거 데이터를 채우는 과정인 Backfill을 쉽게 수행할 수 있어야 합니다. 이를 위해 Airflow와 같은 도구를 사용할 수 있습니다.
  4. 데이터 파이프라인의 입력과 출력을 명확히 정의하고 문서화해야 합니다. 비즈니스 소유자를 명시하고 데이터 요청자를 기록으로 남기는 것이 좋으며, . 이는 데이터 리니지를 정확히 이해하고 데이터 카탈로그를 구축하여 데이터 디스커버리를 지원하면 데이터 파이프라인의 안정성과 신뢰성을 높일 수 있습니다.
  5. 주기적으로 사용하지 않는 데이터를 삭제하는 것이 좋습니다. 필요한 데이터만 데이터 웨어하우스에 보관하고, 이전 데이터는 데이터 레이크나 다른 스토리지로 이동하여 보관합니다.
  6. 데이터 파이프라인 사고 발생 시 사고 리포트를 작성합니다. 사고 원인을 파악하고 이를 예방하기 위한 조치를 취하는 것이 중요하며, 기술적 부채를 파악하는 데 도움이 됩니다.
  7. 중요한 데이터 파이프라인의 입력과 출력을 확인하는 점검을 수행합니다. 입력 및 출력 레코드 수를 확인하는 것부터 시작하여, 써머리 테이블을 생성하고 Primary key의 고유성을 확인하는 등의 작업이 필요합니다.
반응형