AWS EKS 및 ECS에서 컨테이너 워크로드 비용 최적화

발행: (2025년 12월 25일 오전 01:46 GMT+9)
12 min read
원문: Dev.to

Source: Dev.to

안녕하세요, 여러분!
우리 모두가 관심을 갖는 주제에 대해 이야기해볼까요? 바로 클라우드 비용을 절감하는 방법입니다. 저는 최근에 AWS에서 컨테이너 비용을 최적화하는 방법을 깊이 파고들었는데, 이 인사이트들을 미리 알았다면 좋았을 텐데 하는 생각이 듭니다.

왜 컨테이너 비용 최적화가 중요한가

컨테이너는 확장성과 배포에 큰 장점이 있지만, 눈여겨 보지 않으면 예산을 은밀히 갉아먹을 수 있습니다. 좋은 소식은? AWS는 성능에 영향을 주지 않으면서—때로는 성능까지 향상시키는—비용 마법을 사라지게 하는 다양한 방법을 제공합니다.

스팟 인스턴스: 당신의 비밀 무기

스팟 인스턴스는 제가 AWS에서 얻은 가장 큰 혜택일 가능성이 높습니다. 온디맨드 인스턴스에 비해 **최대 90 %**까지 절감할 수 있습니다. 네, 90 %요! 간헐적인 중단을 견딜 수 있는 내결함성 애플리케이션에 이상적입니다.

  • EKS는 스팟 인스턴스를 사용한 관리형 노드 그룹을 비교적 쉽게 사용할 수 있게 해줍니다.
  • 동일한 EKS 클러스터 내에서 스팟 인스턴스와 일반 인스턴스를 혼합할 수 있습니다: 중요한 워크로드에는 일반 인스턴스를, 덜 중요한 워크로드에는 스팟 인스턴스를 사용하세요.

우리에게 효과적이었던 방법:
배치 처리 워크로드와 CI/CD 파이프라인을 스팟 인스턴스로 옮기자마자 비용이 즉시 절감되었습니다. 이러한 워크로드는 본질적으로 중단 가능하므로 비용 혜택이 바로 나타났습니다. 애플리케이션이 정상적으로 종료될 수 있도록만 하면, 바로 사용하실 수 있습니다.

Fargate vs EC2: 현명하게 선택하기

FargateEC2
Cost비용: 컴퓨팅 단위당 비용은 높지만, 사용한 만큼만 (초 단위까지) 지불합니다.비용: 적절히 규모를 맞추면 컴퓨팅 단위당 비용이 낮으며, 예약 인스턴스나 Savings Plans를 사용하면 더 저렴할 수 있습니다.
Operational overhead운영 오버헤드: 인프라 관리가 필요 없으며, AWS가 기본 서버를 관리합니다.운영 오버헤드: 인스턴스를 직접 관리합니다(패치, 스케일링 등).
Best for최적 대상: 예측 불가능한 트래픽, 작은 워크로드, 혹은 무운영(zero‑ops)을 원할 때.최적 대상: 예측 가능한 지속적인 프로덕션 워크로드로, 규모를 맞추고 높은 활용도를 유지할 수 있는 경우.

My current approach

  • Fargate는 개발 환경 및 가끔 발생하는 워크로드에 사용합니다.
  • EC2(잘 최적화된, 필요 시 예약 인스턴스/Savings Plans 적용)는 지속적인 트래픽을 받는 프로덕션 워크로드에 사용합니다.

본질적으로 올바른 도구를 올바른 작업에 사용하는 것입니다.

자동 스케일링: 다이내믹 듀오

리소스 할당에 대한 제 생각을 바꾼 두 가지 구성 요소:

  1. Cluster Autoscaler – 대기 중인 파드에 따라 노드 수를 자동으로 조정합니다. 이제 유휴 노드에 비용을 지불할 필요가 없습니다.
  2. Horizontal Pod Autoscaler (HPA) – CPU, 메모리 또는 사용자 정의 메트릭을 기반으로 애플리케이션 수준에서 파드를 스케일링합니다.

이 두 가지가 함께 “멋진 효율성 교향곡”을 만들어냅니다. 트래픽이 급증하면 클러스터가 자동으로 확장되고, 트래픽이 감소하면 자동으로 축소되어 ~30 % 정도의 과다 프로비저닝을 없애면서 비용을 절감합니다.

예시 HPA 매니페스트

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

권리 사이즈 조정: 자원 낭비 방지

저는 “혹시 몰라서” 라는 이유로 파드 리소스 요청을 너무 높게 설정한 적이 있습니다. 그 결과 사용하지 않는 리소스에 비용을 지불하게 되었습니다.

리소스 최적화 단계:

  1. 실제 사용량 측정 – Kubernetes Metrics Server(또는 Prometheus)를 사용해 실제 사용량을 확인합니다.
  2. 요청 및 제한값 조정 – 예를 들어, 파드가 약 100 MiB 메모리를 사용하지만 512 MiB를 요청한다면 과다 지불하게 됩니다.
  3. 보수적으로 반복 – 변경 후 1~2주 동안 모니터링하고, 필요에 따라 추가 조정합니다.

작은 조정이라도 수십 개, 수백 개의 파드에 걸쳐 누적됩니다.

Kubecost: 당신의 재무 가시성 파트너

Kubecost는 Kubernetes 워크로드에 대한 실시간 비용 가시성을 제공합니다. 네임스페이스나 파드 수준까지 정확히 어느 부분에 비용이 사용되고 있는지 보여줍니다.

Kubecost를 사랑하는 이유

  • 팀, 애플리케이션, 혹은 환경별 비용 분류.
  • 정의된 한도를 초과하면 알림을 보냅니다.
  • 커뮤니티 에디션은 무료이며 초보자에게 안성맞춤입니다.

클러스터에 설치하면 비용 할당, 최적화 기회, 알림 등에 대한 인사이트를 얻을 수 있습니다—즉, Kubernetes 환경을 위한 재무 분석가와 같습니다.

ECR 라이프사이클 정책: 정리하고 비용 절감

Amazon ECR에 저장된 컨테이너 이미지가 오래되거나 사용되지 않는 버전일 경우 비용이 발생하기 시작합니다. ECR 라이프사이클 정책을 사용하면 이미지의 연령이나 개수에 따라 자동으로 정리할 수 있습니다.

간단한 정책 예시: 최근 10개의 이미지를 유지하고, 풀(pull)되지 않은 30일 이상 된 이미지는 삭제합니다.

{
  "rules": [
    {
      "rulePriority": 1,
      "description": "Keep last 10 images",
      "selection": {
        "tagStatus": "any",
        "countType": "imageCountMoreThan",
        "countNumber": 10
      },
      "action": {
        "type": "expire"
      }
    },
    {
      "rulePriority": 2,
      "description": "Delete images older than 30 days",
      "selection": {
        "tagStatus": "any",
        "countType": "sinceImagePushed",
        "countUnit": "days",
        "countNumber": 30
      },
      "action": {
        "type": "expire"
      }
    }
  ]
}

이와 같은 정책을 적용하면 사용되지 않는 이미지가 조용히 비용을 소모하는 것을 방지할 수 있습니다.

TL;DR

  • Spot Instances → 중단 가능한 워크로드에 대해 최대 90 % 절감.
  • Fargate vs EC2 → 예측 가능성, 운영 오버헤드, 비용 모델에 따라 선택.
  • Autoscaling (Cluster Autoscaler + HPA) → 유휴 용량을 제거해 약 30 % 절감.
  • Rightsizing → 실제 사용량에 맞게 요청/제한을 조정.
  • Kubecost → 실시간 비용 가시성 및 알림 제공.
  • ECR Lifecycle Policies → 오래된 이미지 자동 정리로 스토리지 낭비 방지.

이러한 실천 방안을 적용하면 성능을 희생하지 않으면서 AWS 컨테이너 비용을 눈에 띄게 줄일 수 있습니다. 최적화 즐기세요!

{
  "rules": [
    {
      "id": 1,
      "description": "Keep last 10 images",
      "selection": {
        "tagStatus": "any",
        "countType": "imageCountMoreThan",
        "countNumber": 10
      },
      "action": {
        "type": "expire"
      }
    }
  ]
}

전체 화면 제어 (예시)

  • 전체 화면 모드 진입
  • 전체 화면 모드 종료

작은 차이지만 여러 저장소를 다룰 때 디스크 공간 절감 효과가 누적될 수 있습니다.

Cost Optimization

모두 합쳐서

비용 최적화는 일회성 작업이 아닙니다. 빠른 성과를 얻을 수 있는 자동 스케일링, Spot 인스턴스, Kubecost부터 시작하세요.

  1. 빠른 성과

    • Autoscaling
    • Spot instances
    • Kubecost
  2. 다음 단계

    • Rightsizing
    • 오래된 이미지 정리
    • Fargate와 EC2 중 선택

진행 상황을 모니터링하고 성과를 축하하세요. 우리는 3개월 만에 컨테이너 비용을 ≈45 % 절감했습니다.

앞으로 다룰 영역

  • 인프라
  • IRSA (IAM Roles for Service Accounts)

기억하세요, 절감한 1달러씩도 더 나은 기능을 만들거나 인프라를 개선하는 데 재투자할 수 있습니다.


성공적으로 시도한 비용 최적화 방법은 무엇인가요?
여러분의 경험을 듣고 싶습니다. 팁을 놓치지 않기 위해서요. 미리 감사드리며, 서로 배우는 것을 계속해요!

아래 댓글 섹션에 “비용 절감 최고의 팁”을 공유하여 서로 클라우드 비용을 관리하도록 도와주세요!

Back to Blog

관련 글

더 보기 »