📊 데이터공학

Airbyte

Airbyte

오픈소스 데이터 통합 플랫폼. 다양한 소스 커넥터.

상세 설명

Airbyte는 다양한 소스에서 데이터를 추출하여 데이터 웨어하우스나 데이터 레이크로 로드하는 오픈소스 ELT(Extract, Load, Transform) 플랫폼입니다. 300개 이상의 사전 구축된 커넥터를 제공하며, 커스텀 커넥터를 쉽게 개발할 수 있는 CDK(Connector Development Kit)도 함께 제공합니다.

기존의 ETL 도구들과 달리 Airbyte는 데이터 변환을 목적지에서 수행하는 ELT 패러다임을 따릅니다. 이를 통해 원시 데이터를 그대로 저장하고, dbt와 같은 도구로 필요에 따라 변환 작업을 수행할 수 있어 더 유연한 데이터 파이프라인 구축이 가능합니다.

Airbyte의 핵심 강점은 커뮤니티 기반의 커넥터 생태계입니다. REST API, 데이터베이스, SaaS 애플리케이션 등 거의 모든 데이터 소스에 대한 커넥터가 존재하며, 새로운 커넥터도 활발하게 추가되고 있습니다. 또한 증분 동기화, 스키마 변경 감지 등 엔터프라이즈급 기능도 지원합니다.

배포 옵션으로는 자체 호스팅(Docker, Kubernetes)과 관리형 클라우드 서비스가 있습니다. 자체 호스팅 시에도 UI가 제공되어 비개발자도 쉽게 데이터 파이프라인을 설정하고 모니터링할 수 있으며, API와 Terraform 프로바이더를 통한 자동화도 지원됩니다.

코드 예제

YAML 클릭하여 복사
# Airbyte 커넥터 설정 예제 (connection.yaml)
# PostgreSQL에서 BigQuery로 데이터 동기화

version: "0.1.0"

# 소스 커넥터 설정 (PostgreSQL)
source:
  sourceType: postgres
  name: production-postgres
  config:
    host: db.example.com
    port: 5432
    database: analytics
    username: ${POSTGRES_USER}
    password: ${POSTGRES_PASSWORD}
    schemas:
      - public
      - sales
    replication_method:
      method: CDC
      replication_slot: airbyte_slot
      publication: airbyte_publication

# 목적지 커넥터 설정 (BigQuery)
destination:
  destinationType: bigquery
  name: analytics-warehouse
  config:
    project_id: my-gcp-project
    dataset_id: raw_data
    dataset_location: asia-northeast3
    credentials_json: ${BIGQUERY_CREDENTIALS}
    loading_method:
      method: GCS Staging
      gcs_bucket_name: airbyte-staging
      gcs_bucket_path: /staging

# 동기화 설정
connection:
  name: postgres-to-bigquery-sync
  namespaceDefinition: source
  namespaceFormat: "${SOURCE_NAMESPACE}"
  prefix: "raw_"

  # 동기화 스케줄
  schedule:
    scheduleType: cron
    cronExpression: "0 */6 * * *"  # 6시간마다

  # 스트림 설정 (테이블별 동기화 방식)
  syncCatalog:
    streams:
      - stream:
          name: orders
          namespace: sales
        config:
          syncMode: incremental
          cursorField:
            - updated_at
          destinationSyncMode: append_dedup
          primaryKey:
            - - order_id

      - stream:
          name: customers
          namespace: public
        config:
          syncMode: incremental
          cursorField:
            - modified_date
          destinationSyncMode: append_dedup
          primaryKey:
            - - customer_id

      - stream:
          name: products
          namespace: public
        config:
          syncMode: full_refresh
          destinationSyncMode: overwrite

# Airbyte Terraform 설정 예제
# terraform/airbyte.tf
---
resource "airbyte_source_postgres" "production" {
  name         = "production-postgres"
  workspace_id = var.airbyte_workspace_id

  configuration = {
    host     = var.postgres_host
    port     = 5432
    database = "analytics"
    username = var.postgres_user
    password = var.postgres_password

    replication_method = {
      replication_method_cdc = {
        replication_slot = "airbyte_slot"
        publication      = "airbyte_publication"
      }
    }
  }
}

resource "airbyte_destination_bigquery" "warehouse" {
  name         = "analytics-warehouse"
  workspace_id = var.airbyte_workspace_id

  configuration = {
    project_id       = var.gcp_project_id
    dataset_id       = "raw_data"
    dataset_location = "asia-northeast3"
    credentials_json = var.bigquery_credentials

    loading_method = {
      gcs_staging = {
        gcs_bucket_name = "airbyte-staging"
        gcs_bucket_path = "/staging"
      }
    }
  }
}

실무에서 이렇게 사용됩니다

데이터 엔지니어: "SaaS 데이터 통합 때문에 커스텀 스크립트가 너무 많아졌어요. 유지보수가 힘듭니다."

테크리드: "Airbyte 도입하면 어떨까요? Salesforce, HubSpot 커넥터 다 있고, CDC 지원도 됩니다."

데이터 엔지니어: "스케줄링이나 모니터링은요? 기존 Airflow랑 연동 가능한가요?"

테크리드: "Airbyte API로 Airflow에서 트리거할 수 있어요. 실패 알림도 Slack 연동되고, 증분 동기화로 비용도 줄일 수 있습니다."

면접관: "Fivetran이나 Stitch 같은 상용 도구 대신 Airbyte를 선택한 이유가 있나요?"

지원자: "비용과 유연성 때문입니다. Airbyte는 오픈소스라 라이선스 비용이 없고, 커스텀 커넥터 개발도 CDK로 쉽게 할 수 있습니다. 저희 레거시 시스템 연동에 커스텀 커넥터를 만들어 사용했습니다."

면접관: "CDC 기반 증분 동기화 경험이 있으시군요. 소스 DB 부하는 어떻게 관리하셨나요?"

지원자: "PostgreSQL의 논리적 복제를 사용해서 읽기 전용 레플리카에서 CDC를 수행했고, 동기화 주기도 피크 시간을 피해 설정했습니다."

리뷰어: "이 커넥터 설정에서 full_refresh로 되어 있는데, 테이블 크기가 큰 것 같은데 incremental로 바꾸는 게 좋지 않을까요?"

개발자: "이 테이블은 updated_at 컬럼이 없어서 증분 동기화가 어려워요."

리뷰어: "그럼 소스 테이블에 트리거로 updated_at 추가하거나, Airbyte의 CDC 모드를 사용하면 WAL 기반으로 변경분만 캡처할 수 있어요. 데이터 양이 많으면 동기화 시간이 길어지니까 검토해보세요."

주의사항

관련 용어

더 배우기