본문으로 건너뛰기

Multi-Region Infrastructure Architecture

개요

DTA-WI 프로젝트는 글로벌 사용자를 위한 Multi-Region Multi-Project 아키텍처를 사용합니다. 이 구조는 지역별 성능 최적화, 규제 준수, 그리고 데이터 주권을 고려하여 설계되었습니다.

아키텍처 구조

핵심 설계 원칙

  1. Region별 독립성: 각 지역이 독립적으로 운영 가능
  2. Project 분리: 지역별 다른 GCP 프로젝트 사용
  3. 중앙화된 설정: 공통 설정의 중앙 관리
  4. 확장성: 새로운 지역 추가 용이성

전체 아키텍처 다이어그램

🗂️ Terragrunt 디렉토리 구조

infrastructure/terragrunt/
├── shared/ # 🔗 공통 설정
│ ├── common.hcl # 조직 정보, APIs, 라벨
│ └── regions.hcl # 지역별 기본 설정
├── [environment]/ # 환경별 설정 (dev/stage/prod)
│ ├── env.hcl # 환경별 프로젝트 매핑
│ ├── global/ # 🌍 Global 서비스
│ │ ├── apis/ # GCP APIs 활성화
│ │ ├── iam/ # Identity & Access Management
│ │ ├── firebase/ # Firebase 설정
│ │ ├── bigquery/ # Global 분석 서비스
│ │ ├── pubsub/ # 메시징 시스템
│ │ └── secret_manager/ # 시크릿 관리
│ └── regions/ # 🗺️ Regional 서비스
│ ├── europe-west3/ # EU Region
│ │ ├── region.hcl # 지역별 설정
│ │ ├── cloudsql/ # 데이터베이스
│ │ ├── memorystore/ # Redis 캐시
│ │ ├── network/ # 네트워킹
│ │ ├── cloud-scheduler/ # 스케줄러
│ │ └── vpc-connector/ # VPC 연결
│ └── asia-northeast3/ # Asia Region (동일 구조)
│ └── ... (동일한 서비스들)

🎯 Project & Region 매핑

Environment별 프로젝트 구성

EnvironmentEuropean RegionAsian Region
Devdta-cloud-de-dev @ europe-west3dta-cloud-dev @ asia-northeast3
Stagedta-cloud-de-stage @ europe-west3dta-cloud-stage @ asia-northeast3
Proddta-cloud-de-prod @ europe-west3dta-cloud-prod @ asia-northeast3

지역별 특성

🇪🇺 Europe Region (europe-west3)

  • 위치: Frankfurt, Germany
  • Timezone: Europe/Berlin
  • 데이터 주권: EU GDPR 준수
  • 주요 사용자: 독일, 유럽 사용자
  • 지연시간: ~5-10ms (유럽 사용자 기준)

🇰🇷 Asia Region (asia-northeast3)

  • 위치: Seoul, South Korea
  • Timezone: Asia/Seoul
  • 데이터 주권: 한국 개인정보보호법 준수
  • 주요 사용자: 한국, 아시아 사용자
  • 지연시간: ~10-15ms (아시아 사용자 기준)

🔧 서비스 분류

🌍 Global Services (Region 독립적)

모든 region에서 공유하는 서비스들입니다:

서비스설명위치이유
APIsGCP APIs 활성화global/apis/프로젝트별 설정
IAM사용자, 역할, 권한 관리global/iam/통합 권한 관리
FirebaseFirebase 프로젝트 설정global/firebase/글로벌 인증
BigQuery글로벌 분석 데이터웨어하우스global/bigquery/통합 분석
PubSub메시징 및 이벤트 시스템global/pubsub/글로벌 이벤트
Secret Manager시크릿 및 설정 관리global/secret_manager/보안 중앙화

🗺️ Regional Services (Region별 분리)

각 지역에서 독립적으로 운영되는 서비스들입니다:

서비스설명분리 이유최적화 포인트
Cloud SQLPostgreSQL 데이터베이스데이터 지역성, 지연시간DB 인스턴스 크기
MemorystoreRedis 캐시세션 데이터 지역성메모리 크기
NetworkVPC, 서브넷, 방화벽네트워크 분리CIDR 범위
Cloud Scheduler시간 기반 스케줄러Timezone 최적화스케줄 시간
VPC ConnectorServerless VPC 연결지역별 네트워크IP 범위
Cloud Storage지역별 버킷데이터 지역성, 성능Storage class
OTEL Collector메트릭 수집지역별 모니터링수집 빈도

🚀 성능 최적화

지연시간 (Latency) 개선

성능 벤치마크

사용자 위치단일 RegionMulti-Region개선율
🇩🇪 독일 사용자~15ms~5ms66% 개선
🇰🇷 한국 사용자~150ms~10ms93% 개선
🇯🇵 일본 사용자~180ms~15ms91% 개선

💰 비용 최적화

Region별 리소스 전략

# 사용량 기반 region별 설정
locals {
region_configs = {
europe = {
# 주요 사용자 기반으로 안정적 운영
min_instances = 1
max_instances = 10
machine_type = "e2-standard-2"
disk_size = 20 # GB
}
asia = {
# 초기 단계: 비용 최적화 우선
min_instances = 0 # Scale-to-zero
max_instances = 5
machine_type = "e2-standard-2"
disk_size = 10 # GB
}
}
}

예상 비용 구조

월별 예상 비용 분석:

🇪🇺 Europe Region (기존):
- Cloud Run: $50
- Cloud SQL: $80
- Memorystore: $30
- Network: $40
- 소계: $200

🇰🇷 Asia Region (신규):
- Cloud Run: $30 (Scale-to-zero)
- Cloud SQL: $60 (작은 인스턴스)
- Memorystore: $20 (작은 크기)
- Network: $40
- 소계: $150

🌍 Global Services:
- BigQuery: $50
- PubSub: $20
- IAM/Firebase: $30
- 소계: $100

━━━━━━━━━━━━━━━━━━━━━━━━━
총 예상 비용: $450/월
기존 대비: +$150 (+50%)

🔐 보안 및 규제 준수

데이터 주권 (Data Sovereignty)

규제 준수 매트릭스

Region주요 규제데이터 저장개인정보 처리
EuropeGDPREU 데이터센터EU 개인정보 보호
AsiaK-ISMS, PIPA한국 데이터센터한국 개인정보 보호

📊 Dynamic Configuration

설정 상속 구조

Dynamic Configuration 예시

모든 서비스는 하드코딩 없이 동적 설정을 사용합니다:

# ✅ Good: Dynamic configuration
locals {
# 환경 및 region 설정 로드
region_vars = read_terragrunt_config("../region.hcl")
project_id = local.region_vars.locals.project_id
region = local.region_vars.locals.region
}

inputs = {
project_id = local.project_id
region = local.region
# ... 기타 설정
}
# ❌ Bad: Hard-coded values (피해야 할 방식)
inputs = {
project_id = "dta-cloud-de-dev" # 하드코딩
region = "europe-west3" # 하드코딩
}

🔄 데이터 플로우

사용자 요청 처리

Cross-Region 데이터 동기화

🛠️ 기술 스택

Infrastructure as Code

  • Terragrunt: 설정 관리 및 DRY 원칙
  • Terraform: 리소스 프로비저닝
  • HCL: 설정 언어

클라우드 서비스 (GCP)

  • Cloud Run: Serverless 컨테이너 플랫폼
  • Cloud SQL: PostgreSQL 관리형 데이터베이스
  • Memorystore: Redis 관리형 캐시
  • Cloud Scheduler: Cron 기반 스케줄러
  • VPC: 가상 프라이빗 클라우드

모니터링 및 관찰성

  • OpenTelemetry: 메트릭, 트레이스 수집
  • Cloud Monitoring: GCP 네이티브 모니터링
  • Cloud Logging: 중앙화된 로깅

📋 설정 관리 상세

공통 설정 (shared/)

shared/common.hcl

locals {
# 조직 정보
organization = {
id = "778204568675"
billing_account = "01A3DE-04193F-06C496"
folder_id = null
}

# 공통 라벨
base_labels = {
managed_by = "terragrunt"
team = "dta-wide"
firebase = "enabled"
generative-language = "enabled"
}

# 공통 API 목록
default_apis = [
"compute.googleapis.com",
"cloudrun.googleapis.com",
"cloudsql.googleapis.com",
# ... 기타 APIs
]
}

shared/regions.hcl

locals {
regions = {
"europe-west3" = {
region = "europe-west3"
zone = "europe-west3-a"
timezone = "Europe/Berlin"
url_suffix = "eu"
}

"asia-northeast3" = {
region = "asia-northeast3"
zone = "asia-northeast3-a"
timezone = "Asia/Seoul"
url_suffix = "asia"
}
}
}

환경별 설정 ([env]/env.hcl)

locals {
# 공통 설정 로드
common_vars = read_terragrunt_config("../shared/common.hcl").locals
regions_vars = read_terragrunt_config("../shared/regions.hcl").locals

environment = "dev"

# Region별 프로젝트 매핑
projects = {
europe = {
project_id = "dta-cloud-de-dev" # 독일 리젼
region = "europe-west3"
}
asia = {
project_id = "dta-cloud-dev" # 한국 리젼
region = "asia-northeast3"
}
}
}

지역별 설정 (regions/[region]/region.hcl)

locals {
# 환경 설정 로드
env_vars = read_terragrunt_config("../../env.hcl").locals
regions_vars = read_terragrunt_config("../../../shared/regions.hcl").locals

# 현재 region 설정
current_region = "asia-northeast3" # 또는 "europe-west3"
region_config = local.regions_vars.regions[local.current_region]

# 해당 region의 프로젝트 정보
project_id = local.env_vars.projects.asia.project_id # 또는 europe
region = local.region_config.region
zone = local.region_config.zone
}

🚀 배포 전략

단계별 배포 순서

배포 명령어

# 1단계: Global 서비스
terragrunt run-all apply --terragrunt-working-dir dev/global/

# 2단계: Europe Region (기존)
terragrunt run-all apply --terragrunt-working-dir dev/regions/europe-west3/

# 3단계: Asia Region (신규)
terragrunt run-all apply --terragrunt-working-dir dev/regions/asia-northeast3/

# 전체 환경 배포
terragrunt run-all apply --terragrunt-working-dir dev/

🔍 검증 및 테스트

설정 검증

# 모든 환경 검증
for env in dev stage prod; do
echo "Validating $env environment..."
terragrunt validate --terragrunt-working-dir $env/
done

# 특정 region 검증
terragrunt validate --terragrunt-working-dir dev/regions/asia-northeast3/

서비스 연결 테스트

# API 엔드포인트 테스트
curl -X GET https://dta-wide-api-dev-eu-xxxxxxxx-ey.a.run.app/health
curl -X GET https://dta-wide-api-dev-asia-xxxxxxxx-an.a.run.app/health

# 데이터베이스 연결 테스트
psql -h <eu-db-ip> -U admin -d dta_wide_0_1_0
psql -h <asia-db-ip> -U admin -d dta_wide_0_1_0

🔄 확장 계획

단기 확장 (3개월)

  • US Region 추가: us-central1
  • Load Balancer: Global HTTP(S) Load Balancer
  • CDN 최적화: Cloud CDN 설정

중기 확장 (6개월)

  • Auto Failover: Region간 자동 장애 조치
  • Data Replication: Cross-region 데이터 복제
  • Advanced Monitoring: Multi-region 대시보드

장기 확장 (1년)

  • Edge Computing: Cloudflare Workers
  • AI/ML Optimization: 트래픽 패턴 기반 최적화
  • Compliance Automation: 지역별 규제 자동 준수

📚 관련 문서