$100 버짓으로 AWS 운영기
개인 AWS 계정은 두 가지 방식으로 망한다. 안 쓰는 리소스가 조용히 과금되거나, 겁이 나서 아무것도 안 만들거나. 둘 다 피하고 싶어서 규칙을 하나 세웠다: 월 $100. 이 안에서는 마음껏, 넘으면 자동으로 제동.
이 글은 그 예산 안에서 쿠버네티스 클러스터, PostgreSQL, Valkey 캐시, 그리고 도메인 달린 사이트 두 개(이 블로그 포함)를 올린 기록이다.
시작: 청소부터
첫날 비용 조회를 해보니 매달 $3이 새고 있었다. 2년 전 실험하고 잊어버린 EBS 스냅샷 53GB. 금액은 작지만 성격이 나쁘다 — 잊힌 리소스는 영원히 과금된다. AMI를 지우니 그 뒤에 숨어 있던 백업 스냅샷들이 고아로 드러나는 것도 이때 배웠다. 콘솔에서 손으로 만든 인프라의 말로다. 그래서 원칙 1:
모든 리소스는 Terraform으로만 만든다. 코드에 없는 리소스는 존재하지 않아야 한다.
큰 돈은 어디서 새는가
예산을 세우고 나서 알게 된 것: AWS에서 개인 규모의 돈을 잡아먹는 건 트래픽이 아니라 **“켜져 있는 것 자체에 붙는 고정비”**다.
| 유혹 | 고정비 | 선택 |
|---|---|---|
| EKS 컨트롤 플레인 | $73/월 | ❌ k3s를 EC2 한 대에 직접 설치 (~$13) |
| NAT Gateway | $35/월 + 데이터 | ❌ 퍼블릭 서브넷 + 보안그룹으로 대체 |
| ALB 하나 | $18/월 | ❌ k3s 내장 Traefik이 노드 포트로 처리 |
| 관리형 캐시 서버리스 (Redis OSS) | 최소 ~$90/월 | ❌ Valkey 노드형 t4g.micro (~$12) |
EKS 대신 k3s를 고른 게 제일 큰 결정이었다. 쿠버네티스 API는 동일하고,
컨트롤 플레인이 죽으면 AWS가 아니라 내가 고쳐야 하지만 — 그것도 공부다.
노드는 스팟 인스턴스라 언제든 회수될 수 있는데, 대응 전략은 단순하다:
노드를 아끼지 않는다. 매니페스트는 git에, 데이터는 RDS에 있으니
죽으면 terraform apply로 다시 만든다. 가축(cattle)이지 반려동물(pet)이 아니다.
웹사이트는 서버가 없는 게 제일 싸다
포트폴리오와 이 블로그는 k3s에도 안 올렸다. 정적 사이트는 S3 + CloudFront가 압도적으로 싸다 — CloudFront 무료 티어가 월 1TB 전송이라 개인 사이트는 사실상 영구 무료 구간이고, 인증서(ACM)도 공짜다. 고정비는 도메인 등록비 $15/년과 Route 53 존 $0.50/월이 전부다.
예산은 선언이 아니라 시스템이어야 한다
AWS에는 “이 금액 넘으면 결제 차단” 같은 하드캡이 없다. 그래서 직접 짰다:
- 매일 아침 9시, 비용 리포트 이메일 — GitHub Actions 크론이 Cost Explorer를 조회해서 이달 누적과 어제 서비스별 내역을 보낸다. 서버 없음, 시크릿 없음(OIDC).
- 예산 경보 3단 — 50/80% 실제, 100% 예상 도달 시 이메일.
- 킬 스위치 — GitHub Actions 버튼 하나로 비싼 것 전부(k3s, RDS, 캐시) 철거. 상태 버킷·DNS·예산 경보 같은 “생존 계층”은 폭발 반경 밖에 둬서, 철거 후에도 “오늘 $0 나감” 리포트는 계속 온다. 다음 달에 버튼 한 번으로 부활.
과금 데이터가 8~24시간 지연되는 이상 “실시간 차단”은 애초에 환상이다. 할 수 있는 건 빨리 알고, 한 번에 끌 수 있게 만들어두는 것뿐이다.
현재 청구서
| 항목 | 월 |
|---|---|
| k3s 노드 (t4g.medium 스팟) + EIP + EBS | ~$14 |
| RDS PostgreSQL 16 (db.t4g.micro) | ~$21 |
| ElastiCache Valkey (cache.t4g.micro) | ~$12 |
| 포트폴리오 + 블로그 (S3 + CloudFront) | ~$0 |
| Route 53 존 2개 항목 + 도메인 | ~$2 |
| 합계 | ~$50 / $100 |
절반이 남았다. 남은 절반은 예비비가 아니라 다음 실험을 위한 공간이다. 안 쓸 때는 RDS를 멈추고(-$19) 노드를 끄면(-$13) 월 $20 아래로도 내려간다.
배운 것
- 비용 최적화의 8할은 인스턴스 크기가 아니라 아키텍처 선택에서 결정된다. (EKS→k3s, NAT 제거, 서버리스 정적 호스팅 — 이 세 개가 월 $120을 지웠다)
- 고정비는 목록으로 관리하고, 종량제는 상한으로 관리한다.
- 지울 수 있는 인프라만이 싼 인프라다.
terraform destroy가 무섭다면 이미 잘못 만든 것이다.
다음 글은 이 위에 올릴 첫 실험이 정해지면.