← 블로그 홈

AWS 예약 인스턴스(Reserved Instances) 완벽 가이드: 비용 최적화의 핵심

AWS를 사용하다 보면 가장 먼저 마주하게 되는 고민이 바로 비용 최적화입니다. 특히 EC2 인스턴스를 장기간 운영하는 경우, 예약 인스턴스(Reserved Instances, RI)는 최대 72%까지 비용을 절감할 수 있는 강력한 도구입니다. 이...

AWS를 사용하다 보면 가장 먼저 마주하게 되는 고민이 바로 비용 최적화입니다. 특히 EC2 인스턴스를 장기간 운영하는 경우, 예약 인스턴스(Reserved Instances, RI)는 최대 72%까지 비용을 절감할 수 있는 강력한 도구입니다. 이 글에서는 예약 인스턴스의 모든 것을 실무 경험을 바탕으로 상세히 다뤄보겠습니다.

🏷️ 예약 인스턴스란?

예약 인스턴스는 1년 또는 3년 기간 동안 특정 EC2 인스턴스 유형을 예약하고, 그 대가로 온디맨드 요금보다 대폭 할인된 가격을 받는 AWS의 요금 모델입니다.

기본 개념

온디맨드 인스턴스  vs  예약 인스턴스
┌─────────────────┐    ┌─────────────────┐
│ 시간당 과금     │    │ 기간 약정       │
│ 유연한 사용     │    │ 할인된 요금     │
│ 높은 비용       │    │ 비용 예측 가능  │
│ 즉시 사용/종료  │    │ 장기 사용 최적화 │
└─────────────────┘    └─────────────────┘

💰 비용 절감 효과

실제 절약 비교 (us-east-1 기준)

인스턴스 타입: m5.large

온디맨드:    $0.096/시간 × 24시간 × 365일 = $840.96/년
1년 예약:    $0.057/시간 × 24시간 × 365일 = $499.32/년
절약 효과:   $341.64/년 (약 41% 절약)

3년 예약:    $0.038/시간 × 24시간 × 365일 = $332.88/년
절약 효과:   $508.08/년 (약 60% 절약)

규모별 절약 효과

# 실제 비용 계산 예시
def calculate_ri_savings(instance_count, hourly_ondemand, hourly_ri, hours_per_year=8760):
    annual_ondemand = instance_count * hourly_ondemand * hours_per_year
    annual_ri = instance_count * hourly_ri * hours_per_year
    savings = annual_ondemand - annual_ri
    percentage = (savings / annual_ondemand) * 100
    
    return {
        'ondemand_cost': annual_ondemand,
        'ri_cost': annual_ri,
        'savings': savings,
        'percentage': percentage
    }

# 20개 m5.large 인스턴스 예시
result = calculate_ri_savings(20, 0.096, 0.057)
print(f"연간 절약: ${result['savings']:,.2f} ({result['percentage']:.1f}%)")
# 결과: 연간 절약: $6,832.80 (40.6%)

🎯 예약 인스턴스 유형

1. 표준 예약 인스턴스 (Standard RI)

특징:
✅ 최대 할인율 (최대 72%)
❌ 인스턴스 패밀리 변경 불가
❌ 운영체제 변경 불가
❌ 테넌시 변경 불가

적합한 경우:
- 워크로드가 안정적이고 예측 가능한 경우
- 장기간 동일한 인스턴스 유형 사용이 확실한 경우
- 최대 비용 절감이 목표인 경우

2. 전환형 예약 인스턴스 (Convertible RI)

특징:
✅ 인스턴스 패밀리 변경 가능
✅ 운영체제 변경 가능
✅ 테넌시 변경 가능
❌ 표준 RI보다 낮은 할인율 (최대 54%)

적합한 경우:
- 워크로드 요구사항이 변할 수 있는 경우
- 기술 스택 변경 가능성이 있는 경우
- 유연성과 비용 절감의 균형이 필요한 경우

💳 결제 옵션

1. 전체 선결제 (All Upfront)

특징: 전체 금액을 미리 결제
장점: 최대 할인율
단점: 초기 현금 부담

예시 (m5.large, 1년):
- 선결제: $499
- 시간당: $0.00
- 총 비용: $499

2. 부분 선결제 (Partial Upfront)

특징: 일부 선결제 + 시간당 요금
장점: 적당한 할인율 + 현금 부담 완화
단점: 전체 선결제보다 약간 비싸

예시 (m5.large, 1년):
- 선결제: $245
- 시간당: $0.029
- 총 비용: $499 ($245 + $254)

3. 선결제 없음 (No Upfront)

특징: 선결제 없이 시간당 요금만
장점: 현금 부담 없음
단점: 가장 낮은 할인율

예시 (m5.large, 1년):
- 선결제: $0
- 시간당: $0.057
- 총 비용: $499

📊 실제 구매 전략

1. 워크로드 분석

# 과거 사용량 분석 예시 (CloudWatch 데이터 활용)
import boto3
from datetime import datetime, timedelta

def analyze_ec2_usage():
    """과거 3개월 EC2 사용량 분석"""
    cloudwatch = boto3.client('cloudwatch')
    
    # 과거 90일간의 CPU 사용률 데이터
    response = cloudwatch.get_metric_statistics(
        Namespace='AWS/EC2',
        MetricName='CPUUtilization',
        Dimensions=[
            {'Name': 'InstanceId', 'Value': 'i-1234567890abcdef0'}
        ],
        StartTime=datetime.utcnow() - timedelta(days=90),
        EndTime=datetime.utcnow(),
        Period=3600,  # 1시간
        Statistics=['Average']
    )
    
    # 안정적인 베이스라인 워크로드 식별
    baseline_hours = sum(1 for point in response['Datapoints'] 
                        if point['Average'] > 10)  # 10% 이상 사용
    
    return baseline_hours

2. 구매 시나리오 예시

현재 상황: 웹 서비스 운영 (24/7)
- 프로덕션: 5개 m5.large (항상 실행)
- 스테이징: 2개 m5.large (업무시간만 실행)
- 개발: 3개 t3.medium (간헐적 사용)

권장 RI 전략:
✅ 프로덕션 5개 → 표준 RI 1년 구매 (안정적 워크로드)
✅ 스테이징 1개 → 전환형 RI 1년 구매 (유연성 필요)
❌ 개발환경 → 온디맨드 유지 (불규칙한 사용 패턴)

🔧 고급 최적화 전략

1. RI 교환 및 수정

# RI 수정 예시 (AWS CLI 사용)
aws ec2 modify-reserved-instances \
    --reserved-instances-ids ri-1234567890abcdef0 \
    --target-configurations file://ri-modification.json

# ri-modification.json 예시
{
    "ReservedInstancesConfigurationList": [
        {
            "AvailabilityZone": "us-east-1a",
            "InstanceCount": 2,
            "InstanceType": "m5.large"
        },
        {
            "AvailabilityZone": "us-east-1b", 
            "InstanceCount": 3,
            "InstanceType": "m5.large"
        }
    ]
}

2. RI 마켓플레이스 활용

상황: 더 이상 필요 없는 RI 보유

옵션 1: RI 마켓플레이스에서 판매
- 남은 기간에 대해 다른 AWS 고객에게 판매
- 원금의 70-90% 회수 가능

옵션 2: 다른 AWS 계정으로 이전 (조직 내)
- AWS Organizations 계정 간 무료 이전
- 그룹사/자회사 간 RI 공유

3. Savings Plans와의 비교

예약 인스턴스 (RI) vs Savings Plans

RI (표준):
✅ 최대 할인율 (최대 72%)
❌ 특정 인스턴스 유형에 한정
❌ 리전별 구매 필요

Savings Plans:
✅ 더 많은 유연성 (EC2, Lambda, Fargate)
✅ 인스턴스 패밀리 간 자동 적용
❌ RI보다 약간 낮은 할인율 (최대 66%)

📈 모니터링 및 관리

1. RI 사용률 모니터링

import boto3

def check_ri_utilization():
    """RI 사용률 확인"""
    ce_client = boto3.client('ce')  # Cost Explorer
    
    response = ce_client.get_reservation_utilization(
        TimePeriod={
            'Start': '2025-06-01',
            'End': '2025-07-01'
        },
        GroupBy=[
            {
                'Type': 'DIMENSION',
                'Key': 'INSTANCE_TYPE'
            }
        ]
    )
    
    for group in response['UtilizationsByTime']:
        for item in group['Groups']:
            instance_type = item['Keys'][0]
            utilization = item['Attributes']['UtilizationPercentage']
            print(f"{instance_type}: {utilization}% 사용률")

2. CloudWatch 대시보드 설정

# CloudFormation 템플릿 예시
RIDashboard:
  Type: AWS::CloudWatch::Dashboard
  Properties:
    DashboardName: ReservedInstancesMonitoring
    DashboardBody: !Sub |
      {
        "widgets": [
          {
            "type": "metric",
            "properties": {
              "metrics": [
                ["AWS/Billing", "EstimatedCharges", "Currency", "USD"],
                [".", "ReservedInstanceUtilization", "InstanceType", "m5.large"]
              ],
              "period": 86400,
              "stat": "Average",
              "region": "us-east-1",
              "title": "RI 비용 및 사용률"
            }
          }
        ]
      }

⚠️ 주의사항 및 모범 사례

주의사항

❌ 피해야 할 실수들:

1. 과도한 RI 구매
   - 실제 사용량보다 많이 구매하면 손실
   - 워크로드 축소 시 불필요한 비용 발생

2. 잘못된 인스턴스 유형 선택
   - 표준 RI 구매 후 다른 유형 필요 시 손실
   - 신중한 워크로드 분석 필요

3. AZ별 분산 미고려
   - Multi-AZ 환경에서 특정 AZ 집중 구매 시 비효율
   - 리전별 RI 구매 권장

모범 사례

✅ 권장 전략:

1. 점진적 구매
   - 전체 워크로드의 50-70%만 RI로 시작
   - 안정적인 베이스라인 워크로드부터 적용

2. 혼합 전략 사용
   - 안정적 워크로드: 표준 RI
   - 변동 가능 워크로드: 전환형 RI
   - 버스트 워크로드: 온디맨드

3. 정기적 리뷰
   - 분기별 RI 사용률 검토
   - 워크로드 변화에 따른 RI 전략 조정

💡 실제 사례 연구

Case Study: 스타트업에서 엔터프라이즈로

회사: B2B SaaS 스타트업 → 중견기업 성장
기간: 3년간의 RI 전략 변화

Phase 1 (스타트업 초기):
- 워크로드: 불안정, 빠른 성장
- 전략: 온디맨드 + Spot 인스턴스 위주
- RI 비율: 0%

Phase 2 (성장기):
- 워크로드: 안정화 시작
- 전략: 베이스라인 워크로드 30% RI 도입
- RI 비율: 30% (전환형 RI 위주)
- 비용 절감: 월 $2,000 (20% 절약)

Phase 3 (안정기):
- 워크로드: 예측 가능한 성장 패턴
- 전략: 베이스라인 70% RI + 혼합 결제 옵션
- RI 비율: 70% (표준 RI 50% + 전환형 RI 20%)
- 비용 절감: 월 $8,000 (45% 절약)

🔮 미래 고려사항

1. 컨테이너와 서버리스 전환

기존: EC2 RI 중심
미래: ECS/EKS Fargate + Lambda 증가

대응 전략:
- Compute Savings Plans 고려
- 하이브리드 워크로드 대비
- 점진적 전환 계획 수립

2. AI/ML 워크로드 증가

특징:
- 불규칙한 GPU 사용 패턴
- 높은 컴퓨팅 요구사항
- 빠른 기술 변화

권장 전략:
- GPU 인스턴스는 온디맨드/스팟 위주
- CPU 기반 추론은 RI 고려
- Savings Plans로 유연성 확보

🎯 결론

예약 인스턴스는 AWS 비용 최적화의 핵심 도구입니다. 하지만 단순히 할인율만 보고 구매해서는 안 됩니다.

성공적인 RI 전략의 핵심:

  1. 철저한 워크로드 분석: 과거 사용 패턴과 미래 계획 검토
  2. 점진적 접근: 안정적인 워크로드부터 시작
  3. 지속적인 모니터링: 정기적인 사용률 검토 및 조정
  4. 유연한 전략: 표준/전환형 RI, Savings Plans 혼합 사용

경험상 베이스라인 워크로드의 60-80%를 RI로 커버하고, 나머지는 온디맨드나 스팟 인스턴스로 운영하는 것이 안정성과 비용 효율성의 최적 균형점입니다.

비용 절감뿐만 아니라 예측 가능한 IT 예산 수립에도 큰 도움이 되므로, 안정적인 AWS 워크로드를 운영하는 조직이라면 반드시 고려해야 할 전략입니다.

이 글을 공유해보세요!