비용 최적화를 잘못 이해하면:
EC2 가장 작은 사양
RDS 최소 사양
로그 최소화
백업 최소화
처럼 접근하기 쉽다.
하지만 이건 최적화가 아니라 단순한 비용 절감이다.
운영 시스템에서 진짜 목표는:
필요한 성능
+
필요한 안정성
+
필요한 복구 가능성
을 만족하면서
불필요한 비용 제거
다.
예를 들어:
RDS 비용
월 10만 원
을 줄이려고:
사양 절반
으로 낮췄는데,
결과:
관리자 주문조회 느림
Connection Pool 대기
사전예약 Traffic 때 장애
가 발생한다면 좋은 최적화가 아니다.
FinOps를 아주 간단하게 보면:
클라우드 비용을 개발·운영·비즈니스 관점에서 함께 측정하고, 필요한 곳에는 쓰고 낭비되는 곳은 줄이는 운영 방식
이다.
중요한 것은:
비용을 줄이는 팀
이 아니라:
비용을 이해하고
의도적으로 사용하는 문화
에 가깝다.
대규모 회사처럼:
FinOps Team
Cloud Architect
SRE
가 없어도,
혼자 다음 결정을 해야 할 수 있다.
EC2 사양 올릴까?
RDS 늘릴까?
Redis 추가할까?
로그 보관 기간 줄일까?
CloudFront를 더 활용할까?
AI API를 계속 쓸까?
결국 비용 판단도 개발자의 일이다.
현재 같은 AWS 기반 서비스라면 대략:
Compute
Database
Storage
Network
Observability
External API
AI
로 나눌 수 있다.
예:
EC2
Worker Instance
Batch Server
등이다.
예:
RDS Instance
Storage
IOPS
Backup
Snapshot
등이다.
예:
S3
Snapshot
Backup
Export File
Log Archive
다.
예:
Data Transfer
CloudFront
Cross-AZ Traffic
외부 전송
등이다.
예:
CloudWatch Logs
Metrics
Trace
APM
이다.
이 부분은 생각보다 빠르게 커질 수 있다.
예:
알림톡
문자
Notion API는 비용보다 Rate 제약
기타 SaaS
등이다.
예:
LLM API Token
Embedding
Vector DB
AI SaaS
로컬 LLM 전력/하드웨어
까지 볼 수 있다.
최적화 전에:
월 총 비용
만 보는 것으로는 부족하다.
최소한:
EC2
RDS
S3
CloudFront
CloudWatch
기타 API
별로 나눠봐야 한다.
예:
RDS
45%
EC2
30%
CloudWatch
15%
S3
5%
기타
5%
라면 S3를 10% 줄여도 전체 비용 절감 효과는 작다.
대부분은:
몇 개 Resource가
전체 비용 대부분
을 차지한다.
그래서 큰 항목부터 본다.
대략:
1. 사용하지 않는 Resource 제거
2. 과하게 큰 Resource 축소
3. Architecture 낭비 제거
4. Traffic/Storage 최적화
5. Pricing Option 검토
순서가 좋다.
예:
안 쓰는 EC2
오래된 Elastic IP
Unused Volume
Old Snapshot
Unused Load Balancer
Old S3 Artifact
등이다.
성능 영향 없이:
100% 비용 감소
가 가능하기 때문이다.
예:
트래픽 없음
이라고:
백업 서버 삭제
하면 안 된다.
더 이상 필요 없음
장애 대응을 위해
의도적으로 대기
다.
Resource마다:
이게 왜 존재하지?
를 설명할 수 있어야 한다.
예:
prod-api-01
Purpose
Production API
old-test-server
Purpose
Unknown
이면 후자는 정리 후보가 된다.
최소한:
Environment
Service
Owner
Purpose
정도 Tag를 두면 좋다.
Environment=production
Service=togethermall
Owner=backend
Purpose=api
정도다.
예:
투게더몰
폰투몰
Automation
별로 비용을 나눠볼 수 있다.
Production
Staging
Development
를 구분한다.
예:
Production
24시간 운영
Staging
필요한 시간만
일 수 있다.
예:
개발용 EC2
개발용 Worker
는 밤/주말에 중지할 수 있다.
자동 재시작 조건 등이 있을 수 있으므로 단순:
밤마다 Stop
정책은 실제 서비스 특성을 확인해야 한다.
자동화부터 만들지 않는다.
Resource가 실제 사용량보다 과하게 큰지 보는 것이다.
예:
EC2
8 vCPU
Peak CPU
12%
이면 과한 사양일 수 있다.
Memory가:
80%
일 수도 있다.
또 순간 Peak가 있을 수도 있다.
최소:
CPU
Memory
Network
Disk
Peak
p95 usage
를 본다.
예:
평균 CPU
15%
Peak
85%
라면 무조건 축소하면 안 된다.
하루만 보고 판단하지 않는다.
예:
2~4주
정도 실제 업무 주기를 관찰할 수 있다.
평소에는 낮아도 특정 시즌에 급증할 수 있다.
예:
현재
4 vCPU / 16GB
Peak
CPU 35%
Memory 45%
라면 한 단계 낮출 후보일 수 있다.
평소 Web CPU는 낮아도:
Export
AI
Batch
작업이 시작될 때 Resource가 급증할 수 있다.
예:
API
CPU 20%
AI Worker
CPU 80%
이면 서버 전체 평균만 보면 원인을 놓친다.
아예:
AI Worker 분리
가 더 경제적일 수도 있다.
현재:
Web + AI
고사양 EC2 24시간
대신:
Web
작은 EC2 24시간
AI
필요할 때만 별도 환경
이 더 효율적일 수 있다.
1007에서 다뤘듯:
복잡도 비용
도 계산한다.
예:
한 단계 큰 EC2
월 +5만원
으로 문제가 해결된다면,
분산 구조를 만드는 개발 시간보다 쌀 수 있다.
작은 서비스에서도 RDS가 전체 AWS 비용의 큰 비중을 차지할 수 있다.
확인:
CPU
Freeable Memory
Connections
Read/Write IOPS
Storage
Query Latency
이다.
Memory 부족으로:
Cache Hit 감소
Disk I/O 증가
가 생길 수 있다.
PostgreSQL은 자주 사용하는 데이터를 Memory에 유지하면서 성능을 낸다.
RAM을 줄이면 Disk 접근이 늘 수 있다.
1007과 연결한다.
예:
Staging 또는 검증 환경에서
작은 사양 테스트
를 수행한다.
예:
Allocated
500GB
Actual
50GB
라고 해도 단순히 즉시 줄일 수 없는 Storage 특성이 있을 수 있다.
성장률을 보고 계획한다.
예:
현재
50GB
월 증가
2GB
라면:
6개월 후
약 62GB
정도를 예상할 수 있다.
오래된:
Outbox
Logs
Export Metadata
Workflow Detail
을 정리하면 DB Growth가 줄어든다.
다만 비용 때문에 Business Data를 임의 삭제하면 안 된다.
단순:
파일 용량
만이 아니다.
보통:
Storage
Request
Data Transfer
등을 함께 본다.
예:
Export Excel
Temporary Image
Old Build Artifact
Backup Copy
가 계속 쌓이는 것이다.
1003과 연결해서:
30일 후 삭제
90일 후 다른 Storage Class
같은 정책을 둘 수 있다.
복구/조회 비용과 지연이 생길 수 있다.
예:
최근 30일
자주 다운로드
1년 전
거의 접근 없음
이면 Storage Tiering 후보가 된다.
다시 생성 가능한 파일이라면:
Archive
보다:
Delete
가 낫다.
예:
주문 Excel
을 언제든 DB에서 다시 만들 수 있다면 영구 보관 가치가 낮다.
그때 생성한 결과 자체가 기록일 수 있다.
CloudFront는 비용이 들지만 Origin 부하와 Data Transfer를 줄여줄 수 있다.
CloudFront를 없애:
S3/EC2 Origin 직접 요청 증가
하면 총 비용/성능이 나빠질 수 있다.
정적 Asset이:
Cache Hit 95%
라면 Origin Traffic이 크게 줄어든다.
예:
5MB PNG
대신:
300KB WebP
를 제공하면:
Data Transfer
Storage
사용자 로딩
모두 줄어든다.
상품몰에서는 이미지 품질도 중요하다.
모바일에서:
3000px 원본
을 그대로 내려보낼 필요가 없다.
mobile
tablet
desktop
버전을 활용하면 Traffic을 줄일 수 있다.
로그를 많이 남기면:
Ingestion
Storage
Query
비용이 늘 수 있다.
logger.info(JSON.stringify(req.body));
를 모든 Request에 남기는 것이다.
1003과 연결된다.
예:
event
requestId
correlationId
status
duration
errorCode
정도다.
예:
ERROR
문제 발생
WARN
운영상 주의
INFO
핵심 상태 변화
DEBUG
개발/일시적 진단
이다.
Log Volume이 급증할 수 있다.
예:
특정 Module만
30분
처럼 제한한다.
0928의 Emergency Override와 같다.
예:
Application Log
30일
Security/Audit
별도
처럼 데이터 성격에 따라 다르게 한다.
비용 때문에 Audit까지 같이 지우면 안 된다.
예:
userId
orderId
requestId
를 Metric Label로 넣으면 Series 수가 폭발할 수 있다.
Metric은:
endpoint
status
service
errorCode
같은 제한된 Dimension을 사용한다.
모든 Request Trace를 100% 저장할 필요가 없는 경우가 있다.
정상 Request:
10% Sampling
Error:
100%
처럼 할 수 있다.
비용 측정 후 결정한다.
로그 비용:
월 +3만원
아끼다가 Incident 원인을 못 찾아:
몇 시간 장애
가 나면 손해가 더 크다.
반드시 남길 것:
Error
Deploy
Audit
Queue Failure
Provider Failure
Correlation Context
등이다.
Backup도 비용을 만든다.
하지만 가장 위험하게 줄이면 안 되는 영역 중 하나다.
예:
Daily 30일
Monthly 1년
같은 정책은 실제 업무 요구를 기준으로 한다.
RPO:
얼마나 데이터 손실을 허용?
RTO:
얼마 안에 복구해야 하나?
이다.
자동 Backup 외에:
수동 Snapshot
을 계속 만들어두면 불필요한 비용이 쌓일 수 있다.
예:
before-major-migration
같은 목적을 적는다.
예:
7일 후 검토/삭제
한다.
1003과 같은 원칙이다.
클라우드 비용에서 놓치기 쉬운 부분이다.
예:
Region 간
AZ 간
Internet Egress
등이다.
특히:
대용량 이미지
Export File
Backup
등이다.
1004와 연결된다.
Multi-AZ 구조에서는 가용성이 좋아지지만 Network 비용이 늘 수 있다.
가용성을 위해 의도적으로 쓰는 비용일 수 있다.
안 쓰는 서버
중복 로그
오래된 Artifact
Backup
Multi-AZ
Monitoring
Headroom
이다.
중요한 구분이다.
예:
평소 CPU 40%
라면 나머지 60%가 낭비처럼 보일 수 있다.
하지만:
Traffic Spike
배포
Failover
를 위한 여유일 수 있다.
항상:
CPU 95%
DB Connections 95%
인 상태는 비용 효율적이라기보다 위험하다.
1007의 Capacity Planning과 연결한다.
예:
Single AZ
저렴
Multi-AZ
비쌈
이다.
개인 Toy Project와:
실제 주문이 들어오는 상업 서비스
는 동일 기준으로 비용을 줄이면 안 된다.
Production:
안정성 우선
Toy:
비용 우선
이 가능하다.
예:
Production
Always On
Staging
Business Hours
Development
On Demand
처럼 다르게 운영할 수 있다.
월 비용 상한을 설정한다.
예:
AWS Monthly Budget
X원
이다.
예:
50%
80%
100%
도달 시 알림을 받을 수 있다.
100% 넘었다고:
Production 종료
하면 안 된다.
예:
이번 달 비용
예상보다 50% 증가
하면 원인을 조사한다.
비용이 평소와 다르게 급증하는 상황이다.
예:
CloudWatch Logs
하루 +300%
이다.
무한 Retry
Debug Log 활성화
Bot Traffic
Export Loop
S3 Upload Bug
AI API Loop
등이다.
비용 문제만이 아니라 Bug의 흔적일 수 있다.
예:
service_cost_daily
estimated_monthly_cost
cost_change_percent
처럼 내부 Dashboard를 만들 필요까지는 없더라도 정기적으로 확인한다.
예:
8월
120,000
9월
145,000
10월 예상
240,000
이면 이유를 찾는다.
Traffic이 2배라 비용이 2배면 자연스러울 수 있다.
Traffic은 동일한데 비용만 2배면 문제다.
예:
주문 1건당 Infra 비용
을 볼 수 있다.
월 Infra
300,000원
월 주문
3,000건
Infra / Order
약 100원
이다.
예:
100원
→
200원
이면 효율이 떨어지고 있다.
Context를 같이 본다.
대략:
월 Infra 비용
/
월 Request 수
도 가능하다.
하지만 Business Value와 직접 연결되지는 않는다.
예:
주문당
Export당
AI Report당
이다.
LLM API를 쓰면 가장 빠르게 커질 수 있는 비용 중 하나다.
예:
promptTokens
completionTokens
totalTokens
model
이다.
예:
runId
model
inputTokens
outputTokens
estimatedCost
를 남긴다.
Local:
API 비용 없음
하지만
Hardware
전력
운영시간
이 있다.
운영 간단
사용량 기반 비용
이다.
반대로 반복 대량 작업이면 Local이 유리할 수 있다.
고사양 장비 비용과 유지 관리가 있다.
예:
간단 요약
작은 모델
복잡 분석
큰 모델
로 나눌 수 있다.
모든 작업을 가장 비싼 모델에 보내지 않는다.
실패
재시도
사람 검토
잘못된 결과 수정
비용도 있다.
불필요한 Context를 매번 전부 보내지 않는다.
나쁜 방식:
Repo 전체
매 Run 전송
좋은 방식:
변경 File
관련 문서
필요한 Context만
이다.
Token 비용뿐 아니라 Latency도 증가한다.
1004와 연결된다.
같은:
commitSha
promptVersion
inputHash
이면 결과 재사용을 고려한다.
0916 Idempotency와도 연결된다.
같은 Commit Report가 이미 생성됐다면:
LLM 재실행
하지 않는다.
AI Request가 Timeout났다고 무조건 다시 실행하면 비용이 두 번 나갈 수 있다.
Provider가 이미 처리했는지 확인 가능한 경우 Reconciliation한다.
예:
3
같이 제한한다.
예:
Run당 최대 Token
하루 최대 Cost
월 최대 Cost
를 둘 수 있다.
LOW Priority AI 작업
중단
할 수 있다.
AI 비용이 많다고 주문 API까지 영향을 받으면 안 된다.
예:
ai_insight_enabled=false
로 즉시 제한할 수 있다.
예:
Codex
Claude Code
IDE AI
등의 생산성 도구 비용이다.
예:
월 20만원
개발 시간 20시간 절약
이라면 충분히 가치 있을 수 있다.
Background Worker를 24시간 켜둘 필요가 있는지 본다.
예:
하루 Export 5건
전용 Worker Instance를 24시간 두는 것은 낭비일 수 있다.
하지만 격리 필요성과 비교한다.
예:
Job이 많아짐
Web 성능에 영향
장시간 작업 많음
일 때다.
이 역시 Reliability Cost다.
예:
가끔 실행
짧은 작업
Burst
같은 Job이다.
Cold Start, 실행 제한, 복잡도 등이 있다.
예:
작은 이미지 변환
가벼운 Scheduled Cleanup
이벤트 기반 짧은 Worker
정도다.
실행 특성을 보고 결정한다.
장기간 꾸준히 사용하는 Compute라면 할인 옵션을 검토할 수 있다.
예:
3년 약정
후 Architecture가 바뀔 수 있다.
예:
Production EC2
24/7
1년 이상 유지 예상
이면 검토 가치가 있다.
큰 서버를 30% 할인받는 것보다 작은 적정 서버를 쓰는 것이 더 싸다.
과대 서버
월 20만
30% 할인
14만
vs
적정 서버
월 8만
이다.
완전히 사용하지 않을 때 Resource를 0으로 줄이는 전략이다.
항상 응답해야 하기 때문이다.
예:
AI 분석 Worker
Staging
같은 영역이다.
Startup 10분이면 On-demand 작업 UX가 나빠질 수 있다.
항상 켜두는 비용과 Startup Delay 사이의 Trade-off다.
Traffic이 매우 불규칙하면 유리할 수 있지만 실제 가격/성능 패턴을 확인해야 한다.
비용 10% 줄이려고 Architecture 전체를 바꾸는 것은 비효율적일 수 있다.
예:
월 절감
5,000원
구현
2일
이라면 우선순위가 낮다.
간단히:
월 절감액
×
예상 유지 기간
vs
개발/운영 비용
으로 본다.
월 절감
50,000원
1년
600,000원
구현에 하루면 할 가치가 있을 수 있다.
월 절감
3,000원
구현
3일
이면 하지 않는 편이 낫다.
일반 기능 Backlog와 따로:
Cost Saving
Estimated Saving
Effort
Risk
를 기록할 수 있다.
| 개선 | 월 절감 예상 | 난이도 | 위험 |
|---|---|---|---|
| Old S3 Artifact 삭제 | 중 | 낮음 | 낮음 |
| RDS 다운사이징 | 높음 | 중 | 높음 |
| Debug Log 축소 | 중 | 낮음 | 낮음 |
| Architecture 재설계 | 높음 | 높음 | 높음 |
가장 좋은 대상이다.
High Saving + Low Risk
→ 즉시
High Saving + High Risk
→ 검증 후
Low Saving + Low Risk
→ 여유 있을 때
Low Saving + High Risk
→ 하지 않음
이다.
그래서 Load Test가 필요하다.
1003 Cleanup으로 자동화 가능하다.
단 Incident에 필요한 로그는 남긴다.
예:
Staging EC2
09:00 Start
20:00 Stop
같은 방식이 가능하다.
자동 Stop은 됐는데 Start가 실패하면 다음날 개발환경이 내려가 있을 수 있다.
예:
비용 초과
→ DB 자동 종료
같은 정책은 위험하다.
Budget 초과
Idle 후보
Storage 급증
을 알려준다.
예:
EC2 Terminate
Snapshot Delete
RDS Downsize
는 사람 확인이 필요하다.
AI가 비용 데이터를 받아:
어디가 증가했는가?
어떤 Resource가 Idle 후보인가?
어떤 로그가 폭증했는가?
를 정리할 수 있다.
비용 분석과 실행 권한을 분리한다.
예:
CloudWatch
7일 평균 대비
+180%
이면 AI가 최근:
Release
Error Spike
Debug Flag
Traffic
과 연결해서 후보를 분석한다.
예:
Release v42
↓
DB Query 수 2배
↓
RDS CPU 증가
↓
Scale-up
↓
비용 증가
처럼 비용도 Release Regression 결과일 수 있다.
코드 변경이 원인일 수 있다.
신규 기능 하나가:
외부 API를 매 요청마다 호출
해서 비용을 크게 늘릴 수 있다.
이 기능은 요청당 어떤 Resource를 더 쓰는가?
외부 API 비용이 있는가?
Storage가 계속 쌓이는가?
Background Job이 늘어나는가?
를 본다.
예:
기존:
페이지 조회마다
LLM 호출
보다는:
상품 변경 시 1회 분석
↓
결과 저장
↓
페이지에서는 결과 조회
가 훨씬 싸고 안정적이다.
실시간 계산:
매 Request 비용
Precompute:
변경 시 1회 비용
이다.
예:
상품 AI 요약
리뷰 요약
검색용 Metadata
등이다.
1004 Cache와 연결된다.
예:
리뷰 100건
LLM 100회
보다:
적절하게 묶어서
10회
가 저렴할 수 있다.
적절한 Batch Size가 필요하다.
동일 정보 조회를 여러 Module이 각각 하지 않는다.
예:
Provider Product Metadata
를 한 번 가져와 공유한다.
외부 API:
1회 실패
→ 5회 Retry
면 비용도 최대 5배일 수 있다.
1005와 연결된다.
너무 긴 Timeout은:
Worker 점유
Connection 점유
Compute 시간
을 늘린다.
업무 특성에 따라 결정한다.
너무 큰 Resource
비용 낭비.
너무 작은 Resource
장애/성능 저하.
Measure
↓
Analyze
↓
Resize
↓
Observe
↓
Load Test
↓
Adjust
이다.
Traffic과 기능은 계속 바뀐다.
작은 서비스라도:
월 1회
정도 비용을 볼 수 있다.
예:
AI 도입
신규 쇼핑몰 연동
대량 분석 기능
이후 비용 변화 확인.
예:
전주 대비 +30%
같이 내부 기준을 둘 수 있다.
매월 첫날 사용량 초기화 효과 같은 것도 고려한다.
월 중간에:
현재 추세면
월말 예상 비용
을 보는 것이 좋다.
예:
EC2
시간당
S3
GB-month
CloudWatch
Ingestion GB
LLM
Token
처럼 비용 단위를 이해하면 원인을 찾기 쉽다.
비용은 결국:
Usage
×
Unit Price
로 생각할 수 있다.
Usage가 늘었나?
Unit Cost가 바뀌었나?
이다.
Traffic 증가
Bug
Log 증가
File 증가
Retry 증가
등이다.
예:
Instance Type 변경
Region 변경
Pricing Option 변경
등이다.
작은 회사에서 팀별 청구 시스템까지 만들 필요 없다.
예:
Customer Web
Admin
Automation
AI
정도다.
기능 존속 여부 판단에도 도움된다.
예:
AI 기능:
월 비용 10만
업무시간 20시간 절감
이면 가치가 높다.
월 비용 30만
한 달 5번 사용
이면 구조를 다시 볼 수 있다.
RDS
필수
최적화 제한
EC2
Peak 낮음
Downsize 검토
S3 Export
Old 파일 많음
Lifecycle 적용
CloudWatch
DEBUG 폭증
정리
AI API
중복 Run 있음
Idempotency 적용
처럼 본다.
AWS 월 비용 Breakdown 확인
이다.
EC2/RDS CPU/Memory/Connection
2~4주 Trend
확인.
Idle Resource 찾기.
Old Volume
Snapshot
Unused S3 Artifact
등이다.
CloudWatch Log Volume/Retention 확인.
S3 Lifecycle.
특히:
Export
Temporary Artifact
부터 적용.
Load Test 후 EC2/RDS Right Sizing 검토.
AI/외부 API Usage와 Budget 기록.
월별 Cost Review 문서화.
복잡한 FinOps Platform
Cloud Cost Data Warehouse
자동 Resource Termination
Multi-account Chargeback
AI Auto Rightsizing
까지는 필요 없다.
예:
Month
AWS Total
EC2
RDS
S3
Logs
AI
Reason
을 기록한다.
/docs/cost/
2026-10-cost-review.md
형태다.
# Monthly Cost Review
## 총 비용
## 전월 대비
## 주요 비용 Resource
## 증가한 항목
## 감소한 항목
## Traffic 변화
## Release 변화
## Idle Resource 후보
## Right Sizing 후보
## Reliability Cost
## Cost Saving Action
## 예상 절감액
## 위험도
## 다음 Review
예:
2026-10-08
RDS
db.tX → db.tY
Reason
Peak utilization low
Expected Saving
월 X원
Rollback
Instance type 복구
처럼 남긴다.
Plan
↓
Validate
↓
Apply
↓
Health Check
↓
Observe
↓
Rollback
이다.
CPU
Free Memory
Connection
p95 Query
Slow Query
Error Rate
를 본다.
CPU
Memory
Event Loop
API p95
Worker Duration
을 본다.
단순:
월 비용 -20%
가 아니다.
월 비용 -20%
SLO 유지
Error Rate 유지
Queue Lag 유지
RTO/RPO 유지
이다.
예:
RDS 다운사이징
↓
메모리 부족
↓
Disk I/O 증가
↓
주문관리 API 지연
이다.
예:
Monthly Budget
AI Daily Budget
Log Retention Max
Artifact Retention
Resource Tag Required
정도를 둘 수 있다.
왜 필요한가?
Production인가?
Owner는?
예상 월 비용은?
언제 삭제할 수 있는가?
Tag가 있는가?
를 확인한다.
expiresAt예:
Purpose
load-test
ExpiresAt
2026-10-15
같이 Tag할 수 있다.
자동 삭제 대신:
삭제 후보
로 보여준다.
Production 사고 위험이 줄어든다.
오래된:
Snapshot
Backup
S3 File
Log
은 비용뿐 아니라 공격 표면도 늘린다.
예:
Backup
Audit
WAF
Monitoring
이다.
다음 순서가 안전하다.
1. Waste 제거
2. 비효율 개선
3. Right Size
4. 할인 검토
5. Architecture 변경
이다.
복잡도와 장애 위험이 가장 크기 때문이다.
비용 때문에:
RDS 없애고
직접 PostgreSQL 운영
하는 것은 관리 부담과 장애 위험이 크게 늘 수 있다.
RDS가 EC2 직접 DB보다 비싸 보여도:
Backup
Patch
Failover
Monitoring
관리 시간
가 포함된 가치가 있다.
단순 단가만 비교하지 않는다.
운영 시간을 줄여준다.
직접 Cache Server를 만드는 비용보다 관리형 CDN이 더 경제적일 수 있다.
비용 최적화에서도:
직접 구축 비용
SaaS/Managed 비용
을 비교한다.
그때 다시 측정한다.
예:
SaaS 자동화
월 30만
직접 Worker
월 Infra 5만
+
개발 시간
을 비교한다.
예:
AI Report 생성
estimatedCost
를 Run Metadata에 넣는다.
예:
WorkflowRun
duration
tokens
externalCalls
estimatedCost
를 추적할 수 있다.
예:
AI_WEEKLY_REPORT
평균 1,500원/run
COMMIT_SUMMARY
평균 50원/run
처럼 볼 수 있다.
예:
Prompt v4
8k tokens
Prompt v5
3k tokens
인데 품질이 비슷하면 v5가 효율적이다.
단순 품질만 보지 않는다.
예:
Model A
성공률 95%
비용 100
Model B
성공률 80%
비용 30
다.
Model B가 실패해 결국 Model A를 다시 쓰면 더 비쌀 수 있다.
개념적으로:
1회 비용
×
평균 시도 횟수
를 본다.
더 현실적으로는:
비용
+
사람 수정 시간
+
재작업
까지 봐야 한다.
로컬 모델을 켜두고 전혀 안 쓰는 시간이 많다면:
RAM
전력
을 계속 사용한다.
단 실행 지연과 Trade-off다.
돈은 안 나가도 생산성이 떨어질 수 있다.
Time
Complexity
Performance
Cognitive Load
도 비용이다.
TCO:
Infra
SaaS
개발
운영
장애
유지보수
를 합친 개념이다.
직접 DB 운영:
월 3만원 절약
하지만 장애 대응/백업 관리에 월 5시간 더 든다면 비효율적일 수 있다.
이 절약이
내 시간을 쓸 만큼 큰가?
를 묻는다.
# Cost Spike Incident
## 1. 증가 항목 확인
EC2
RDS
S3
CloudWatch
Data Transfer
AI
## 2. 증가 시점 확인
## 3. 최근 Release 확인
## 4. Traffic 변화 확인
## 5. Retry / Error 증가 확인
## 6. Log Volume 확인
## 7. Storage Growth 확인
## 8. AI Run 증가 확인
## 9. Idle Resource 확인
## 10. 즉시 조치
- Debug Log OFF
- 잘못된 Job Pause
- AI Low Priority Pause
- Retry Loop 중단
## 11. Destructive Action
Resource 삭제/다운사이징은
원인 확인 후 승인.
## 12. 정상화 확인
## 13. 비용 추정 갱신
## 14. Action Item
현재 React + NestJS + Prisma + AWS 기반 프로젝트를
Cost Optimization 관점에서 분석해줘.
코드를 바로 수정하지 말고,
현재 구조에서 비용 증가 요인과
저위험 절감 후보를 먼저 찾는다.
실제 AWS 청구 금액이나 Metric이 제공되지 않은 영역은
비용을 숫자로 추정해서 사실처럼 말하지 않는다.
검토 대상:
1. EC2
2. RDS
3. S3
4. CloudFront
5. CloudWatch Log / Metric
6. Queue / Redis
7. Export Artifact
8. Backup / Snapshot
9. External API
10. AI / LLM
11. Background Worker
12. Staging / Development Resource
각 영역마다 다음을 정리한다.
## Resource / 기능
## 비용이 발생하는 이유
## Waste 가능성
## Reliability를 위해 필요한 비용인지
## 필요한 Metric
## 최적화 후보
## 위험도
LOW / MEDIUM / HIGH
## 예상 적용 난이도
LOW / MEDIUM / HIGH
실제 비용 정보가 없으면
절감 금액을 임의로 만들지 않는다.
특히 다음 패턴을 찾아줘.
- 사용하지 않는 Resource 후보
- 24시간 켜둘 필요가 없는 개발 Resource
- 오래된 S3 Export / Temporary Artifact
- 과도한 Log
- Production DEBUG Logging
- Retention 없는 Log
- 불필요한 Snapshot
- 대량 Data Transfer
- 반복 External API 호출
- 반복 AI Run
- 같은 Input에 중복 LLM 실행
- 대형 Prompt Context
- Worker Idle Resource
- API와 장시간 Worker가 같은 Process를 사용해
과도한 사양이 필요한 구조
마지막에 다음 네 그룹으로 나눠줘.
1. 즉시 가능한 저위험 절감
2. Metric 확인 후 Right Sizing
3. Reliability 때문에 유지해야 하는 비용
4. 지금은 손대지 않는 것이 좋은 영역
현재 AWS Resource의 Right Sizing을 위한
검증 계획을 작성해줘.
실제 AWS Instance 변경은 수행하지 않는다.
대상:
- EC2
- RDS
- Worker
- Redis가 있다면 해당 Resource
각 Resource마다:
## 확인할 Metric
## 최소 관찰 기간
## Peak 확인 방법
## Downsize 후보 조건
## Downsize 금지 조건
## 변경 전 Load Test
## 변경 후 확인 Metric
## Rollback 기준
을 작성한다.
특히 다음 원칙을 따른다.
1. 평균 CPU만 보고 Downsize하지 않는다.
2. CPU + Memory + Connection + I/O를 같이 본다.
3. Peak Event 기간을 고려한다.
4. Query/Code Regression과
실제 Capacity 부족을 구분한다.
5. RDS는 Query Optimization을 먼저 검토한다.
6. Application 서버는
CPU-heavy Worker가 함께 있는지 확인한다.
7. Downsize 후 SLO 악화 시 즉시 Rollback 가능하게 한다.
8. 한 번에 EC2/RDS/Redis를 모두 변경하지 않는다.
9. 변경 전/후 동일 Load Test Scenario로 비교한다.
현재 AI / LLM 자동화 코드를
비용 효율 관점에서 분석해줘.
코드 변경 전 분석만 수행한다.
검토 대상:
- Prompt
- Context 구성
- Model 선택
- Retry
- Cache
- Idempotency
- Workflow
- Artifact
- Local LLM / External API
찾을 항목:
1. 동일 Input의 중복 Run
2. 필요 이상으로 큰 Context
3. 같은 파일을 반복 전송
4. 불필요한 Prompt 반복
5. Retry 제한 없음
6. 실패한 요청의 무조건 재실행
7. 작은 작업에 큰 모델 사용
8. Cache 가능한 deterministic 분석
9. 오래된 AI Raw Artifact
10. 생성 후 사용되지 않는 결과
각 항목에 대해:
## 현재 구조
## 비용 낭비 가능성
## 품질 영향
## 개선 방법
## 위험도
를 정리한다.
가능하면 다음 Fingerprint를 활용할 수 있는지 확인한다.
- task
- commitSha
- promptVersion
- contextHash
- model
- policyVersion
동일 Fingerprint 결과가 이미 있으면
재사용 가능한지 판단한다.
단 창의적 생성처럼
매번 다른 결과가 필요한 작업까지
무조건 Cache하지 않는다.
# Monthly Cost Review
## 1. 총 비용
이번 달:
전월:
변화율:
---
## 2. 주요 비용 항목
EC2:
RDS:
S3:
CloudFront:
CloudWatch:
External API:
AI:
---
## 3. Usage 변화
Traffic:
Orders:
Exports:
AI Runs:
Storage:
---
## 4. 비용 증가 원인
---
## 5. 비용 감소 원인
---
## 6. Idle Resource 후보
---
## 7. Right Sizing 후보
---
## 8. Reliability Cost
유지해야 하는 비용:
- Backup
- Monitoring
- Headroom
- Availability
---
## 9. Cost Saving 후보
### 후보 A
예상 효과:
위험:
구현 난이도:
### 후보 B
---
## 10. 이번 달 실행
---
## 11. 다음 달 관찰 항목
1007에서는:
우리 시스템은
어디까지 버틸 수 있고
무엇이 먼저 병목이 되는가?
를 다뤘다.
1008에서는 그다음 질문인:
그 Capacity를 유지하면서
얼마나 효율적으로 비용을 쓸 수 있는가?
를 다뤘다.
가장 중요한 원칙은:
Cost Optimization
≠
가장 싼 Infra
라는 것이다.
진짜 목표는:
Performance
+
Reliability
+
Recoverability
를 유지하면서
Waste 제거
다.
가장 먼저 해야 할 일은 복잡한 Architecture 변경이 아니다.
Unused Resource
Old Artifact
Excessive Log
Duplicate AI Run
Overprovisioned Resource
같은 명확한 낭비부터 제거한다.
그다음:
Measure
↓
Right Size
↓
Load Test
↓
Observe
순서로 간다.
EC2/RDS를 줄일 때도:
평균 CPU 낮음
하나만 봐서는 안 된다.
반드시:
Peak CPU
Memory
DB Connection
I/O
Latency
Seasonal Traffic
을 같이 본다.
그리고 중요한 것은:
Reliability Cost
와:
Waste
를 구분하는 것이다.
예를 들어:
안 쓰는 EC2
= Waste
지만:
Backup
Monitoring
Headroom
Multi-AZ
는 의도적으로 지불하는 안정성 비용일 수 있다.
이 비용을 무작정 줄이면 나중에 더 큰 장애 비용을 낼 수 있다.
AI 비용도 같은 원칙이다.
큰 모델을 덜 쓰자
만으로 끝나는 것이 아니라:
중복 Run 제거
Prompt Context 축소
Idempotency
Cache
Retry Budget
작업별 Model 선택
을 조합한다.
특히 같은:
commitSha
promptVersion
contextHash
model
로 이미 결과가 있다면 다시 LLM을 실행하지 않는 것만으로도 낭비를 크게 줄일 수 있다.
비용 판단에서는 결국:
Infra 비용
+
개발 시간
+
운영 시간
+
장애 위험
을 같이 봐야 한다.
즉 가장 싼 AWS Architecture가:
가장 싼 시스템
이라는 보장은 없다.
1인 개발 환경에서는 오히려:
관리형 서비스 사용
구조 단순화
조금 더 여유 있는 서버
가 총비용 관점에서 더 나을 수 있다.
현재 프로젝트에서는 먼저:
1. 월 AWS 비용 Breakdown
2. Idle Resource 정리
3. S3/Export Retention
4. Production Log Volume 정리
5. EC2/RDS Usage Trend 확인
6. Load Test 후 Right Sizing
7. AI Run/Token Budget 기록
순서가 현실적이다.
그리고 비용 절감 변경도:
Plan
↓
Validate
↓
Apply
↓
Health Check
↓
Observe
↓
Rollback
흐름으로 진행한다.
전체 시리즈 흐름으로 연결하면:
Capacity 측정
↓
병목 확인
↓
필요 Capacity 결정
↓
Waste 제거
↓
Right Sizing
↓
Cost Guardrail
↓
Usage/Cost 관찰
↓
재최적화
가 된다.
결국 Cost Optimization의 핵심은
“얼마나 적게 돈을 쓸 수 있는가”가 아니라, 실제 서비스 가치에 필요한 성능·안정성·복구 능력에는 기꺼이 비용을 쓰되, 아무 가치도 만들지 않는 자원·중복 처리·과도한 보관·불필요한 호출에는 돈을 쓰지 않는 것
이다.