플러팅 AI/Flask Server

📌 GCP Artifact Registry 비용 문제 및 최적화 과정 정리

Solo.dev 2025. 2. 20. 21:35

🔹 1. 문제 상황

  • Cloud Run을 사용하면서 Artifact Registry에 대한 이해 부족
  • 2월 1일부터 2월 20일까지 하루 409원씩 총 6,000원 발생 (계획보다 높은 비용)
  • 비용이 어떻게 측정되는지 몰랐음 → 하루에 3GB씩 docker pull이 발생하면서 요금 증가
  • 미국 리전(gcr.io)을 사용 중이었음 → Cloud Run 배포는 asia-northeast3, 하지만 이미지는 us 리전에 저장
  • 결과적으로, cross-region egress 비용이 발생 (미국 → 아시아 전송 비용)

🔹 2. 문제 원인 분석

기존 방식의 문제점

  • docker build & push → gcr.io (미국 리전)
  • gcloud run deploy → asia-northeast3 (일본 도쿄 리전)
  • 즉, Cloud Run(아시아) → Artifact Registry(미국)에서 매번 cross-region pull 발생
  • 이로 인해 매일 네트워크 egress 비용이 추가 발생

비용 증가 주요 원인

  1. Artifact Registry의 저장 비용
    • 3GB짜리 이미지가 여러 버전 보관 → 저장 용량이 계속 증가
  2. Cross-region egress 비용
    • Cloud Run(아시아)에서 실행될 때마다 미국 리전에서 pull → 매번 3GB 전송 비용 추가
  3. 이전 이미지가 삭제되지 않아서 계속 보관 비용 발생

🔹 3. 해결 방법

새로운 방식: Artifact Registry를 Cloud Run과 동일한 리전(asia-northeast3)에 배치
구버전 이미지 삭제 및 자동 정리 정책 설정

📍 ✅ 기존 방식 (gcr.io 미국 리전 사용)

# 미국 리전에서 Docker 빌드 & 푸시
docker build -t gcr.io/flirting-ai-440901/flirting-ai .
docker push gcr.io/flirting-ai-440901/flirting-ai

# Cloud Run은 아시아 리전에 배포 → Cross-region 비용 발생
gcloud run deploy flirting-ai \
  --image gcr.io/flirting-ai-440901/flirting-ai \
  --platform managed \
  --region asia-northeast3 \
  --memory 4Gi \
  --cpu 2 \
  --timeout 300 \
  --allow-unauthenticated \
  --set-env-vars "OPENAI_API_KEY=sk-..."

미국에서 아시아로 pull할 때마다 비용 발생 (cross-region egress).


📍 ✅ 변경된 최적화된 방식 (asia-northeast3 리전 사용)

  1. Artifact Registry를 아시아 리전에 새로 생성
  2.   gcloud artifacts repositories create flirting-ai-repo \
      --repository-format=docker \
      --location=asia-northeast3 \
      --description="My Docker Repo in Tokyo"
  3. Docker 빌드 & 푸시 (이제 아시아 리전에 저장)
  4. docker build -t asia-northeast3-docker.pkg.dev/flirting-ai-440901/flirting-ai-repo/flirting-ai:latest .
    docker push asia-northeast3-docker.pkg.dev/flirting-ai-440901/flirting-ai-repo/flirting-ai:latest
  5. Cloud Run 배포 (같은 리전에서 이미지 pull)
  6. gcloud run deploy flirting-ai \
      --image asia-northeast3-docker.pkg.dev/flirting-ai-440901/flirting-ai-repo/flirting-ai:latest \
      --platform managed \
      --region asia-northeast3 \
      --memory 4Gi \
      --cpu 2 \
      --max-instances 5 \
      --timeout 300 \
      --allow-unauthenticated \
      --set-env-vars "OPENAI_API_KEY=sk-..."

Cloud Run과 Artifact Registry가 같은 리전(asia-northeast3)에 있으므로 egress 비용 없음!


🔹 4. 추가 최적화 (비용 절감)

불필요한 구버전 이미지 삭제 (스토리지 비용 절감)

gcloud artifacts docker images list asia-northeast3-docker.pkg.dev/flirting-ai-440901/flirting-ai-repo
gcloud artifacts docker images delete asia-northeast3-docker.pkg.dev/flirting-ai-440901/flirting-ai-repo/flirting-ai@sha256:IMAGE_DIGEST

자동 정리 정책 설정 (구버전 자동 삭제)

gcloud artifacts repositories update flirting-ai-repo \
  --location=asia-northeast3 \
  --cleanup-policies=keep-last-n:3

이제 최신 3개 버전만 유지, 더 오래된 것은 자동 삭제 → 저장 비용 절감!


✅ 최종 결과 (비용 절감 효과)

기존(미국 리전 사용)

  • 매일 cross-region egress 비용 발생 (409원/일) → 6,000원 추가 비용 발생
  • 구버전 이미지 보관으로 인해 스토리지 비용 누적

변경 후(아시아 리전 사용)

  • Cloud Run과 Artifact Registry를 같은 리전(asia-northeast3)으로 설정 → egress 비용 0원
  • 불필요한 구버전 이미지 삭제 및 자동 정리 정책 적용 → 스토리지 비용 절감

🚀 결론: 비용 절감 + 성능 향상

🔹 미국 리전(gcr.io) → 아시아 리전(asia-northeast3-docker.pkg.dev)으로 변경하여 cross-region egress 비용 0원
🔹 구버전 이미지 삭제 & 자동 정리 정책(TTL) 설정하여 스토리지 비용 절감
🔹 Cloud Run의 cold start 속도 향상 (같은 리전에서 pull하므로 더 빠름)

결과적으로, 불필요한 비용이 사라지고, Cloud Run 실행 속도도 최적화됨! 🚀

실제 동작은 잘 되지만 비용 측정이 어찌 될 지는 테스트 해봐야함