🔹 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 비용이 추가 발생
✅ 비용 증가 주요 원인
- Artifact Registry의 저장 비용
- 3GB짜리 이미지가 여러 버전 보관 → 저장 용량이 계속 증가
- Cross-region egress 비용
- Cloud Run(아시아)에서 실행될 때마다 미국 리전에서 pull → 매번 3GB 전송 비용 추가
- 이전 이미지가 삭제되지 않아서 계속 보관 비용 발생
🔹 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 리전 사용)
- Artifact Registry를 아시아 리전에 새로 생성
-
gcloud artifacts repositories create flirting-ai-repo \--repository-format=docker \--location=asia-northeast3 \--description="My Docker Repo in Tokyo"
- Docker 빌드 & 푸시 (이제 아시아 리전에 저장)
-
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
- Cloud Run 배포 (같은 리전에서 이미지 pull)
-
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 실행 속도도 최적화됨! 🚀
실제 동작은 잘 되지만 비용 측정이 어찌 될 지는 테스트 해봐야함
'플러팅 AI > Flask Server' 카테고리의 다른 글
| 플러팅 AI 1.6 업데이트 GPT 모델 변경 (0) | 2025.04.16 |
|---|---|
| 🚀 Google Cloud Run 비용 절감 및 서버 자동 종료 문제 해결 (0) | 2025.02.05 |
| Flask 서버 시작 시간 최적화하기: 지연 로딩(Lazy Loading) 전략 (0) | 2024.12.13 |
| 이미지 업로드 방식을 HTTP에서 WebSocket으로 변경한 이유 (0) | 2024.12.13 |
| Google Cloud Run에서 딥러닝 기반 서버 최적화: Connect 이벤트 비동기화와 Lazy Import 적용 사례 (2) | 2024.12.11 |