0Pricing
AWS Solutions Architect · 강의

Redis와 Memcached 비교: 적합한 엔진 선택

Redis(지속성, 복제, 정렬 집합, 게시/구독)와 Memcached(단순성, 다중 스레딩)를 비교하고 사용 사례 요구 사항에 따라 선택합니다.

Redis와 Memcached 비교: 적합한 엔진 선택은(는) CoddyKit의 무료 AWS Solutions Architect 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AWS Solutions Architect 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.

Amazon ElastiCache란 무엇인가요?

Amazon ElastiCache는 클라우드에서 널리 사용되는 오픈 소스 인메모리 데이터 저장소를 쉽게 배포하고 관리하며 확장할 수 있도록 해 주는 완전 관리형 인메모리 캐싱 서비스입니다. Redis와 Memcached라는 두 가지 Engine을 지원합니다. ElastiCache는 데이터베이스가 아닌 메모리에서 자주 요청되는 데이터를 제공하므로 데이터베이스 부하를 몇 자릿수 규모로 줄이고 응답 지연 시간을 밀리초에서 마이크로초로 단축할 수 있습니다. Redis와 Memcached 중 무엇을 선택할지는 SAA-C03 시험에서 자주 출제되는 문제입니다.

Memcached: 단순함에 집중

Memcached는 단순성과 수평 확장성에 초점을 맞춘 분산형 인메모리 키-값 저장소입니다. 주요 특징은 다음과 같습니다. 다중 스레드(단일 노드의 모든 CPU 코어 사용 가능), 단순한 키-값 저장(문자열만 지원하며 복잡한 데이터 구조는 지원하지 않음), 영속성 없음(노드가 재시작되면 데이터 손실), 복제 없음(대기 노드나 복제본 없음), 그리고 클라이언트 측 일관성 해싱을 통한 수평 샤딩입니다. 영속성, 복잡한 데이터 형식 또는 고가용성이 필요하지 않고 단순한 대규모 캐시가 필요하다면 Memcached가 적합합니다.

# Create a Memcached cluster with 3 nodes
aws elasticache create-cache-cluster \
  --cache-cluster-id my-memcached \
  --engine memcached \
  --cache-node-type cache.r7g.large \
  --num-cache-nodes 3 \
  --cache-subnet-group-name my-subnet-group

# Memcached auto-discovers nodes via the config endpoint
# Application connects to: my-memcached.cfg.use1.cache.amazonaws.com:11211

Redis: 다양한 기능을 갖춘 인메모리 저장소

Redis(Remote Dictionary Server)는 인스턴스별로 단일 스레드로 실행되는, 다양한 기능을 갖춘 인메모리 데이터 구조 저장소입니다. 문자열, 해시, 목록, 집합, 정렬된 집합, 비트맵, HyperLogLogs, 스트림, 지리 공간 인덱스를 지원합니다. Memcached에 비해 다음과 같은 장점이 있습니다. 선택적 영속성(AOF 및 RDB 스냅샷), 복제(읽기 복제본 및 자동 장애 조치), 게시/구독 메시징, Lua 스크립팅, 트랜잭션(MULTI/EXEC), 그리고 수평 샤딩을 위한 클러스터 모드입니다. 대부분의 실제 캐싱 시나리오에는 Redis가 적합합니다.

# Redis data structure examples

# String
# SET user:1:name 'Alice'
# GET user:1:name

# Hash (object-like)
# HSET product:42 name 'Widget' price '9.99' stock '100'
# HGETALL product:42

# Sorted set (leaderboard)
# ZADD leaderboard 9500 'alice' 8700 'bob' 9100 'carol'
# ZREVRANGE leaderboard 0 2 WITHSCORES

# Pub/Sub
# PUBLISH notifications 'order_shipped:12345'
# SUBSCRIBE notifications

Redis 영속성: AOF와 RDB

Redis는 두 가지 영속성 메커니즘을 지원합니다. RDB (Redis Database)는 구성 가능한 간격으로 디스크에 저장하는 주기적인 특정 시점 스냅샷입니다(재시작은 빠르지만 스냅샷 사이의 데이터가 손실될 수 있음). AOF (Append-Only File)는 모든 쓰기 작업을 기록하며, 재시작할 때 Redis가 로그를 재생하여 상태를 복원합니다(내구성을 얻는 대신 파일 크기가 커지고 재시작이 느려짐). ElastiCache에서는 AOF를 Enable하여 노드 재시작 후에도 데이터를 유지할 수 있습니다. 이는 ElastiCache를 단순한 캐시가 아니라 기본 데이터 저장소로 사용할 때(예: 세션 데이터)에 특히 중요합니다.

# Create an ElastiCache Redis cluster with AOF enabled
aws elasticache create-replication-group \
  --replication-group-id my-redis \
  --replication-group-description 'Redis with persistence' \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --num-cache-clusters 2 \
  --cache-parameter-group-name default.redis7 \
  --snapshot-retention-limit 5

# Note: Enable AOF via parameter group: appendonly=yes

Redis 복제 및 자동 장애 조치

Redis는 모든 쓰기를 처리하는 하나의 기본 노드와 읽기를 처리하는 최대 5개의 읽기 복제본으로 구성된 복제 그룹을 지원합니다. Multi-AZ 및 자동 장애 조치를 Enable하면 기본 노드에 장애가 발생했을 때 ElastiCache가 읽기 복제본을 자동으로 기본 노드로 승격합니다. 일반적으로 장애 조치는 60초 이내에 완료됩니다. 이를 통해 Redis 기반 애플리케이션은 Memcached로는 구현할 수 없는 높은 가용성을 확보할 수 있습니다(Memcached에는 복제 기능이 없음). HA 캐싱이 필요한 Production 애플리케이션에는 항상 자동 장애 조치를 사용하는 Redis를 사용하세요.

# Create a Redis replication group with Multi-AZ failover
aws elasticache create-replication-group \
  --replication-group-id prod-redis \
  --description 'Production Redis with HA' \
  --cache-node-type cache.r7g.xlarge \
  --engine redis \
  --multi-az-enabled \
  --automatic-failover-enabled \
  --num-cache-clusters 3 \
  --cache-subnet-group-name multi-az-subnet-group

# 1 primary + 2 replicas across 3 AZs

Leaderboard를 위한 Redis Sorted Sets

Sorted sets는 Redis에서 가장 강력한 데이터 구조 중 하나입니다. 각 멤버에는 부동 소수점 점수가 연결되어 있으며, 멤버는 항상 정렬된 순서로 유지됩니다. 따라서 Sorted sets는 Leaderboard(점수순 순위 지정), 우선순위 큐(우선순위가 가장 높은 작업부터 처리), 요청률 제한(타임스탬프를 점수로 사용하는 슬라이딩 윈도우)에 적합합니다. ZADD, ZRANGE, ZREVRANGE, ZRANK, ZRANGEBYSCORE 연산은 모두 O(log n)으로, 수백만 개의 항목에서도 매우 효율적입니다.

# Leaderboard operations using Redis sorted sets

# Add/update scores
# ZADD game:leaderboard 10500 'player:alice'
# ZADD game:leaderboard 9800  'player:bob'
# ZADD game:leaderboard 11200 'player:carol'

# Get top 3 players (highest scores first)
# ZREVRANGE game:leaderboard 0 2 WITHSCORES
# Result: carol 11200, alice 10500, bob 9800

# Get a player's rank (0-indexed)
# ZREVRANK game:leaderboard 'player:alice'
# Result: 1 (second place)

메시징을 위한 Redis Pub/Sub

Redis Pub/Sub를 사용하면 Publisher가 누가 구독 중인지 알지 못해도 채널에 메시지를 브로드캐스트할 수 있습니다. Subscriber는 자신이 구독한 채널에 게시된 모든 메시지를 실시간으로 수신합니다. Pub/Sub 메시지는 영속적으로 저장되지 않습니다. Subscriber가 오프라인이면 메시지를 놓칩니다. 보장된 전달을 지원하는 영속적 메시징이 필요하다면 Redis Streams(Redis 5에 추가된 더욱 강력한 데이터 구조) 또는 SQS나 SNS와 같은 전용 메시징 서비스를 사용하세요. SAA-C03 시험에서는 Redis Pub/Sub가 서비스 간 가벼운 실시간 알림을 위한 선택지로 제시됩니다.

# Publisher side (broadcasts to 'notifications' channel)
# PUBLISH notifications '{"type":"order_shipped","orderId":"12345"}'

# Subscriber side (listens for messages)
# SUBSCRIBE notifications

# Pattern subscribe (wildcard channel matching)
# PSUBSCRIBE order:*
# Receives messages from: order:created, order:shipped, order:delivered

# Note: Unlike SQS, pub/sub is fire-and-forget — no acknowledgement

Memcached와 Redis: 선택 표

SAA-C03 시험에서 선택할 때는 다음 기준을 사용하세요. 다음이 필요하면 Memcached를 선택합니다. HA 요구 사항이 없는 단순한 캐시, 다중 스레드 성능, 노드를 추가하는 방식의 수평 확장(순수 캐시). 다음이 필요하면 Redis를 선택합니다. 영속성(세션 저장소), 복제 및 장애 조치(HA), 복잡한 데이터 형식(Leaderboard를 위한 Sorted sets, 집합, 목록), Pub/Sub, Lua 트랜잭션, 멀티 샤드 수평 확장을 위한 Cluster Mode. 시험 문제에 단순한 키-값 캐싱을 넘어서는 기능이 하나라도 언급되면 거의 항상 정답은 Redis입니다.

캐시 노드 유형 및 제품군

ElastiCache는 여러 노드 유형 제품군을 제공합니다. r7g(Graviton 3, 메모리 최적화 — 가격 대비 성능이 가장 우수하며 대부분의 캐싱에 권장), m7g(컴퓨팅과 메모리의 균형), t4g(버스터블 방식으로 개발/테스트에 적합한 저비용)입니다. 노드 크기는 cache.t4g.micro(500 MB)부터 cache.r7g.16xlarge(425 GB)까지 다양합니다. Production에서는 데이터 세트를 메모리에 유지하면서 20~25%의 여유 공간을 확보할 수 있는 노드 크기를 선택하세요. 메모리가 부족해지면 Memcached에서는 제거가 발생하고 Redis에서는 OOM 오류가 발생합니다.

# Get available cache node types
aws elasticache describe-cache-engine-versions \
  --engine redis \
  --query 'CacheEngineVersions[?contains(EngineVersion, '7')].{Engine:Engine,Version:EngineVersion}'

# Check memory and vCPU for a node type
aws elasticache describe-cache-engine-versions \
  --cache-parameter-group-family redis7

# Monitor evictions to detect memory pressure
# CloudWatch: Evictions metric > 0 means cache is full

ElastiCache 보안

ElastiCache는 액세스를 제어하는 보안 그룹과 함께 VPC 내부에 배포되며, 기본적으로 퍼블릭 인터넷에 액세스할 수 없습니다. Redis에서는 AUTH 토큰(클라이언트가 제공해야 하는 비밀번호)과 연결을 위한 전송 중 암호화(TLS)를 Enable하고, KMS를 사용한 저장 중 암호화도 Enable하세요. Memcached에서는 전송 중 TLS만 사용할 수 있으며 저장 중 암호화나 AUTH는 지원되지 않습니다. 암호화되지 않은 Redis를 암호화된 Redis로 마이그레이션할 때는 기존 환경에서 바로 마이그레이션할 수 없습니다. 새 암호화 클러스터를 생성한 후 데이터를 준비해야 합니다.

# Create a Redis cluster with TLS and AUTH token
aws elasticache create-replication-group \
  --replication-group-id secure-redis \
  --description 'Encrypted Redis' \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --transit-encryption-enabled \
  --at-rest-encryption-enabled \
  --auth-token 'MySecretPassword123!'

# Store the AUTH token in Secrets Manager, not in your app code

제거 정책

Redis 또는 Memcached 캐시가 가득 차면 제거 정책에 따라 공간을 확보하기 위해 제거할 키가 결정됩니다. 일반적인 Redis 제거 정책은 다음과 같습니다. noeviction(OOM 오류 반환 — 캐시가 기본 저장소일 때 적합), allkeys-lru(모든 키 중 가장 오랫동안 사용되지 않은 키 제거 — 일반적인 캐시에 적합), volatile-lru(TTL이 설정된 키 중 LRU 적용 — 만료되지 않는 키 보존), allkeys-random(무작위 제거), allkeys-lfu(가장 적게 사용된 키 제거). 일반적인 캐싱 사용 사례에는 allkeys-lru 또는 allkeys-lfu를 권장합니다.

# Set eviction policy via parameter group
aws elasticache create-cache-parameter-group \
  --cache-parameter-group-name redis7-lru \
  --cache-parameter-group-family redis7 \
  --description 'LRU eviction policy'

aws elasticache modify-cache-parameter-group \
  --cache-parameter-group-name redis7-lru \
  --parameter-name-values ParameterName=maxmemory-policy,ParameterValue=allkeys-lru

# Apply the parameter group to your cluster:
aws elasticache modify-replication-group \
  --replication-group-id prod-redis \
  --cache-parameter-group-name redis7-lru

빠른 확인

이 단원에서 배운 AWS Solutions Architect (SAA-C03) 개념을 제대로 이해했는지 확인해 보세요.

단원 요약

이 단원에서는 다음을 배웠습니다. Memcached는 단순하고 다중 스레드를 지원하며 HA가 없습니다 — 단순한 캐시를 순수하게 수평 확장하는 데 적합합니다. Redis는 복잡한 데이터 구조, 영속성, Pub/Sub 및 Multi-AZ 장애 조치를 지원합니다 — 대부분의 Production 캐싱 시나리오에 적합합니다. 또한 Sorted sets 덕분에 Redis는 Leaderboard와 우선순위 큐에 자연스러운 선택입니다. 다음으로 수평 샤딩을 위한 Redis Replication Groups와 Cluster Mode를 살펴보겠습니다.

자주 묻는 질문

“Redis와 Memcached 비교: 적합한 엔진 선택” 강의는 무료인가요?

네 — “Redis와 Memcached 비교: 적합한 엔진 선택” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AWS Solutions Architect 강의 전체를 잠금 해제할 수 있습니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.

“Redis와 Memcached 비교: 적합한 엔진 선택”에서 뭘 배우나요?

Redis(지속성, 복제, 정렬 집합, 게시/구독)와 Memcached(단순성, 다중 스레딩)를 비교하고 사용 사례 요구 사항에 따라 선택합니다. 브라우저에서 직접 실행하는 실습 코드로 AWS Solutions Architect을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AWS Solutions Architect을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AWS Solutions Architect은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“Redis와 Memcached 비교: 적합한 엔진 선택” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AWS Solutions Architect 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AWS Solutions Architect 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Redis와 Memcached 비교: 적합한 엔진 선택
  2. ElastiCache Redis 복제 그룹 및 클러스터 모드
  3. 캐싱 전략: 지연 로딩 및 쓰기 관통
  4. 세션 스토리지 및 순위표 패턴
← AWS Solutions Architect(으)로 돌아가기