SAP-C02에서 성능과 비용은 서로 반대 방향으로 당기는 힘처럼 보이지만, 실제 시험에서는 두 조건을 동시에 충족하는 솔루션을 찾는 능력을 검증합니다. "가장 비용 효율적으로 성능 목표를 달성하라"가 전형적인 문제 형식입니다. 이 포스트에서는 캐싱 계층, 목적별 데이터베이스 선택, 스토리지 최적화, 그리고 비용 절감 전략을 체계적으로 정리합니다.
캐싱 계층 — ElastiCache Redis vs Memcached
ElastiCache는 인메모리 캐싱으로 데이터베이스 부하를 줄이고 응답 시간을 마이크로초 단위로 단축합니다.
Redis와 Memcached의 선택 기준을 명확히 알아야 합니다.
| 항목 | Redis | Memcached | |------|-------|----------| | 데이터 구조 | String, Hash, List, Set, Sorted Set, Stream | String만 | | 복제 및 고가용성 | Multi-AZ 지원, 자동 페일오버 | 미지원 | | 지속성 | AOF/RDB 스냅샷 | 미지원 | | 분산 세션 저장소 | 적합 | 가능하나 기능 제한 | | 멀티스레딩 | 제한적 | 완전 멀티스레드 | | 지오스파셜 | 지원 | 미지원 |
고가용성, 지속성, 복잡한 데이터 구조가 필요하면 Redis를 선택합니다. 단순한 고성능 캐시이고 멀티스레딩이 중요하면 Memcached를 선택합니다.
DynamoDB DAX(DynamoDB Accelerator)는 DynamoDB와 완전 호환 API를 제공하는 인메모리 캐시입니다. 엔드포인트만 DAX로 변경하면 마이크로초 응답 시간을 달성할 수 있습니다. 핫 파티션(반복 읽기가 집중되는 파티션)이 있는 경우 DAX가 직접 해결책입니다.
MemoryDB for Redis는 Redis와 호환되지만 Multi-AZ 트랜잭션 로그로 데이터 내구성을 보장하는 서비스입니다. 기본 ElastiCache Redis보다 내구성이 강하며, Redis를 기본 데이터베이스로 사용하는 패턴에 적합합니다.
!ElastiCache Redis vs Memcached
CloudFront — Origin Shield, Lambda@Edge
CloudFront는 전 세계 450개 이상의 엣지 로케이션에서 콘텐츠를 캐싱하여 오리진 서버의 부하를 줄이고 사용자와 가장 가까운 엣지에서 응답합니다.
Origin Shield는 CloudFront 지역 엣지 캐시와 오리진 사이에 추가 캐싱 계층을 제공합니다. 오리진으로 향하는 요청 수를 최소화하여 오리진 부하와 데이터 전송 비용을 절감합니다. 글로벌 사용자가 있고 오리진 부하를 최소화해야 할 때 Origin Shield를 활성화합니다.
Lambda@Edge는 CloudFront 엣지에서 Lambda 함수를 실행합니다. 오리진으로 요청이 도달하기 전에 HTTP 헤더를 수정하거나 인증을 처리할 수 있습니다. 사용 사례로는 A/B 테스트, 동적 URL 리다이렉트, 요청 기반 인증이 있습니다.
CloudFront Signed URL과 Signed Cookies의 구분도 중요합니다. Signed URL은 파일 1개에 대한 일회성 접근 토큰입니다. Signed Cookies는 쿠키 하나로 경로 패턴 내 다수 파일을 동시에 제어합니다. 동영상 스트리밍처럼 여러 파일에 대한 접근을 제어할 때는 Signed Cookies를 선택합니다.
DynamoDB 성능 최적화
DynamoDB의 성능은 파티션 키 설계에 크게 의존합니다. 핫 파티션을 피하려면 높은 카디널리티(많은 고유값)를 가진 속성을 파티션 키로 선택하거나, 복합 파티션 키에 랜덤 접미사를 추가하는 방법을 사용합니다.
GSI(Global Secondary Index)는 다른 파티션 키와 정렬 키를 사용하는 인덱스로 생성 후에도 추가가 가능합니다. LSI(Local Secondary Index)는 동일 파티션 키에 다른 정렬 키를 사용하며 테이블 생성 시에만 추가할 수 있습니다.
DynamoDB TTL(Time to Live)은 아이템에 Unix 타임스탬프 속성을 추가하면 만료된 아이템을 자동으로 삭제합니다. 추가 비용이 없으며, 삭제는 만료 후 최대 48시간 이내에 완료됩니다. 세션 데이터나 임시 데이터 관리에 적합합니다.
DynamoDB Streams는 테이블 변경 이벤트를 실시간으로 캡처합니다. Kinesis Data Streams와 연동하면 대용량 실시간 이벤트 처리가 가능합니다. 이상 탐지, 복제, 캐시 무효화 트리거로 사용할 수 있습니다.
시계열 데이터처럼 오래된 데이터를 주기적으로 삭제해야 할 때는 테이블 로테이션 패턴을 사용합니다. 월별로 새 테이블을 생성하고 오래된 테이블을 DeleteTable로 통째 삭제하면 WCU 소모 없이 대량 데이터를 삭제할 수 있습니다. TTL은 삭제 지연이 최대 48시간이고 WCU를 소모하므로 대량 삭제에는 테이블 로테이션이 더 효율적입니다.
Aurora 성능 — Read Replica, Global DB, Serverless v2
Aurora는 3 AZ에 걸친 6방향 복제 스토리지 구조로 고가용성과 성능을 동시에 제공합니다.
Aurora Read Replica는 클러스터 볼륨을 공유하므로 복제 지연이 거의 없습니다. Reader Endpoint를 통해 모든 Read Replica에 로드 밸런싱되어 읽기 쿼리를 분산할 수 있습니다. Aurora Auto Scaling을 활성화하면 읽기 부하에 따라 Replica 수를 자동으로 조정합니다.
Aurora Global Database는 리전 간 복제 지연을 ~1초 미만(일반적으로 100ms)으로 유지합니다. DR 목적뿐 아니라 글로벌 읽기 성능 향상에도 활용됩니다. 보조 리전에 Reader Endpoint를 추가하면 해당 리전 사용자는 로컬에서 읽기 응답을 받습니다.
Aurora Serverless v2는 초 단위로 용량을 자동 조정합니다. ACU(Aurora Capacity Unit) 단위로 스케일 업/다운하며, 최소 용량에서 최대 용량까지 즉각 확장됩니다. 예측 불가능한 트래픽 패턴을 가진 애플리케이션에 이상적입니다.
EBS 스토리지 유형과 S3 성능
EBS gp3는 gp2의 후속 세대로 기본 3,000 IOPS를 제공하고 스토리지 용량과 독립적으로 IOPS를 설정할 수 있습니다. gp2는 스토리지 크기에 비례해서 IOPS가 늘어납니다. io2 Block Express는 최대 256,000 IOPS를 제공하는 최고 성능 스토리지로 데이터베이스 워크로드에 사용합니다.
S3 멀티파트 업로드는 대용량 파일을 여러 파트로 나눠 병렬 업로드합니다. 100MB 이상 파일에 권장되며 네트워크 오류 시 실패한 파트만 재전송하면 됩니다. S3 Transfer Acceleration은 CloudFront 엣지 로케이션을 경유해서 S3 업로드를 가속합니다. 원거리(해외에서 S3로 업로드)나 안정적으로 빠른 속도가 필요한 경우에 사용합니다.
HPC 워크로드에는 FSx for Lustre를 선택합니다. 수백 GB/s의 처리량과 수백만 IOPS를 제공하는 고성능 병렬 파일 시스템으로 POSIX 호환이므로 Linux 기반 HPC 워크로드를 수정 없이 실행할 수 있습니다.
비용 최적화 — Savings Plans, Spot, Right-sizing
| 옵션 | 할인율 | 약정 | 적합한 사용 사례 | |------|--------|------|----------------| | Compute Savings Plans | 최대 66% | 1년/3년 | EC2, Fargate, Lambda, 리전/패밀리 유연 | | EC2 Instance Savings Plans | 최대 72% | 1년/3년 | 특정 리전+패밀리 고정 | | Reserved Instance | 최대 72% | 1년/3년 | 안정적인 예측 가능한 워크로드 | | Spot Instance | 최대 90% | 없음 | 중단 허용 배치/스테이트리스 워크로드 |
Compute Savings Plans는 EC2, Fargate, Lambda에 모두 적용됩니다. 리전이나 인스턴스 패밀리를 변경해도 할인이 유지됩니다. Reserved Instance보다 유연하지만 할인율이 약간 낮습니다.
Spot Instance는 최대 90% 할인이지만 중단될 수 있습니다. SQS를 앞에 두고 Spot Fleet로 배치 작업을 처리하면 Spot 중단 시 작업이 SQS로 자동 복귀하여 손실 없이 재처리됩니다.
S3 스토리지 비용 최적화에서는 Lifecycle 정책과 S3 Intelligent-Tiering을 이해해야 합니다. S3 Intelligent-Tiering은 30일 미접근 객체를 자동으로 Infrequent Access 계층으로 이동합니다. 접근 패턴이 불규칙한 데이터에 적합합니다. Glacier Deep Archive는 가장 저렴한 스토리지 클래스로 검색 시간이 12~48시간이므로 장기 아카이브에 사용합니다.
S3 Standard-IA와 Glacier Instant Retrieval은 최소 보관 기간이 30일입니다. 30일 미만으로 저장하면 조기 삭제 요금이 부과됩니다. 시험에서 "30일 미만 데이터를 저렴하게 저장"하는 문제가 나오면 S3 Standard를 선택합니다.
시험 핵심 정리
"고가용성 + 복잡한 데이터 구조 캐시" -- ElastiCache Redis
"단순 고성능 캐시 + 멀티스레딩" -- ElastiCache Memcached
"DynamoDB 핫 파티션 읽기 성능 개선, 코드 변경 최소" -- DAX (엔드포인트만 교체)
"Redis 호환 + 데이터 내구성 보장" -- MemoryDB for Redis
"CloudFront 오리진 부하 최소화 추가 캐싱 계층" -- Origin Shield
"여러 파일 동시 접근 제어" -- CloudFront Signed Cookies
"DynamoDB 대량 만료 데이터 WCU 없이 삭제" -- 테이블 로테이션 (TTL보다 효율적)
"Aurora 읽기 자동 확장" -- Aurora Auto Scaling + Reader Endpoint
"예측 불가 트래픽, 초 단위 자동 확장" -- Aurora Serverless v2
"EC2/Fargate/Lambda 모두 커버, 리전 유연" -- Compute Savings Plans
"최대 90% 할인, 중단 허용 배치 작업" -- Spot Instance + SQS 조합
"접근 패턴 불규칙 데이터 자동 티어링" -- S3 Intelligent-Tiering
"최소 보관 기간 없는 S3 클래스" -- S3 Standard
"30일 미만 저장 시 조기 삭제 요금 발생" -- S3 Standard-IA, Glacier Instant Retrieval
"HPC 고성능 병렬 파일 시스템" -- FSx for Lustre