Data Warehouse 기반의 데이터 플랫폼 구성( feat. Snowflake )

YujinLee
8 min readJul 31, 2022

--

Data Wareshouse

우선 Data Warehouse는 무엇을 의미할까요? 간단하게 말하면 Data Warehouse란 데이터 중앙 리포지토리입니다. 보통 데이터는 여러 다양한 소스로부터 들어오게 되는데, 파이프라인을 구축하여 하나의 통합 플랫폼으로 모아서 사용할 수 있습니다. 여기서 파이프라인ETL 파이프라인을 가르키고, 하나의 통합 플랫폼Data Warehouse를 의미합니다. 데이터를 추출(Extract)하여 사용 가능한 형식으로 가공(Transform)하고 Data Warehouse로 적재(Load)하는 일련의 과정이 이루어지게 됩니다.

ETL

Data Warehouse는 실제 분석을 위한 데이터를 관리하기 위한 플랫폼으로 최종적으로 전처리가 완료된 데이터가 저장됩니다. OLTP보다 OLAP에 특화되어 트랜잭션 기반의 작업보다 다소 복잡한 SELECT 쿼리가 동반된 분석 작업에 많이 사용됩니다.

주로 다음과 같은 특징이 있습니다.

  • 표준 SQL을 지원하여 DDL, DML 쿼리가 모두 가능합니다.
  • columnar format을 기반으로 하기에, 같은 타입의 데이터를 저장하여 데이터 압축 효율이 높습니다. 예를 들어 금융 시계열 데이터와 같이 비슷한 값이 중복되는 경우 압축 효율이 보다 크게 작용할 것입니다.
  • 조회 쿼리에서 필요한 칼럼만 가져와 로드 속도가 빠릅니다.
  • 기존의 RDBMS 형식과는 다르게 정규화된 테이블 보다는 역정규화된 하나의 테이블로 저장하는 것이 유리하게 동작할 수 있습니다.
  • storage와 computing 엔진이 분리되어 각각의 리소스에 대한 확장성이 용이합니다.
  • MPP( 대규모 병렬 처리 )를 지원하며, 여러 노드에 데이터를 쪼개 로드하여 처리합니다.

Data Warehouse를 도입한 계기

기존에는 데이터를 사용하려면 RDB, AWS S3, SFTP 서버 등 데이터 소스에 접근하여 필요한 데이터를 직접 가져와야 했습니다. 이는 이기종 데이터 간에 통합이 어렵고 데이터 소스에 대한 개별적인 관리를 필요로 합니다.

기존에는 각각의 소스에 개별적으로 접근하여 데이터를 가져와야 함

통합 데이터 플랫폼을 구축하기 위해서 데이터 소스를 하나의 데이터베이스로 모아 사용할 수 있습니다. 전체 데이터 크기가 커지면 안정적인 사용을 위해 데이터베이스를 파티셔닝하거나 클러스터로 구성하여 관리해야 합니다. 온프레미스로 구축할 경우 데이터베이스에 대한 운영 및 관리의 필요성이 커지고, 클라우드 서비스를 사용할 경우 직접 프로비저닝해야 합니다.

데이터 웨어하우스는 Managed 서비스로 제공되는 솔루션으로 운영과 관리의 수고로움이 줄어듭니다. 또한 필요한 만큼의 자원을 사용할 수 있어 효율적인 사용이 가능합니다.

Data Warehouse Frameworks

주로 많이 사용되는 Data Warehouse는 GCP BigQuery, Snowflake, AWS Redshift가 있습니다. 각각에 대해 간단히 살펴보겠습니다.

  • GCP BigQuery : GCP에서 제공되는 완전 관리형 분석 데이터 웨어하우스로, 거의 실시간에 가까운 속도로 방대한 데이터를 분석할 수 있습니다. 여러 머신에 쿼리 연산을 분산시켜 처리합니다.
  • Snowflake : Data Lake, Data Wareshoue, Data Mart 및 Application의 역할을 동시에 할 수 있는 통합 플랫폼입니다. Storage와 Computing 노드가 분리되어 있어, 각각의 Computing 노드에 필요한 job을 나누어 수행할 수 있습니다. AWS S3, Azure storage, GCP storage에서 데이터를 가져와 사용할 수 있습니다.
  • Redshift : AWS에서 제공하는 완전 관리형 데이터 웨어하우스입니다. 메타 데이터를 저장하는 리더 노드를 중심으로 Computing 노드에 데이터를 분산시켜 병렬 처리합니다.

Data Platform Architecture

첫 번째 선택 : BigQuery

Data Warehouse를 도입하기로 결정한 이후 처음에는 BigQuery를 사용하기로 하였습니다. 처리 속도가빠르며 확장성이 뛰어나고 다른 Google Cloud 서비스와 호환이 잘 된다는 장점이 있습니다.

BigQuery를 기반으로 설계한 데이터 파이프라인은 대략 아래와 같습니다.

Data pipeline - BigQuery
  • BigQuery는 Google Cloud에서 제공하는 managed service로 다른 GCP 서비스와 연동이 쉽게 이루어집니다.
  • RDB로 들어오는 데이터는 CDC 파이프라인을 추가하여 DB 이벤트가 발생할 때마다 실시간으로 BigQuery에 동기화합니다. RDB( MySQL, MSSQL, Oracle DB에 한함)와 BigQuery를 동기화할 수 있도록 GCP 서비스인 Data Fusion을 사용합니다.
  • AWS S3로 업데이트되는 데이터는 Data Transfer 서비스를 통해 GCS로 동기화합니다. GCS에 객체 단위로 저장된 데이터를 조회할수 있도록 BigQuery 스토리지에 업로드합니다.
  • ETL 과정에 필요한 workflow는 Airflow를 적용하였습니다.
  • 실사용자인 데이터 사이언티스트는 주로 Python을 사용하기에 코드상에서 데이터를 로드하여 작업할 수 있도록 python으로 데이터 로드 API를 개발하여 제공합니다. API는 BigQuery와 연동되어 가공된 데이터를 불러오고, 로우 데이터를 가져오고 싶을 경우 GCS에서 다운로드합니다.

BigQuery를 중심으로 데이터 스토리지 및 컴퓨팅을 GCP기반으로 옮기려다 보니 migration이나 replication 작업에 운영 및 비용적인 측면에서 관리가 힘든 점이 있었습니다. 특히 Data Fusion을 사용하여 replication을 할 경우 인스턴스를 프로비저닝해야 하므로 비용이 지속적으로 발생하게 됩니다. 주로 Data Vendor에서 데이터를 구독하여 관리하다보니 BigQuery에서 사용하기 위해서는 CDC 파이프라인을 따로 운영해야 합니다.

또한 기존에 AWS S3 버킷의 데이터를 BigQuery에 동기화하기 위해 중간에 GCS에 저장하여 로우 데이터를 저장하기 위해 Data Transfer라는 서비스를 추가적으로 사용해야 했습니다. 이외에도 기존에 클라우스 서비스를 주로 AWS에 의존한 경향이 있었는데 BigQuery 도입으로, 많은 부분이 GCP로 이전해야 하는 번거로움이 발생할 것으로 예상되었습니다.

추가적으로 BigQuery 자체에서 발생하는 비용은 쿼리당 요금이 부과되어 요금 발생에 대한 원인 파악 및 최적화가 어려울 것으로 추정하였습니다.

Snowflake로 재고려, 최종선택

Snowflake는 다른 Redshift, BigQuery와 공통적으로 Managed Service를 제공하지만 기능적인 측면에서 데이터 웨어하우스 초점을 맞춘 솔루션으로, 데이터 파이프라인 구축 및 운영에 필요한 많은 기능을 포함하고 있습니다. 대용량 데이터를 처리하는 속도가 빠르며 데이터 크기에 따라 웨어하우스를 선택해서 이용할 수 있는 장점이 있습니다. 특히 Snowflake 선택이 가장 큰 이유는 Data Sharing에 있습니다.

Snowflake는 자체 마켓 플레이스에서 data sharing을 제공합니다. 현재 구독하고 있는 Data Vendor 중에 Snowflake에 이미 연동되어 있는 서비스를 제공하는 경우가 존재합니다. Sharing을 사용하면 따로 Data Warehouse 동기화를 위한 CDC 이력 관리를 하지 않아도 되고, third-party 프로그램을 사용하지 않아도 되는 이점이 있습니다.
Data Vendor에서 Snowflake 마켓 플레이스를 사용할 시, 자체 계정으로 내부 테이블을 사용합니다. 해당 내부 테이블로부터 사용자 계정에게 READ ONLY 권한이 부여됩니다. 테이블의 데이터는 AWS S3 버킷에 저장하는데, DML 쿼리로 데이터를 업데이트합니다. 사용자가 데이터를 조회할 때는 동일한 S3 버킷으로 접근하게 됩니다. 사용자 계정으로 shared table( view로 제공 )이 S3 버킷에 SELECT 쿼리를 실행하여 결과값을 추출합니다.

Snowflake Data Sharing

현재 적용 중인 데이터 파이프라인 아키텍쳐는 다음과 같습니다.

Data pipeline — Snowflake
  • 마켓 플레이스에서 제공되지 않는 데이터는 workflow orchestration을 통해 Snowflake로 업데이트됩니다.
  • CDC 파이프라인 구축 및 운영하지 않아도 되므로 파이프라인 구조가 보다 간단해집니다.
  • 전체적인 내부 인프라 workflow orchestration을 통합적으로 관리하기 위해 Flyte를 사용합니다.

from QRAFT Data Infra

--

--