데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
Fivetran은 완전 관리형(Managed) ELT(Extract, Load, Transform) 데이터 통합 플랫폼입니다. SaaS, 데이터베이스, 파일 시스템 등 다양한 소스의 데이터를 자동으로 추출하여 데이터 웨어하우스나 데이터 레이크에 표준화된 형식으로 로드하는 서비스를 제공합니다.
인프라 관리, 커넥터 유지보수, 스키마 변경 감지 및 동기화, API 변경 대응 등을 Fivetran이 전담합니다. 사용자는 설정과 모니터링에만 집중.
소스 시스템의 컬럼 추가/삭제/변경을 자동으로 감지하고 대상 데이터 웨어하우스의 스키마를 동기화합니다. 수동 DDL 작업 불필요.
로그 기반 CDC를 지원하여 소스 시스템의 부하를 최소화하면서도 실시간에 가까운 데이터 동기화를 가능하게 합니다.
기존의 자체 구축 파이프라인 또는 오픈소스 도구와 비교했을 때 Fivetran의 핵심 가치는 운영 부담의 제거와 시간 대비 가치에 있습니다.
| 비교 항목 | Fivetran | 자체 구축 (Airflow + 커스텀 코드) | 오픈소스 (Airbyte, Singer) |
|---|---|---|---|
| 초기 구축 시간 | 몇 시간 ~ 몇 일 | 몇 주 ~ 몇 달 | 몇 일 ~ 몇 주 |
| 운영 부담 | 매우 낮음 (관리형) | 매우 높음 (모든 인프라/코드 관리) | 중간 ~ 높음 (셀프 호스팅 관리) |
| 커넥터 유지보수 | Fivetran 담당 | 팀 내부 담당 | 커뮤니티/팀 내부 담당 |
| 스키마 변경 대응 | 자동 동기화 | 수동 대응 필요 | 커넥터에 따라 다름 |
| 비용 구조 | 사용량 기반 (월간 활성 행수) | 인프라 비용 + 인건비 | 인프라 비용 + (인건비) |
Fivetran의 아키텍처는 사용자 대신 데이터를 이동시키는 "관리형 파이프라인"입니다.
Fivetran 대시보드와 API를 사용한 첫 번째 커넥터 설정부터 데이터 확인까지의 과정입니다.
Fivetran 대시보드에 로그인 후, 데이터를 로드할 대상(예: Snowflake)을 먼저 설정합니다.
대시보드에서 "Connectors" → "Add Connector" → "PostgreSQL" 선택 후 소스 정보 입력.
# 필요한 경우 소스 DB에 복제 권한 부여 (CDC용)
ALTER USER fivetran_user REPLICATION;
# pip install fivetran_api
import os
from fivetran_api import FivetranAPI
# API 키 설정 (환경 변수 권장)
api_key = os.getenv('FIVETRAN_API_KEY')
api_secret = os.getenv('FIVETRAN_API_SECRET')
client = FivetranAPI(api_key, api_secret)
# 커넥터 목록 조회
connectors = client.list_connectors(group_id='your_workspace_id')
for connector in connectors['data']['items']:
print(f"ID: {connector['id']}, Service: {connector['service']}, Status: {connector['status']['setup_state']}")
# 특정 커넥터 동기화 트리거
sync_response = client.force_sync_connector(connector_id='your_connector_id')
print(f"Sync triggered: {sync_response['code']}")
# Fivetran CLI 설치 및 설정 (공식 문서 참고)
# 커넥터 상태 확인
fivetran connector status --id your_connector_id
# 동기화 로그 조회
fivetran connector logs --id your_connector_id --limit 5
-- Fivetran이 생성한 스키마에서 데이터 확인
SELECT *
FROM your_database.fivetran_schema.your_source_table
LIMIT 10;
-- 동기화 상태 메타데이터 확인 (사용 가능한 경우)
SELECT *
FROM fivetran_audit.database.sync_log
ORDER BY event_time DESC;
| 설정 항목 | 설명 | 권장값/팁 |
|---|---|---|
| Sync Frequency | 동기화 실행 빈도 | 실시간성 요구사항에 따라 5분 ~ 24시간. 초기에는 30분으로 시작. |
| Historical Sync | 초기 전체 데이터 로드 | 대용량 소스는 기간을 나눠서(paused) 실행하여 대상 DB 부하 관리. |
| Schema Change Handling | 소스 스키마 변경 시 동작 | 기본값 "AUTO" 권장. 중요한 테이블은 "NOTIFY"로 먼저 알림 받기. |
| Destination Prefix | 대상 스키마 이름 접두사 | 소스 구분을 위해 사용 (예: src_, stg_). |
| Data Time Travel | 대상이 지원할 경우 히스토리 데이터 보관 | Snowflake Time Travel, BigQuery 변경 내역과 연동 권장. |
| Network Policies | Fivetran IP 화이트리스트 | 소스/대상 방화벽에 반드시 Fivetran IP 범위 추가 필요. |
증상: 대시보드에서 Sync Status가 "Delayed" 또는 로그에서 "Behind by X hours" 표시.
원인 및 해결:
임시 조치: 커넥터를 pause 후 resume하여 재시작 (마지막 체크포인트부터 재개).
증상: 대상 테이블에 동일한 PK를 가진 행이 여러 개 존재.
원인: 대부분 소스에서의 논리적 삭제 후 재생성, 또는 커넥터의 재설정(reset) 후 증분 키 문제.
해결:
_fivetran_deleted 또는 _fivetran_synced 컬럼을 사용해 중복 제거 뷰 생성.Fivetran 비용은 월간 활성 행(Monthly Active Rows, MAR)로 책정됩니다.
API와 웹훅을 활용해 모니터링을 구축하세요.
# 간단한 동기화 실패 감지 스크립트 예제
import requests
import smtplib
def check_connector_status(api_key, api_secret, connector_id):
url = f"https://api.fivetran.com/v1/connectors/{connector_id}"
auth = (api_key, api_secret)
resp = requests.get(url, auth=auth).json()
status = resp['data']['status']['setup_state']
sync_state = resp['data']['status']['sync_state']
if sync_state == 'failed' or status == 'broken':
# 알림 발송 (Slack, Email, PagerDuty 등)
send_alert(f"Fivetran Connector {connector_id} 실패: {status}/{sync_state}")
return resp
커넥터 리셋은 대상의 모든 데이터를 삭제하고 처음부터 전체 동기화를 다시 시작합니다. 매우 신중하게 진행해야 합니다. 반드시 리셋 전에 대상 데이터를 백업하거나, 중요한 다운스트림 프로세스가 중단되도록 조치하세요.