본문 바로가기
Data Tech/DataEngineer(데이터엔지니어)

데이터 인프라 (Data Infrastructure)

by SuperDev 2024. 8. 19.

데이터 인프라 구축의 목적은 분석을 통해 최종적으로 비즈니스의 의사결정에 도움을 주는 것, 데이터를 통해 서비스/제품의 성능을 향상시키고자 하는 목적 등이 있습니다. 데이터 수집부터 서비스에 활용하기까지 다양한 데이터 관련 서비스와 오픈소스 플랫폼들이 있는데, 어떤 기술들이 적용되는지 알아봅시다.

https://a16z.com/emerging-architectures-for-modern-data-infrastructure-2020/

 

먼저 데이터를 서비스에 활용하기 전에 데이터를 수집하고 저장해야 합니다. 그런데 데이터 소스가 DBMS나 CRM, ERP와 같이 다양하기 때문에 여러 블럭들로 나누어져 있습니다. 떄문에 서비스를 제공하기 위해 이 데이터 블럭들을 통합된 환경에서 관리하는 것이 필요해졌습니다. 그래서 나타난 것이 Data Warehouse와 Data Lake라는 개념 입니다.

 

Production System에서는 Normalized Schema라고 하여 Many & Small 테이블들로 구성되어져 있는데, Data Warehourse는 Dimensional Schema라고 하여 Fewer & Simpler 테이블로 구성되어 있습니다. 즉  Data Warehourse는 특정 서비스를 위해 원하는 데이터를 쉽게 얻을 수 있도록  Production System의 데이터를 추출, 변환, 적재하여 구성한 일종의 Storage 입니다. 그리고 이 과정을 ETL(Extract, Transform, Load)이라고 합니다. 

 

 

 

1. Source (데이터 소스)

  • OLTP Databases : 계좌이체와 같이 한쪽의 데이터가 입력되면 한쪽은 데이터가 삭제되는 형태의 Operation이 하나의 트랜젝션에서 일어나게 되는데 이런 거래 처리를 위한 데이터베이스를 OLTP라고 합니다.
  • OLAP Databases : 분석 및 보고를 위한 시스템으로 설계된 데이터베이스 입니다. OLAP는 데이터웨어하우스와 사용되고, 복잡한 데이터 분석을 보다 효율적으로 할 수 있도록 돕습니다.
  • CDC (Change data capture) : 데이터 업데이트가 일어나면 변경된 이벤트들을 외부 DB에 복사하여 저장하는 기술 입니다.
  • File and Object Storage : 회사에서 관리하는 문서나 파일, 폴더, 이미지, 영상 등의 개체들을 말합니다.
  • ERP (Enterprise Resource Planning) : 기업의 자원(인사, 재무, 생산, 물류 판매 등)을 통합적으로 관리하고 최적화하기 위한 소프트웨어 시스템 입니다. 대표적으로 Cloud DB, CRM 등이 있습니다. (회사 내부 데이터)
  • Event Collectors : 사용자가 만들어내는 로그나 데이터를 실시간 수집하는 것을 말합니다. 대표적인 관리 Tool로는 구글 애널리틱스, 페이스북 픽셀 등이 있습니다. (회사 외부 데이터)
    • Segment : 고객 데이터 플랫폼(CDP)으로, 모바일이나 웹의 고객 데이터를 수집, 통합, 저장 및 분석할 수 있도록 지원하는 도구 입니다. 이 Segment를 사용하면 하나의 API로 모든 데이터를 취합하고 저장할 수 있습니다.
    • Snowplow : Segment와 비슷한데 오픈소스로 이루어져 있습니다. 이벤트 소스를 Snowplow를 통해서 원하는 데이터웨어하우스로 보냅니다.

 

 

2. Ingestion and Transformation (데이터 수집 & 변환)

데이터 소스가 저장된 다양한 Storage 혹은 Lambda와 같은 Founction을 통해서 데이터를 수집하고 데이터 사용 목적에 맞게 변환하는 프로세스를 말합니다.

 

프로세스는 크게 ETL과 ELT 과정이 있는데, ETL은 데이터 소스를 수집하여 가공한 상태에서 데이터를 저장하는 반면 ELT는 데이터 소스를 원시 데이터 형태로 저장한 후에 목적에 맞게 데이터를 변환하여 활용하는 과정을 말합니다.

데이터를 저장하는 비용이 상대적으로 컴퓨팅 비용보다 저렴한 경우 ELT 과정이 더 유리할 수 있겠죠. 서비스 환경이나 상황에 따라 데이터를 관리하면 되겠습니다.

 

데이터를 통합 관리해주는 대표적인 플랫폼들은 아래와 같습니다.

  • Fivetran : 데이터 통합 플랫폼을 제공하는 회사로, 다양한 소스에서 데이터를 자동으로 수집하고 이를 데이터 웨어하우스나 데이터 레이크로 전송하는 서비스를 제공합니다. 즉 사용자가 간편하게 데이터를 통합할 수 있도록 도와주는 플랫폼 입니다.
  • Panoply : 데이터 통합 및 분석 플랫폼으로 사용자가 쉽게 데이터를 수집, 저장, 분석할 수 있도록 돕습니다. 특히 비즈니스 인텔리전스(BI)와 데이터 분석을 위한 데이터 웨어하우스를 간편하게 구축할 수 있는 기능을 제공합니다. 주로 작은 회사들이 사용할 수 있도록 만들어진 플랫폼 입니다.
  • Stitch : 데이터 통합 플랫폼으로 ETL 프로세스를 손쉽게 설정하고 관리할 수 있도록 돕습니다. 프로세스를 Scheduling하거나, Error를 Handing하거나, 모니터링 등의 기능이 제공하고 있습니다.
  • Matillion : 클라우드 기반의 데이터 통합 플랫폼으로 주로 Amazon Redshift나 Google BigQuery, Snowflake와 같은 클라우드 데이터 웨어하우스와 통합되어 사용됩니다.

 

3. Data WorkFlow

  • Data Modeling
    • dbt (Data build tool) : 데이터 분석가나 엔지니어가 데이터를 변환하고 모델링할 수 있도록 도와주는 오픈 소스 도구 입니다. SQL 쿼리를 사용하며 데이터 Test, Version Control, Alerting, Logging 등의 기능을 제공합니다. 즉 데이터 Transformation 개발환경을 제공한다고 정의하면 되겠습니다.
    • LookML : 데이터 분석가가 데이터 소스를 정의하고, 이를 기반으로 보고서와 대시보드를 생성할 수 있게 돕는 도구 입니다. 데이터 분석을 위한 데이터셋 관리 측면에서는 오히려 dbt를 많이 사용하는 것으로 알고있습니다.
  • Workflow Manager : 데이터 소스에서 데이터 웨어하우스 or 레이크로 옮기는 과정을 Workflow 단위로 관리
    • Airflow : 데이터 파이프라인을 작성하고, 스케줄링 및 모니터링하기 위한 오픈 소스 플랫폼입니다. Workflow가 모두 Python 코드이기 때문에 개발자들이 사용하기 쉽습니다.
      • DAG(Directed Acycle Graph) : 방향성 비순환 그래프로 방향을 가지되, 루프를 생성하지 않는 그래프를 말합니다. 사이클이란,  시작점에서 출발하여 시작점으로 다시 돌아오는 경로를 말합니다.
    • DAGSTER : 데이터 파이프라인을 구축하고 관리하기 위한 오픈 소스 플랫폼으로, 데이터 엔지니어와 사이언스가 데이터 작업을 효율적으로 설계하고 운영할 수 있도록 돕는 도구입니다.
    • argoKubernetes 환경에서 워크플로우를 관리하고 자동화하기 위한 오픈 소스 플랫폼입니다. 주로 데이터 파이프라인, CI/CD(지속적 통합 및 지속적 배포) 및 머신 러닝 작업을 자동화하는 데 사용됩니다.
    • Prefect : Airflow의 기능을 대부분 가지고 있는 Workflow Manager이며, 복잡한 데이터 작업을 자동화하고 모니터링할 수 있는 오픈 소스 플랫폼 입니다. Prefect는 Python 코드로 운영이 가능합니다.

 

 

4. Big Data Task

  • Spark : Airflow는 Data Workflow를 통해 Task를 수행합니다. 그런데 Task가 대규모의 데이터를 처리해야 한다면 그 Task를 Airflow가 수행하지 않고, Spark를 통해 분산 처리해야 합니다. 즉 Spark는 대규모 데이터 처리를 위한 분산 처리 엔진입니다. 실시간 처리와 배치 처리를 모두 지원하며, 데이터 분석, 머신 러닝, 스트리밍 데이터 처리 등 다양한 작업에 사용됩니다.
  • Hadoop : 대규모 데이터 저장 및 처리를 위한 오픈 소스 프레임워크로, Apache Software Foundation에 의해 개발되었습니다. Hadoop은 MapReduce 모델을 사용하는데, 데이터를 "Map" 단계에서 분할하고, "Reduce" 단계에서 집계하여 결과를 생성합니다. 하지만 Spark가 100배 더 빠르다고 합니다.
  • Python Lib : 파이썬의 대규모 데이터 처리를 도와주는 라이브러리로 데이터프레임을 지원하는 Pandas, AWS 리소스를 파이썬에서 Control할 수 있도록 지원하는 Boto3, 분산 환경에서 데이터를 처리할 수 있도록 도와주는 Dask, Python 코드를 분산 컴퓨팅할 수 있게 도와주는 도구로 Ray 등이 있습니다.
  • Databricks : Apache Spark를 기반으로한 데이터 분석, 엔지니어링, 머신러닝 등을 위한 클라우드 기반 통합 개발 환경 플랫폼입니다. 데이터 레이크, 머신러닝 라이브러리, 클라우드 서비스 등을 연결한 통합 솔루션을 제공합니다.
  • HIVE : 대규모 데이터 세트를 분석하고 처리하기 위한 데이터 웨어하우스 솔루션으로, Hadoop 생태계의 일부입니다. Hive는 SQL과 유사한 쿼리 언어인 HiveQL을 사용하여 사용자가 쉽게 데이터를 조회하고 분석할 수 있도록 설계되었습니다.

 

 

 

5. Event Streaming

데이터 가용성이 중요한 이유는 어떤 데이터를 언제, 누가, 어떻게 접근할 수 있게 해주는가?에 대한 질문에서 시작합니다. 과거 데이터웨어하우스는 엄격한 스키마로 관리되었고, ETL과정이 마무리 된 후에 접근이 가능했고, BI Tool에서만 접근이 가능했습니다. 하지만 현대에는 데이터 접근성이 실시간으로 이루어지고 다양한 접근방법이 제공되고 있습니다.

 

Spark는 기본적으로 분산 처리를 제공하므로 Micro-Batch기반의 데이터 Streaming 서비스를 제공합니다. 실시간으로 처리되는 것으로 보이는 것이죠. 진정한 Native Streaming은 데이터 하나씩 처리하는 과정에서 접근도 가능합니다.

 

  • Kafka : Linked in에서 만든 분산형 Streaming 플랫폼으로, 대량의 데이터를 실시간으로 처리하고 전송할 수 있도록 도와줍니다. 데이터가 많은 회사에서는 표준처럼 사용된다고 합니다. 다만, 사용하기가 꽤 어렵다고 하네요.
  • ConfluentKafka를 기반으로 한 데이터 Streaming 플랫폼 입니다. Kafka의 기능을 확장하고, 기업이 실시간 데이터 Streaming을 보다 쉽게 구현할 수 있도록 돕는 다양한 도구와 서비스를 제공합니다. 즉 Kafka를 쉽게 사용할 수 있도록 도와주는 도구 입니다.
  • Amazon Kinesis : Amazon Kinesis는 AWS(Amazon Web Services)에서 제공하는 실시간 데이터 Streaming 서비스로, 대량의 데이터를 수집, 처리 및 분석할 수 있도록 도와줍니다. 하지만 Streaming 성능은 Kafka가 좋다는게 정설이므로 Kafka 설계가 가능한 사람이 있다면 Kafka를 쓰라고 합니다.

 

 

6. 데이터 레이크 & 데이터 웨어하우스

데이터 웨어하우스와 데이터 레이크 모두 데이터를 저장하고 관리하는 주요 방식으로 각기 다른 목적과 구조를 가지고 있습니다. 2가지 모두 다양한 형식의 데이터를 대량으로 저장할 수 있는 저장소 입니다.

구분 데이터 레이크 (Data Lake) 데이터 웨어하우스 (Data Warehouse)
데이터 형식 정형, 비정형 모든 데이터를 저장 주로 정형 데이터를 저장
저장 방식 원시 데이터 그대로 저장 (ELT) 정제된 데이터를 저장 (ETL)
유연성 매우 유연함 상대적으로 덜 유연함
쿼리 성능 느릴 수 있음 빠른 쿼리 성능 제공
비용 저렴한 스토리지 옵션 사용 가능 일반적으로 더 비쌈
플랫폼 AWS S3, GCS, Azure Data Lake Storage AWS Redshift, BigQuery, Snowflake 등

 

 

참고영상 : 유튜브 "긱뉴스"님의 영상을 참고하였습니다. 

https://www.youtube.com/watch?v=Wo6utoIC2Jw

728x90

'Data Tech > DataEngineer(데이터엔지니어)' 카테고리의 다른 글

[NoSQL] MongoDB  (5) 2025.05.02
데이터베이스 설계란?  (1) 2024.12.20
[NoSQL] Redis와 Caching  (2) 2024.12.07
[AWS] Amazon Web Service 카테고리  (3) 2024.08.08