Data Engineering 플레이북 — Part 5: 클라우드 & 인프라 심층 가이드 (FinOps, IaC)
클라우드 지출이 글로벌 1조 달러를 돌파한 2026년, 체계적인 비용 관리 없이는 예산의 32-40%가 유휴 리소스와 과잉 프로비저닝으로 사라진다. 이 글에서는 데이터 엔지니어링 팀을 위한 AWS·GCP·Azure 서비스 카테고리별 완전 비교와 Snowflake·BigQuery·Redshift 웨어하우스 선택 가이드를 제공한다. IaC 관점에서는 Terraform/OpenTofu 프로젝트 구조, Medallion 레이어 버킷 코드화, CI/CD 자동화 워크플로우와 7대 모범 사례를 실전 코드와 함께 다룬다. FinOps 섹션에서는 태깅 표준화, RI·Savings Plan 구매 전략, 스토리지 계층화, BigQuery 비용 제어 패턴, Spot 인스턴스 활용까지 클라우드 비용을 25-30% 절감하는 7가지 실전 전략을 코드로 설명하며, 멀티클라우드 데이터 이그레스 비용 최소화와 벤더 락인 회피를 위한 오픈 표준 채택 전략으로 마무리한다.
시리즈 구성
- Part 1 — 개요 & 2026 핵심 트렌드 (완료)
- Part 2 — 데이터 아키텍처 설계 (완료)
- Part 3 — 데이터 파이프라인 구축 실전 가이드 (완료)
- Part 4 — 데이터 품질 & 거버넌스 심층 가이드 (완료)
- Part 5 — 클라우드 & 인프라 심층 가이드 (FinOps, IaC) (현재 편)
- Part 6 — AI-Native 데이터 엔지니어링 (연재 예정)
- Part 7 — DataOps & 팀 운영 플레이북 (연재 예정)
목차
- 2026년 클라우드 시장 현황
- AWS vs GCP vs Azure — 데이터 플랫폼 완전 비교
- 클라우드 웨어하우스 3파전 — Snowflake vs BigQuery vs Redshift
- IaC — 인프라를 코드로 관리하기
- FinOps — 클라우드 비용을 1등급 시민으로
- 데이터 플랫폼 비용 최적화 실전
- 멀티클라우드 & 하이브리드 전략
- 실전 체크리스트
1. 2026년 클라우드 시장 현황
글로벌 클라우드 지출이 2026년 1조 달러를 돌파했다. 동시에 체계적인 비용 관리 없이는 조직이 클라우드 예산의 32-40%를 유휴 리소스, 과잉 프로비저닝, 미모니터링 서비스에 낭비한다는 연구 결과가 나오고 있다.
2026년 클라우드 시장 점유율은 다음과 같다.
- AWS: 약 31% — 서비스 폭과 생태계 성숙도 1위
- Azure: 약 23-25% — 가장 빠르게 성장, Microsoft 365 통합과 OpenAI 독점 파트너십 주도
- GCP: 약 11-12% — 데이터 분석과 AI/ML 워크로드에서 차별화, 가장 빠른 성장률(YoY 23%)
2026년의 현실: 최선의 클라우드는 AWS, Azure, GCP 중 하나가 아니다. 데이터 엔지니어링 팀이 자신 있게, 일관되게, 지속 가능하게 운영할 수 있는 플랫폼이 최선이다.
2. AWS vs GCP vs Azure — 데이터 플랫폼 완전 비교
서비스 매핑 — 카테고리별 대응 서비스
| 카테고리 | AWS | GCP | Azure |
|---|---|---|---|
| 오브젝트 스토리지 | S3 | Cloud Storage | Blob Storage / ADLS Gen2 |
| 데이터 웨어하우스 | Redshift | BigQuery | Synapse Analytics |
| 관리형 Spark | EMR | Dataproc | HDInsight / Synapse Spark |
| 스트리밍 | Kinesis | Pub/Sub | Event Hubs |
| 스트림 처리 | Kinesis Analytics | Dataflow (Apache Beam) | Stream Analytics |
| 서버리스 ETL | Glue | Dataflow | Data Factory |
| 관리형 Kafka | MSK | Confluent on GCP | Event Hubs (Kafka 호환) |
| Airflow 관리형 | MWAA | Cloud Composer | 없음 (ADF로 대체) |
| 데이터 카탈로그 | Glue Data Catalog | Dataplex | Purview |
| ML 플랫폼 | SageMaker | Vertex AI | Azure ML |
| Lakehouse | AWS Lake Formation | BigLake | Microsoft Fabric |
| 데이터 공유 | AWS Data Exchange | Analytics Hub | Azure Data Share |
AWS — 폭과 생태계
AWS는 2026년에도 데이터 엔지니어링 채용 시장에서 가장 높은 수요를 보이며, 북미 기준 GCP 대비 약 2.8:1의 비율로 채용 공고가 많다.
AWS의 강점
- 서비스 폭이 가장 넓다 (200개+ 관리형 서비스)
- 가장 큰 파트너 생태계와 커뮤니티
- S3 + Iceberg + Athena 조합으로 비용 효율적 레이크하우스 구현 가능
- Lake Formation으로 세분화된 접근 제어
AWS의 주의점
- 서비스가 많은 만큼 운영 복잡도도 높다
- 비슷한 역할을 하는 서비스가 중복 존재 (EMR vs Glue vs Athena 선택 혼란)
- 비용 예측이 어렵고 데이터 이그레스 비용 주의 필요
GCP — AI/ML과 분석의 강자
GCP는 데이터 분석 중심 파이프라인과 AI/ML 통합에서 차별화된다. BigQuery ML이 이제 SQL 쿼리 내에서 직접 LLM 파인튜닝을 지원하는 것은 주목할 만한 발전이다.
GCP의 강점
- BigQuery: 서버리스, 페타바이트 쿼리를 초 단위로, 운영 부담 없음
- 구글의 글로벌 프라이빗 네트워크로 일관된 낮은 레이턴시
- Vertex AI + BigQuery ML의 데이터-AI 통합이 가장 자연스러움
- Cloud Composer(관리형 Airflow)의 성숙도 높음
GCP의 주의점
- BigQuery의 바이트 스캔 과금: 쿼리 최적화 없으면 비용 폭탄
- AWS 대비 서비스 폭이 좁음
- 기업 영업·지원 조직이 AWS 대비 약함
Azure — 엔터프라이즈와 하이브리드 강자
Azure는 Microsoft 365, Power BI, Windows/.NET 스택과의 통합에서 압도적이다. Microsoft Fabric이 Data Factory, Synapse, Power BI, Purview를 단일 거버넌스 레이어로 통합해 엔터프라이즈 IT 팀들이 빠르게 채택하고 있다.
Azure의 강점
- Office 365, Teams, SharePoint 데이터와의 네이티브 통합
- 컴플라이언스 인증 수가 3사 중 가장 많음 (금융·의료·정부 필수)
- Hybrid/On-premise 연결 성숙도 높음 (Azure Arc)
- Microsoft Fabric으로 통합 분석 경험 급속 개선 중
Azure의 주의점
- 계층화된 가격 구조로 비용 예측 어려움
- 서비스명이 자주 바뀌어 러닝 커브 존재
- Azure 고유 서비스에 의존하면 벤더 락인 위험
클라우드 선택 의사결정 가이드
3. 클라우드 웨어하우스 3파전
현대 데이터 스택의 핵심 결정 중 하나. Snowflake, BigQuery, Redshift는 각각 다른 철학과 강점을 가진다.
아키텍처 비교
핵심 비교표
| 항목 | Snowflake | BigQuery | Redshift |
|---|---|---|---|
| 아키텍처 | 컴퓨트/스토리지 분리 | 완전 서버리스 | 프로비전드/서버리스 |
| 멀티클라우드 | ✅ AWS/GCP/Azure | ❌ GCP 전용 | ❌ AWS 전용 |
| 과금 방식 | 컴퓨트 초당 + 스토리지 | 스캔 바이트 or 슬롯 | 노드 시간 or RPU |
| 운영 부담 | 낮음 (완전 관리형) | 매우 낮음 (서버리스) | 중간 (튜닝 필요) |
| 동시성 | ✅ 매우 높음 (WH 분리) | ✅ 높음 | △ 클러스터 설정 의존 |
| 반정형 데이터 | ✅ VARIANT 타입 | ✅ JSON/STRUCT/ARRAY | △ SUPER/PartiQL |
| ML 통합 | ✅ Snowpark | ✅ BigQuery ML (LLM 포함) | ✅ SageMaker |
| 데이터 공유 | ✅ 업계 최고 | ✅ Analytics Hub | △ 제한적 |
| AWS 통합 | 보통 | 낮음 | ✅ 최고 |
| 비용 예측성 | 중간 | 낮음 (쿼리 비용 불예측) | 높음 (프로비전드) |
웨어하우스 선택 가이드
실무 권고: 팀이 워크로드를 ETL과 BI로 분리해서 운영하고 높은 동시성이 필요하다면 Snowflake의 Virtual Warehouse 격리가 빛을 발한다. 비정형 데이터가 없고 GCP를 주로 쓴다면 BigQuery의 서버리스 편의성이 운영 비용을 크게 낮춘다. AWS 생태계 깊은 통합이 최우선이면 Redshift가 여전히 강력한 선택이다.
4. IaC — 인프라를 코드로
IaC가 왜 필수인가?
데이터 플랫폼 인프라를 콘솔에서 수동으로 클릭해서 만드는 팀은 결국 다음 문제에 직면한다. 재현 불가능한 환경("내 Dev에서는 됐는데 Prod에서 안 됨"), 누가 무엇을 변경했는지 모르는 상황, 그리고 DR(재해 복구) 시 인프라를 다시 만드는 데 몇 주가 걸리는 상황이다.
IaC(Infrastructure as Code)는 인프라를 코드로 정의해 Git으로 버전 관리하고, CI/CD로 자동 배포하는 방식이다. 애플리케이션 코드에 적용하는 소프트웨어 엔지니어링 원칙을 인프라에도 동일하게 적용한다.
IaC의 핵심 가치: IaC는 Git에 불변(Immutable) 감사 로그를 남겨 규제 요건을 쉽게 충족하고, 인프라 전체를 다른 리전에서 빠르고 신뢰성 있게 재현할 수 있게 한다.
Terraform vs OpenTofu
2023년 HashiCorp가 Terraform의 라이선스를 오픈소스 MPL에서 BSL로 변경하면서 지형이 바뀌었다. OpenTofu는 Linux Foundation이 관리하는 커뮤니티 포크로, Terraform과 완전히 호환되며 새로운 기능을 지속적으로 추가하고 있다.
# Terraform:
terraform init && terraform plan && terraform apply
# OpenTofu (drop-in 대체):
tofu init && tofu plan && tofu apply
2026년 현재 OpenTofu는 Terraform의 견고한 대안으로 성숙했다. BSL 라이선스 제약이 문제가 되는 조직에서는 OpenTofu로의 전환이 현실적인 선택이다.
Terraform 프로젝트 구조 — 데이터 플랫폼 예시
data-platform-infra/
|-- modules/ # 재사용 가능한 모듈
| |-- snowflake-warehouse/ # Snowflake 웨어하우스 모듈
| | |-- main.tf
| | |-- variables.tf
| | |-- outputs.tf
| | `-- README.md
| |-- s3-data-lake/ # S3 레이크 모듈
| |-- kafka-cluster/ # MSK 클러스터 모듈
| `-- airflow-mwaa/ # MWAA 오케스트레이터 모듈
|-- environments/ # 환경별 설정
| |-- dev/
| | |-- main.tf # dev 환경 리소스 조합
| | |-- terraform.tfvars # dev 환경 변수값
| | `-- backend.tf # 원격 상태 설정 (S3 + DynamoDB)
| |-- staging/
| `-- prod/
`-- .github/workflows/
`-- terraform.yml # CI/CD 자동화
핵심 Terraform 패턴 — 데이터 플랫폼
# modules/snowflake-warehouse/main.tf
terraform {
required_providers {
snowflake = {
source = "Snowflake-Labs/snowflake"
version = "~> 0.89"
}
}
}
resource "snowflake_warehouse" "this" {
name = var.warehouse_name
warehouse_size = var.warehouse_size # XSMALL, SMALL, MEDIUM...
auto_suspend = var.auto_suspend_seconds # 유휴 시 자동 정지 (비용 절감 핵심!)
auto_resume = true
comment = var.description
max_cluster_count = var.max_clusters
min_cluster_count = 1
}
resource "snowflake_role" "warehouse_role" {
name = "${var.warehouse_name}_ROLE"
}
resource "snowflake_warehouse_grant" "usage" {
warehouse_name = snowflake_warehouse.this.name
privilege = "USAGE"
roles = [snowflake_role.warehouse_role.name]
}
resource "snowflake_role_grants" "team_assignment" {
role_name = snowflake_role.warehouse_role.name
users = var.team_users
}
# modules/s3-data-lake/main.tf — Medallion 아키텍처 버킷 생성
locals {
layers = ["bronze", "silver", "gold"]
}
resource "aws_s3_bucket" "layers" {
for_each = toset(local.layers)
bucket = "${var.project}-${each.key}-${var.environment}"
tags = {
Layer = each.key
Project = var.project
Environment = var.environment
ManagedBy = "terraform"
CostCenter = var.cost_center # FinOps 비용 귀속을 위한 태깅
Team = var.team
}
}
resource "aws_s3_bucket_versioning" "bronze" {
bucket = aws_s3_bucket.layers["bronze"].id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_lifecycle_configuration" "bronze" {
bucket = aws_s3_bucket.layers["bronze"].id
rule {
id = "transition-to-ia"
status = "Enabled"
transition {
days = 90
storage_class = "STANDARD_IA" # 90일 후 IA로 이동 (비용 40% 절감)
}
transition {
days = 365
storage_class = "GLACIER" # 365일 후 Glacier (비용 80% 절감)
}
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "gold" {
bucket = aws_s3_bucket.layers["gold"].id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
kms_master_key_id = var.kms_key_id
}
}
}
Terraform CI/CD — 자동화 워크플로우
# .github/workflows/terraform.yml
name: Terraform Data Platform
on:
pull_request:
paths: ['infra/**']
push:
branches: [main]
paths: ['infra/**']
jobs:
plan:
runs-on: ubuntu-latest
permissions:
id-token: write # OIDC 인증 (시크릿 없이 AWS 접근)
contents: read
pull-requests: write # PR에 플랜 결과 코멘트
steps:
- uses: actions/checkout@v4
- name: AWS 자격증명 설정 (OIDC — 시크릿 없음)
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActions-Terraform
aws-region: ap-northeast-2
- name: Terraform Init
run: terraform init
working-directory: infra/environments/prod
- name: Terraform Format 검사
run: terraform fmt -check -recursive
- name: Terraform Validate
run: terraform validate
- name: Terraform Plan
id: plan
run: terraform plan -out=tfplan -no-color
working-directory: infra/environments/prod
- name: PR에 플랜 결과 코멘트
uses: actions/github-script@v7
if: github.event_name == 'pull_request'
with:
script: |
const output = `#### Terraform Plan 결과
\`\`\`\n${{ steps.plan.outputs.stdout }}\n\`\`\``;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
apply:
needs: plan
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
environment: production # GitHub 환경 보호 규칙 (수동 승인)
steps:
- name: Terraform Apply
run: terraform apply -auto-approve tfplan
working-directory: infra/environments/prod
IaC 7대 모범 사례
① 모든 시크릿을 코드 밖에 보관
→ AWS Secrets Manager, HashiCorp Vault 사용
→ 절대 .tfvars에 비밀번호 하드코딩 금지
② 원격 State 저장소 사용
→ S3 + DynamoDB 락 (AWS)
→ GCS + 락 파일 (GCP)
→ 로컬 state 파일은 팀 협업 불가
③ 모듈로 재사용성 확보
→ 동일 패턴을 여러 환경에 반복하지 않음
→ 시맨틱 버저닝으로 모듈 버전 관리
④ 태깅 표준 강제
→ Team, Project, Environment, CostCenter 태그 필수
→ FinOps 비용 귀속의 기반
⑤ 드리프트 탐지 자동화
→ 코드 외 수동 변경 감지 → Slack 알림
→ 정기적 terraform plan으로 드리프트 확인
⑥ 코드 리뷰 의무화
→ 인프라 변경 PR은 반드시 동료 검토
→ 시맨틱 버저닝 적용 시 배포 실패 30% 감소
⑦ 환경별 분리
→ dev/staging/prod 별도 state 파일
→ prod는 수동 승인 게이트 추가
5. FinOps — 클라우드 비용을 1등급 시민으로
FinOps란?
FinOps(Financial Operations)는 엔지니어링, 재무, 비즈니스 팀이 클라우드 비용에 대한 공동 책임을 갖고 협력하는 문화적 실천이자 방법론이다. 비용을 엔지니어링과 무관한 재무 문제로 보는 것이 아니라, 각 파이프라인과 팀의 공동 책임으로 만드는 것이 핵심이다.
FinOps는 단순히 비용을 줄이는 것이 아니다. 비용과 비즈니스 가치를 일치시키는 것이다. 잘 운영된 FinOps 프로그램은 월 클라우드 지출을 일관되게 25-30% 절감하며, 성숙한 프로그램은 낭비 비율을 40%에서 15-20%로 낮춘다.
FinOps 성숙도 모델 (Crawl → Walk → Run)
[Crawl (초기): 가시성 확보]
- 리소스 태깅 시작
- 팀별 비용 귀속 대시보드 구축
- 상위 5-10개 비용 드라이버 식별
- 현황: FinOps Foundation 기준 61.8%의 조직이 이 단계
[Walk (중간): 최적화 실천]
- 쇼백(Showback)/차지백(Chargeback) 모델 도입
- 예측 가능한 워크로드에 RI/Savings Plan 구매
- 컴퓨트 Right-sizing 실행
- 엔지니어 팀이 정기적으로 비용 피드백 수신
[Run (성숙): 비용 내재화]
- Shift-left FinOps: 배포 전 비용 예측
- 파이프라인별·기능별 단위 경제(Unit Economics)
- 자동화된 이상 비용 탐지 및 최적화
- 비용이 모든 아키텍처 결정의 1등급 기준
FinOps 핵심 전략 7가지
전략 1: 리소스 태깅 표준화
태깅은 FinOps의 출발점이다. 태그 없는 리소스는 어느 팀·프로젝트에 비용을 귀속해야 할지 알 수 없다.
# Terraform 태깅 표준 — 모든 리소스에 강제 적용
locals {
mandatory_tags = {
Team = var.team # 비용 귀속 (팀)
Project = var.project # 비용 귀속 (프로젝트)
Environment = var.environment # dev/staging/prod
CostCenter = var.cost_center # 재무 비용 센터 코드
Pipeline = var.pipeline_name # 파이프라인별 비용 추적
Owner = var.owner_email # 담당자
}
}
# AWS SCP로 태그 없는 리소스 생성 차단
# {
# "Effect": "Deny",
# "Action": ["ec2:RunInstances", "s3:CreateBucket"],
# "Condition": {
# "Null": {"aws:RequestTag/Team": "true"}
# }
# }
전략 2: RI / Savings Plan 구매
예측 가능한 워크로드(Airflow, 24/7 파이프라인 등)에 Reserved Instances 또는 Savings Plan을 적용하면 On-Demand 대비 최대 60% 절감이 가능하다.
워크로드 유형별 구매 전략:
안정적 (24/7):
Airflow 워커, Kafka 브로커, 상시 운영 DB
→ 1년 Reserved Instance (40-60% 할인)
가변적 (배치 피크):
Spark 처리, 야간 배치 작업
→ Savings Plan (유연성 높음, 최대 66% 할인)
→ Spot Instance (최대 90% 할인, 중단 감내 가능한 경우)
간헐적 (개발/테스트):
dev 환경, 임시 분석
→ On-Demand + 자동 종료 스케줄러
전략 3: 스토리지 계층화
# S3 스토리지 클래스 비용 비교 (GB/월 기준, 서울 리전)
storage_costs = {
"S3 Standard": 0.025, # $/GB/월 — 자주 접근하는 데이터
"S3 Standard-IA": 0.0138, # $/GB/월 — 30일 이상 미접근 (45% 절감)
"S3 Glacier IR": 0.005, # $/GB/월 — 아카이브 (80% 절감)
"S3 Glacier Deep": 0.002, # $/GB/월 — 장기 보존 (92% 절감)
}
# 수명 주기 전략:
# Bronze Layer: 90일 → Standard-IA, 1년 → Glacier
# Silver Layer: 180일 → Standard-IA
# Gold Layer: Standard 유지 (BI 쿼리 빈도 높음)
# 절감 효과 예시 (1TB 기준, 1년 후):
standard_cost = 1000 * 0.025 * 12 # = $300
lifecycle_cost = (1000 * 0.025 * 3) + (1000 * 0.0138 * 9) # = $199
# 약 34% 절감
전략 4: 컴퓨트 Right-sizing
# Snowflake 웨어하우스 비용 최적화
# auto_suspend 설정이 가장 큰 비용 절감 포인트
# 나쁜 예: 항상 켜진 Large 웨어하우스
# 비용: Large = 8 크레딧/시간 × 24시간 × 30일 = 5,760 크레딧/월
# 좋은 예: 필요할 때만 켜지는 Small 웨어하우스
# - auto_suspend = 60 (1분 유휴 시 자동 정지)
# - auto_resume = true (쿼리 시 자동 재시작)
# 실제 사용량 기준: 하루 4시간 → 4 크레딧/시간 × 4시간 × 30일 = 480 크레딧/월
# 절감율: (5760 - 480) / 5760 = 약 92% 절감
전략 5: BigQuery 비용 제어
-- BigQuery 비용 폭탄 방지 패턴
-- ❌ 나쁜 예: SELECT *는 전체 테이블 스캔
SELECT * FROM `project.dataset.events`
WHERE date = '2026-04-19';
-- ✅ 좋은 예: 파티션 필터 + 컬럼 선택으로 스캔 최소화
SELECT user_id, event_type, created_at
FROM `project.dataset.events`
WHERE DATE(created_at) = '2026-04-19' -- 파티션 프루닝!
AND event_type = 'purchase';
-- 사전 비용 추정 (dry run):
-- bq query --dry_run --use_legacy_sql=false "SELECT ..."
-- BigQuery 슬롯 예약으로 비용 예측성 확보
-- 변동이 큰 workload → On-demand
-- 안정적 workload → Capacity Commitment (최대 60% 절감)
전략 6: Spot / Preemptible 인스턴스 활용
# Spark 배치 처리에 Spot 인스턴스 활용 (EMR 예시)
emr_config = {
"InstanceGroups": [
{
"Name": "Master",
"InstanceRole": "MASTER",
"InstanceType": "m5.xlarge",
"InstanceCount": 1,
"Market": "ON_DEMAND" # Master는 On-Demand (중단 시 전체 실패)
},
{
"Name": "Core",
"InstanceRole": "CORE",
"InstanceType": "m5.4xlarge",
"InstanceCount": 4,
"Market": "SPOT", # Core는 Spot (최대 70% 절감)
"BidPrice": "0.50"
}
]
}
# 주의: Spot 중단에 강건한 파이프라인 설계 필수
# - 체크포인팅으로 중간 진행 상태 저장
# - 멱등성 보장으로 재실행 안전성 확보
전략 7: FinOps 대시보드 — 비용 가시성 확보
# 파이프라인별 비용 귀속 쿼리 (AWS Cost Explorer + Python)
import boto3
def get_pipeline_costs(pipeline_name: str, start_date: str, end_date: str):
"""파이프라인 태그 기반 비용 조회"""
ce = boto3.client('ce', region_name='us-east-1')
response = ce.get_cost_and_usage(
TimePeriod={'Start': start_date, 'End': end_date},
Granularity='DAILY',
Filter={
'Tags': {
'Key': 'Pipeline',
'Values': [pipeline_name]
}
},
GroupBy=[
{'Type': 'DIMENSION', 'Key': 'SERVICE'}
],
Metrics=['UnblendedCost']
)
costs = {}
for result in response['ResultsByTime']:
date = result['TimePeriod']['Start']
for group in result['Groups']:
service = group['Keys'][0]
amount = float(group['Metrics']['UnblendedCost']['Amount'])
costs[f"{date}_{service}"] = amount
return costs
6. 데이터 플랫폼 비용 최적화 실전
쿼리 최적화 — 비용의 숨은 주범
쿼리 비효율은 클라우드 데이터 플랫폼에서 가장 큰 비용 낭비 원인 중 하나다.
-- ① 파티셔닝 활용 (BigQuery/Iceberg 공통)
-- ❌ 나쁜 예: 전체 테이블 스캔
SELECT * FROM orders WHERE YEAR(ordered_at) = 2026;
-- ✅ 좋은 예: 파티션 컬럼으로 필터
SELECT * FROM orders
WHERE ordered_at BETWEEN '2026-01-01' AND '2026-12-31';
-- Iceberg: 파티션 프루닝으로 해당 연도 파일만 스캔
-- ② 머티리얼라이즈드 뷰 활용
CREATE MATERIALIZED VIEW daily_revenue_mv AS
SELECT
DATE(ordered_at) AS order_date,
SUM(order_amount_usd) AS daily_revenue,
COUNT(*) AS order_count
FROM fct_orders
GROUP BY DATE(ordered_at);
-- ③ 컬럼형 포맷 + 컬럼 선택 최적화
-- ❌ 나쁜 예: SELECT * → 모든 컬럼 I/O
SELECT * FROM events WHERE event_date = '2026-04-19';
-- ✅ 좋은 예: 필요한 컬럼만 선택 → I/O 최소화
SELECT user_id, event_type, properties
FROM events
WHERE event_date = '2026-04-19';
-- ④ Snowflake: 웨어하우스 격리로 workload 분리
-- ETL 전용 WH (대형, 배치 시간대만) + BI 전용 WH (소형, 상시) 분리
스토리지 비용 체계적 접근
비용 절감 우선순위 (임팩트 순):
1순위: 수명 주기 정책 (S3/GCS 자동 계층화)
→ 구현 난이도: 낮음 / 절감 효과: 40-80%
2순위: 중복 데이터 제거 (Deduplication)
→ 동일 소스 데이터가 여러 레이어에 복사된 경우
→ Iceberg Time Travel로 중간 스냅샷 불필요 제거
3순위: 컬럼형 포맷 전환 (CSV → Parquet)
→ 스토리지 최대 87% 절감, 쿼리 성능도 개선
→ CSV 1GB → Parquet + Snappy 약 130MB
4순위: 불필요 스냅샷/버전 정리
→ Iceberg/Delta 테이블 expire_snapshots 정기 실행
# Iceberg 스냅샷 정리로 스토리지 비용 절감 (Spark SQL)
spark.sql("""
CALL catalog.system.expire_snapshots(
table => 'db.orders',
older_than => TIMESTAMP '2026-01-01 00:00:00',
retain_last => 5
)
""")
# 데이터 파일 정리 및 정렬
spark.sql("""
CALL catalog.system.rewrite_data_files(
table => 'db.orders',
strategy => 'sort',
sort_order => 'ordered_at DESC NULLS LAST'
)
""")
7. 멀티클라우드 & 하이브리드 전략
왜 멀티클라우드인가?
Flexera State of the Cloud 2024년 조사에 따르면 89%의 기업이 이미 멀티클라우드 전략을 운영하고 있다. 단일 클라우드 의존의 주요 리스크는 세 가지다: 벤더 가격 인상에 대한 협상력 부재, 클라우드 장애 시 단일 장애점, 그리고 특정 플랫폼의 최선 서비스 활용 불가다.
멀티클라우드 데이터 이동 비용 주의
멀티클라우드 전략의 가장 큰 숨은 비용은 데이터 이그레스(Egress) 요금이다.
클라우드 간 데이터 전송 비용 (2026년 기준):
AWS → 인터넷: $0.09/GB
GCP → 인터넷: $0.08/GB
Azure → 인터넷: $0.087/GB
1TB 데이터를 AWS에서 GCP로 이동하면:
$0.09 × 1,000 = $90 (매월 발생!)
절감 전략:
① 데이터 이동 최소화 — 가능한 한 단일 클라우드에서 처리
② Apache Iceberg 멀티엔진 쿼리 — 데이터 복사 없이 다른 엔진에서 쿼리
③ 압축 전송 — 전송량 줄임
④ Reserved 이그레스 약정 — 대량 전송 할인
벤더 락인 최소화 전략
오픈 표준 채택으로 이동성 확보:
스토리지 포맷: Apache Iceberg (모든 클라우드, 모든 엔진)
→ Snowflake, BigQuery, Redshift, Spark, Flink 모두 지원
오케스트레이션: Apache Airflow (자체 호스팅 가능)
→ MWAA (AWS), Cloud Composer (GCP), Astronomer 모두 동일 DAG
컨테이너: Kubernetes
→ EKS(AWS), GKE(GCP), AKS(Azure) 동일 워크로드 이식
메시징: Apache Kafka 프로토콜
→ AWS MSK, Confluent, Azure Event Hubs(Kafka 호환) 전환 가능
변환: dbt (어떤 웨어하우스든 동일 모델 실행)
→ Snowflake → BigQuery 이전 시 dbt 모델 재작성 최소화
8. 실전 체크리스트
📋 클라우드 플랫폼 선택
- 기술 스택, 팀 역량, 규제 요건을 고려한 클라우드 선택 기준이 있는가?
- 주요 클라우드 서비스의 총 소유 비용(TCO)을 추정했는가?
- 벤더 락인 리스크를 평가하고 오픈 표준 채택 전략이 있는가?
📋 IaC (Infrastructure as Code)
- 모든 데이터 인프라가 Terraform(또는 OpenTofu)으로 코드화되어 있는가?
- IaC 코드가 Git으로 버전 관리되고 있는가?
- CI/CD 파이프라인에서 Plan→Review→Apply 자동화가 구현됐는가?
- 시크릿이 코드 외부(Secrets Manager, Vault)에서 관리되는가?
- 인프라 드리프트 감지 및 알림이 설정됐는가?
- 모든 리소스에 팀/프로젝트/비용센터 태그가 강제 적용되는가?
📋 FinOps
- 파이프라인/팀별 클라우드 비용 귀속(Tagging)이 구현됐는가?
- 비용 대시보드가 엔지니어링 팀에게도 가시화돼 있는가?
- 예측 가능한 워크로드에 RI/Savings Plan을 구매했는가?
- 스토리지 수명 주기 정책이 모든 버킷에 적용됐는가?
- Snowflake/BigQuery 웨어하우스에 auto-suspend가 설정됐는가?
- 월별 비용 이상 알림(예산 80% 도달 시)이 설정됐는가?
- 정기적으로 Right-sizing 검토가 이루어지는가?
📋 쿼리 & 스토리지 최적화
- 모든 대형 테이블에 파티셔닝이 적용됐는가?
- SELECT *가 Gold 레이어에서 제거됐는가?
- 자주 실행되는 집계 쿼리에 머티리얼라이즈드 뷰가 활용되는가?
- 데이터가 컬럼형 포맷(Parquet, ORC)으로 저장됐는가?
- Iceberg 테이블의 스냅샷 만료 정책이 설정됐는가?
📋 멀티클라우드
- 데이터 이그레스 비용이 아키텍처 결정 시 고려됐는가?
- 오픈 표준(Iceberg, Kafka, Airflow)으로 이동성이 확보됐는가?
- 단일 클라우드 장애 시 비즈니스 연속성 계획이 있는가?
마치며
2026년 클라우드 인프라의 핵심 메시지는 간결하다.
가시성 없이는 최적화 없다. 비용을 모르면 줄일 수 없다. 태깅으로 시작하고, 대시보드로 가시화하고, 그다음 최적화하라.
IaC는 선택이 아닌 기본기다. 콘솔 클릭으로 만든 인프라는 재현할 수 없고, 감사할 수 없고, 협업할 수 없다.
가장 좋은 클라우드는 팀이 가장 잘 운영할 수 있는 클라우드다. 벤치마크 승자가 아닌, 조직의 현실에 맞는 선택이 장기적으로 더 나은 결과를 만든다.
다음 파트에서는 이 인프라 위에서 AI를 데이터 파이프라인에 직접 내재화하는 방법 — Feature Store, MLOps, AI Copilot, 에이전틱 파이프라인 — 을 심층 분석한다.
Part 6 예고: AI-Native 데이터 엔지니어링 심층 가이드
- Feature Store 설계와 운영
- MLOps와 데이터 엔지니어링의 교차점
- AI Copilot으로 파이프라인 개발 가속화
- 에이전틱(Agentic) 데이터 파이프라인 설계
- LLM 학습/파인튜닝을 위한 데이터 파이프라인
- 벡터 데이터베이스 통합 패턴