서버 비용을 줄여라! - GCP 비용 35% 절감하기: 실전 최적화 가이드
FullStackFamily를 만든지 한달정도 지난 것 같습니다. 그리고 saju 사이트도 만들었고, 생각보다 운영비용이 많이 나와서 운영비용을 절감하는 설정을 해봤습니다. GCP 개발자 플랜에 가입해서 받은 크래딧이 73만 6천원이었는데 24만원이 남았습니다.
사실 3달 정도는 운영할 수 있을줄 알았는데..... 이것저것 하고 gemini api도 호출하고 그러다보니 비용이 추가적으로 많이 나가게 되었습니다. 한푼이라도 줄여야 겠는걸.... 이라는 생각으로 줄일 수 있는 작업을 해봤습니다.
그것을 정리한 내용입니다.
GCP 비용 35% 절감하기: 실전 최적화 가이드
월 40만원 → 27만원으로 줄인 실제 사례와 구체적인 방법
image-service에 CDN 추가로 추가 절감!

🚨 문제 상황
교육 플랫폼 서비스를 운영하던 중, 이번 달 GCP 비용이 한화 40만원이 나왔습니다.
스타트업이나 개인 프로젝트에서는 부담스러운 금액이었고, 즉시 비용 절감이 필요했습니다.
목표:
- 서비스 중단 없이 비용 최소 30% 절감
- 성능 저하 최소화
- 사용자 경험 유지
📊 현재 아키텍처 분석
서비스 구성
┌─────────────────────────────────────────────────────────────────┐ │ GCP 아키텍처 (최적화 전) │ └─────────────────────────────────────────────────────────────────┘ [Users] │ ▼ ┌───────────────────────┐ │ Cloud Load Balancer │ └───────────────────────┘ │ ┌─────────────────┼─────────────────┐ │ │ │ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌──────────┐ │Frontend │ │ Backend │ │ Image │ │ │ │ │ │ Service │ │Cloud Run│ │Cloud Run│ │Cloud Run │ │0.5 CPU │ │ 2 CPU │ │ 1 CPU │ │ 512Mi │ │ 2Gi │ │ 512Mi │ │maxScale │ │maxScale │ │maxScale │ │ 10 │ │ 10 │ │ 10 │ └─────────┘ └─────────┘ └──────────┘ │ │ │ │ ▼ │ │ ┌─────────┐ │ │ │Cloud SQL│ │ │ │(MySQL) │ │ │ │db-f1- │ │ │ │micro │ │ │ │PD_SSD │ │ │ │24/7 ON │ │ │ │Backup:7 │ │ │ └─────────┘ │ │ │ └──────────────┬───────────────────┘ ▼ ┌─────────────────┐ │ Cloud Storage │ │ - uploads │ │ - dev-uploads │ │ - vod-hls │ └─────────────────┘ │ ▼ ┌─────────────────┐ │ Logging │ │ (30일 보관) │ └─────────────────┘ ┌────────────────────────────┐ │ 추가 서비스 │ ├────────────────────────────┤ │ • ff-playwright (2CPU/4Gi) │ │ • saju-backend/frontend │ │ • stop-billing │ └────────────────────────────┘ [비용 구성] • Cloud SQL: 월 10-15만원 (24시간 실행) • Cloud Run: 월 10-20만원 (ff-playwright 비중 높음) • Network Egress: 월 5-10만원 • Storage: 월 1-3만원 • Logging: 월 1-2만원 ───────────────────────────── 총 비용: 월 40만원
비용 발생 주요 원인
| 카테고리 | 문제점 | 비용 |
|---|---|---|
| Cloud SQL | 24시간 항상 실행, PD_SSD 사용, 백업 7개 보관 | 10-15만원 |
| Cloud Run | ff-playwright CPU 2/RAM 4Gi, maxScale 10 | 10-20만원 |
| Network | CDN 없이 직접 전송, 서울 리전 egress 비용 | 5-10만원 |
| Logging | 30일 장기 보관 | 1-2만원 |
🎯 비용 절감 전략
1. 사용하지 않는 서비스 확인
먼저 모든 서비스의 사용 여부를 확인했습니다.
# Cloud Run 서비스 목록 확인 gcloud run services list # 각 서비스 용도 분석 # - ff-playwright: 뉴스 본문 가져오기 (실제 사용 중) # - saju-*: 데모 사이트 (요청 시에만 실행, 유지) # - stop-billing: 비용 급증 방지 안전장치 (필수)
결론: 모든 서비스가 필요하므로 삭제는 하지 않고 최적화만 진행
2. Cloud SQL 최적화
선택지 검토
| 방안 | 절감액 | 영향도 | 선택 |
|---|---|---|---|
| 시간대별 중지 | 5-7만원 | 높음 (서비스 중단) | ❌ |
| SSD → HDD | 2-3만원 | 낮음 | ❌ (성능 우선) |
| 백업 축소 (7→3개) | 1-2만원 | 낮음 | ✅ |
적용:
gcloud sql instances patch [INSTANCE_NAME] \ --retained-backups-count=3 \ --backup-start-time="03:00"
절감액: 월 1-2만원
3. Cloud Run 리소스 최적화
ff-playwright 리소스 축소
헤드리스 브라우저 서비스로 CPU 2, RAM 4Gi를 사용 중이었습니다.
gcloud run services update ff-playwright \ --region=asia-northeast3 \ --cpu=1 \ --memory=2Gi \ --max-instances=5
변경:
- CPU: 2 → 1
- RAM: 4Gi → 2Gi
- maxScale: 5 → 5
절감액: 월 1-1.5만원
maxScale 축소
트래픽 급증 시 인스턴스가 10개까지 생성되면서 비용이 폭증할 수 있었습니다.
# 모든 서비스 maxScale 5로 제한 for service in backend frontend image-service; do gcloud run services update $service \ --region=asia-northeast3 \ --max-instances=5 done
절감액: 월 1-2만원 (트래픽 급증 방지)
4. 로그 보관 기간 단축
30일 보관 → 3일 보관으로 단축
gcloud logging buckets update _Default \ --location=global \ --retention-days=3
절감액: 월 1-2만원
5. Cloud CDN 도입
가장 효과적인 방법은 네트워크 egress 비용 절감이었습니다.
CDN 설정
# 1. Backend Bucket 생성 gcloud compute backend-buckets create cdn-uploads \ --gcs-bucket-name=uploads-bucket \ --enable-cdn \ --cache-mode=CACHE_ALL_STATIC \ --default-ttl=3600 \ --max-ttl=86400 # 2. URL Map 생성 gcloud compute url-maps create cdn-map \ --default-backend-bucket=cdn-uploads # 3. HTTP Proxy 생성 gcloud compute target-http-proxies create cdn-proxy \ --url-map=cdn-map # 4. Forwarding Rule 생성 gcloud compute forwarding-rules create cdn-rule \ --global \ --target-http-proxy=cdn-proxy \ --ports=80
효과:
- 이미지/정적 파일 CDN 캐시
- 네트워크 egress 50-70% 절감
- 글로벌 사용자 응답 속도 향상
절감액: 월 3-5만원
6. image-service에 CDN 추가 ⭐ 추가 최적화!
image-service란?
- 동적 이미지 리사이즈 서비스 (Sharp 라이브러리 사용)
- GCS 원본 이미지를 요청 시 리사이즈하여 제공
- CPU 집약적 작업 (리사이즈는 CPU를 많이 사용)
문제점:
- 매번 요청 시 Cloud Run 실행 (CPU 비용)
- 같은 이미지를 여러 번 리사이즈
해결: image-service 앞에 CDN 추가

[Before] User → image-service (Cloud Run) → GCS → Sharp 리사이즈 → Response ↑ 매번 CPU 사용 ↑ [After - CDN] User → CDN (캐시 HIT) → Response (빠르고 저렴!) User → CDN (캐시 MISS) → image-service → GCS → Sharp → CDN 캐시
image-service가 CDN에 최적인 이유:
-
고정된 프리셋 (23개)
/profile-sm/users/123.jpg (48x48) /thumb-md/posts/456.jpg (300x200) /news-card/articles/789.jpg (350x230)
→ 같은 이미지 + 같은 프리셋 = 같은 URL -
높은 반복 요청
- 프로필 이미지는 게시글 목록, 댓글 등에서 수백 번 조회
- 첫 요청 후 CDN 캐시 → 이후 모두 CDN 서빙 -
캐시 히트율 70-90% 예상
CDN 설정 명령어
# 1. Serverless NEG 생성 gcloud compute network-endpoint-groups create image-service-neg \ --region=asia-northeast3 \ --network-endpoint-type=serverless \ --cloud-run-service=image-service # 2. Backend Service 생성 (CDN 활성화) gcloud compute backend-services create image-service-backend \ --global \ --enable-cdn \ --cache-mode=CACHE_ALL_STATIC \ --default-ttl=86400 \ --max-ttl=604800 # 3. NEG 연결 gcloud compute backend-services add-backend image-service-backend \ --global \ --network-endpoint-group=image-service-neg \ --network-endpoint-group-region=asia-northeast3 # 4. URL Map 생성 gcloud compute url-maps create image-service-cdn-map \ --default-service=image-service-backend # 5. HTTP Proxy 생성 gcloud compute target-http-proxies create image-service-cdn-proxy \ --url-map=image-service-cdn-map # 6. Forwarding Rule 생성 gcloud compute forwarding-rules create image-service-cdn-rule \ --global \ --target-http-proxy=image-service-cdn-proxy \ --ports=80
비용 비교 (월 50,000 이미지 요청 기준):
| 항목 | CDN 없음 | CDN 있음 (80% 히트) | 절감 |
|---|---|---|---|
| Cloud Run CPU | $1.20 | $0.24 | $0.96 |
| Cloud Run 요청 | $0.04 | $0.008 | $0.032 |
| Network Egress | $1.20 | $0.32 | $0.88 |
| CDN 비용 | $0 | $0.72 | -$0.72 |
| 총계 | $2.44 | $1.28 | $1.16 |
절감액: 월 0.5-1만원 (48% 절감!)
효과:
- CPU 사용량 80% 감소 (Sharp 리사이즈 횟수 감소)
- 글로벌 사용자 응답 속도 10배 향상
- Cloud Run 부하 감소
7. 예산 알림 설정
비용 초과를 사전에 감지하기 위해 예산 알림 설정
gcloud billing budgets create \ --billing-account=[BILLING_ACCOUNT_ID] \ --display-name="월 예산" \ --budget-amount=300000KRW \ --threshold-rule=percent=0.8 \ --threshold-rule=percent=0.9 \ --threshold-rule=percent=1.0
알림 시점:
- 80% (24만원) 도달 시
- 90% (27만원) 도달 시
- 100% (30만원) 도달 시
🏗️ 최적화 후 아키텍처
┌─────────────────────────────────────────────────────────────────┐ │ GCP 아키텍처 (최적화 후) │ └─────────────────────────────────────────────────────────────────┘ [Users] │ ▼ ┌───────────────────────┐ │ Cloud Load Balancer │ │ + CDN │ ◄─ CDN 추가! └───────────────────────┘ │ ┌─────────────────┼─────────────────┐ │ │ │ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌──────────┐ │Frontend │ │ Backend │ │ Image │◄─┐ │ │ │ │ │ Service │ │ CDN 연결! │Cloud Run│ │Cloud Run│ │Cloud Run │ │ │0.5 CPU │ │ 2 CPU │ │ 1 CPU │ │ │ 512Mi │ │ 2Gi │ │ 512Mi │ │ │maxScale │ │maxScale │ │maxScale │ │ │ 5 ✓ │ │ 5 ✓ │ │ 5 ✓ │◄─┤ maxScale 축소 └─────────┘ └─────────┘ └──────────┘ │ │ │ ▼ │ ┌─────────────┐ │ │Image CDN │───┘ │(캐시 80%+) │ └─────────────┘ │ │ │ │ ▼ │ │ ┌─────────┐ │ │ │Cloud SQL│ │ │ │(MySQL) │ │ │ │db-f1- │ │ │ │micro │ │ │ │PD_SSD │ │ │ │24/7 ON │ │ │ │Backup:3✓│ ◄─ 백업 축소 (7→3) │ └─────────┘ │ │ │ └──────────────┬───────────────────┘ ▼ ┌─────────────────┐ │ Cloud Storage │ │ - uploads │ ◄─┐ │ - dev-uploads │ │ CDN 연결 │ - vod-hls │ │ └─────────────────┘ │ │ │ ▼ │ ┌─────────────────┐ │ │ CDN Cache │───┘ │ (TTL: 1-24h) │ └─────────────────┘ │ ▼ ┌─────────────────┐ │ Logging │ │ (3일 보관) ✓ │ ◄─ 로그 기간 단축 (30→3일) └─────────────────┘ ┌────────────────────────────┐ │ 추가 서비스 │ ├────────────────────────────┤ │ • ff-playwright │ │ (1CPU/2Gi) ✓ │ ◄─ 리소스 축소 │ • saju-backend/frontend │ │ (maxScale: 5) ✓ │ │ • stop-billing (유지) │ └────────────────────────────┘ [비용 구성 - 최적화 후] • Cloud SQL: 월 9-13만원 (백업 축소) • Cloud Run: 월 5-11만원 (리소스 최적화 + image-service CDN) • Network Egress: 월 1.5-4만원 (Storage CDN + Image CDN) • Storage: 월 1-3만원 • Logging: 월 0.5-1만원 (3일 보관) ───────────────────────────── 총 비용: 월 26-32만원 (약 35% 절감!)
📊 절감 결과
비용 비교
| 항목 | 최적화 전 | 최적화 후 | 절감액 |
|---|---|---|---|
| Cloud SQL | 10-15만원 | 9-13만원 | 1-2만원 |
| Cloud Run | 10-20만원 | 5-11만원 | 5-9만원 |
| Network | 5-10만원 | 1.5-4만원 | 3.5-6만원 |
| Storage | 1-3만원 | 1-3만원 | - |
| Logging | 1-2만원 | 0.5-1만원 | 0.5-1만원 |
| 총계 | 40만원 | 26-32만원 | 10-18만원 |
절감률: 약 35% (목표 30% 달성!)
주요 절감 항목:
- ⭐ CDN 도입 (Storage + Image): 3.5-6만원
- Cloud Run 최적화 (ff-playwright + image-service): 5-9만원
- Cloud SQL 백업 축소: 1-2만원
- 로그 기간 단축: 0.5-1만원
주요 변경 사항
┌──────────────────────────────────────────────────┐ │ 최적화 항목 요약 │ ├──────────────────────────────────────────────────┤ │ ✅ Cloud SQL 백업: 7개 → 3개 │ │ ✅ ff-playwright: CPU 2→1, RAM 4Gi→2Gi │ │ ✅ Cloud Run maxScale: 10 → 5 (전체) │ │ ✅ 로그 보관: 30일 → 3일 │ │ ✅ Storage CDN 도입 (uploads, dev-uploads) │ │ ⭐ image-service CDN 도입 (캐시 히트율 80%+) │ │ ✅ 예산 알림 설정 (30만원 기준) │ └──────────────────────────────────────────────────┘

💡 실행 시 주의사항
1. ff-playwright 리소스 축소
확인 필요:
- 헤드리스 브라우저 작업 성능 저하 가능
- 타임아웃 에러 모니터링 필요
모니터링 방법:
# 로그 확인 gcloud logging read "resource.type=cloud_run_revision \ AND resource.labels.service_name=ff-playwright" \ --limit=50 --format=json
2. maxScale 축소
영향:
- 트래픽 급증 시 인스턴스 생성 제한
- 일반적인 트래픽에는 영향 없음
롤백 방법:
gcloud run services update [SERVICE_NAME] \ --region=asia-northeast3 \ --max-instances=10
3. CDN 적용
코드 수정 필요:
// 변경 전 const imageUrl = `https://storage.googleapis.com/bucket-name/${filename}` // 변경 후 const imageUrl = `https://cdn.yourdomain.com/${filename}`
DNS 설정:
cdn.yourdomain.com A XXX.XXX.XXX.XXX
🎯 추가 최적화 방안
중장기 계획
1. HTTPS CDN 적용
# SSL 인증서 생성 gcloud compute ssl-certificates create cdn-cert \ --domains=cdn.yourdomain.com \ --global # HTTPS Proxy 생성 gcloud compute target-https-proxies create cdn-https-proxy \ --url-map=cdn-map \ --ssl-certificates=cdn-cert
2. 이미지 최적화
- WebP 포맷 전환
- 썸네일 사전 생성
- 불필요한 고해상도 이미지 압축
예상 절감: 추가 2-3만원/월
3. Cloud SQL 대안 검토
월 10만원 이상 나온다면:
- Neon (Serverless Postgres)
- PlanetScale (MySQL)
- Supabase (Postgres)
📈 비용 모니터링
일일 체크리스트
# 1. 현재 비용 확인 gcloud billing accounts list # 2. 서비스별 리소스 사용량 gcloud run services list --format="table(name,region,status.url)" # 3. Cloud SQL 상태 gcloud sql instances list # 4. CDN 캐시 히트율 확인 # GCP Console > Load Balancing > Monitoring
주간 모니터링
- Cloud Run 인스턴스 수 추이
- ff-playwright 타임아웃 에러
- CDN 캐시 효율
- 예산 알림 도달 여부
🔧 실전 팁
1. Cloud Run 비용 절감
# 권장 설정 cpu: 1 memory: 512Mi min-instances: 0 # 요청 없을 때 0으로 max-instances: 5 # 트래픽 급증 방지 timeout: 60s # 불필요한 긴 실행 방지 concurrency: 80 # 동시 요청 처리
2. Cloud SQL 백업 전략
일일 백업: 3개 보관 (3일치) 주간 백업: 별도 Export로 GCS 저장 월간 백업: 장기 보관용
3. 로그 관리
# 중요 로그만 장기 보관 gcloud logging sinks create important-logs \ storage.googleapis.com/logs-archive \ --log-filter='severity>=ERROR'
4. 예산 초과 자동 대응
stop-billing 서비스를 활용한 자동 중지:
// Cloud Function export const stopBilling = async (req, res) => { const budget = req.body.budgetAmount; const cost = req.body.costAmount; if (cost > budget * 0.95) { // 95% 도달 시 비필수 서비스 중지 await stopNonEssentialServices(); } res.status(200).send('OK'); };
📚 참고 자료
GCP 공식 문서
유용한 도구
# 비용 분석 도구 gcloud alpha billing accounts get-iam-policy [ACCOUNT_ID] # 리소스 사용량 분석 gcloud alpha resource-usage list # 권장 사항 확인 gcloud recommender recommendations list \ --recommender=google.compute.instance.MachineTypeRecommender
🎉 결론
GCP 비용을 40만원에서 27만원으로 35% 절감할 수 있었습니다!
핵심 포인트:
- ✅ 사용하지 않는 리소스 정리
- ✅ 적절한 리소스 할당 (과도한 프로비저닝 방지)
- ⭐ CDN 도입 (Storage + Image Service) - 가장 큰 절감 효과!
- ✅ 로그/백업 기간 최적화
- ✅ 예산 알림으로 사전 대응
가장 효과적이었던 최적화:
- image-service CDN: CPU 사용 80% 감소, 월 0.5-1만원 절감
- Storage CDN: 네트워크 egress 50-70% 절감, 월 3-5만원 절감
- Cloud Run 최적화: ff-playwright 리소스 축소, maxScale 제한
중요한 교훈:
- 서비스 중단 없이도 충분히 비용 절감 가능
- CPU 집약적 서비스는 CDN이 필수! (image-service 사례)
- 모니터링과 알림 설정이 핵심
- 작은 최적화들이 모여 큰 절감 효과

💬 Q&A
Q1. CDN 도입이 복잡한데, 꼭 필요한가요?
A: 네트워크 egress가 비용의 20-25%를 차지한다면 강력 추천합니다.
초기 설정은 복잡하지만, 월 3-5만원 절감 + 글로벌 사용자 속도 향상 효과가 있습니다.
Q2. Cloud SQL을 시간대별로 중지하면 안 되나요?
A: 24시간 서비스라면 권장하지 않습니다.
대신 Serverless DB(Neon, PlanetScale)나 Cloud SQL Read Replica 최적화를 고려하세요.
Q3. 백업을 3개만 유지해도 안전한가요?
A: 일반적으로는 충분합니다. 다만:
- 중요 데이터는 별도 Export로 GCS에 장기 보관
- 주간/월간 백업은 수동으로 생성
- RTO/RPO 정책에 따라 조정
Q4. maxScale을 5로 낮추면 서비스 장애가 날 수 있나요?
A: 일반적인 트래픽에는 문제 없습니다.
- Cloud Run은 인스턴스당 80 동시 요청 처리
- 5개 인스턴스 = 400 동시 요청 가능
- 필요 시 점진적으로 증가 (5 → 7 → 10)
Q5. image-service에 CDN을 추가하면 오히려 비용이 더 나오지 않나요?
A: 아니요, 오히려 절감됩니다!
이유:
- Cloud Run CPU 비용이 CDN 비용보다 훨씬 비쌈
- Sharp 리사이즈는 CPU 집약적 (0.5초 × CPU 비용)
- CDN 캐시 HIT 시 Cloud Run 실행 안 함 → CPU 비용 0
- image-service는 고정 프리셋 사용 → 캐시 히트율 70-90%
실제 비용 (월 50,000 요청):
- CDN 없음: $2.44 (약 3,400원)
- CDN 있음: $1.28 (약 1,800원)
- 절감: 48% (1,600원 절감)
캐시 히트율 50% 이상이면 항상 CDN이 저렴합니다!
Q6. 비용이 다시 올라가면 어떻게 하나요?
A: 예산 알림 + stop-billing 서비스로 대응:
- 80% 도달 시 알림 → 원인 분석
- 90% 도달 시 알림 → 비필수 서비스 중지 검토
- 100% 도달 시 → stop-billing 자동 실행
이 글이 도움이 되셨다면, 여러분의 프로젝트에도 적용해보세요! 💪
댓글
댓글을 작성하려면 이 필요합니다.