Memcached와 Redis는 둘 다 고성능 인메모리(In-memory) 키-값(Key-Value) 저장소로, 주로 데이터베이스 부하를 줄이고 애플리케이션 속도를 높이는 캐시(Cache) 용도로 사용된다는 공통점이 있습니다.
하지만 “단순함과 멀티스레드(Memcached)” 대 **“강력한 기능과 유연성(Redis)”**이라는 명확한 차이가 있습니다.
두 기술의 핵심적인 차이를 4가지 관점(데이터 구조, 아키텍처, 영속성, 확장성)에서 정리해 드립니다.
1. 한눈에 보는 비교 (Executive Summary)
| 특징 | Memcached | Redis |
|---|---|---|
| 주요 컨셉 | 고성능, 단순함, 멀티스레드 | 다양한 자료구조, 영속성, 기능 풍부 |
| 자료 구조 | String (단순 문자열/바이너리) | String, List, Set, Hash, Sorted Set, Geo 등 |
| 스레드 모델 | 멀티 스레드 (Multi-threaded) | 싱글 스레드 (Single-threaded) (I/O는 멀티 가능) |
| 데이터 영속성 | 지원 안 함 (재부팅 시 데이터 소멸) | 지원 (RDB, AOF) |
| 확장성(Clustering) | 클라이언트 측 분산 (Consistent Hashing) | 서버 측 분산 (Redis Cluster) |
| 복제(Replication) | 지원 안 함 | Master-Slave 복제 지원 |
| 주요 용도 | 단순 캐싱 (세션, HTML 조각) | 복잡한 캐싱, 리더보드, 대기열, 메시지 브로커 |
2. 상세 차이점 분석
① 데이터 구조 (Data Structures)
- Memcached: 오직 **문자열(String)**만 저장합니다. 리스트나 해시 같은 구조를 저장하려면 JSON 등으로 직렬화(Serialize)해서 문자열로 만든 뒤 저장해야 합니다. 데이터를 수정하려면 전체 데이터를 가져와서 수정한 뒤 다시 덮어써야 하는 단점이 있습니다.
- Redis: 다양한 자료구조를 지원합니다. 리스트(List)에 요소를 추가하거나, 해시(Hash)의 특정 필드만 수정하는 등 효율적인 데이터 조작이 가능합니다.
- 활용 예: ‘실시간 랭킹’ 구현 시 Redis의
Sorted Set을 쓰면 매우 쉽게 구현 가능합니다.
② 스레드 모델 (Architecture)
가장 큰 아키텍처 차이입니다.
- Memcached (멀티 스레드): 여러 개의 코어를 동시에 사용하여 트래픽을 처리합니다. 따라서 **Scale-up(서버 사양 높이기)**을 통해 처리량을 쉽게 늘릴 수 있습니다.
- Redis (싱글 스레드 기반): 실제 명령 처리는 하나의 스레드에서 순차적으로 실행됩니다. (이벤트 루프 방식).
- 주의점: Redis는 한 번에 하나의 명령만 처리하므로, 처리 시간이 긴 명령(예:
KEYS *, 전체 데이터 삭제 등)을 실행하면 그동안 다른 요청들이 대기해야 하는 Blocking 현상이 발생할 수 있습니다. (※ Redis 6.0부터 네트워크 I/O는 멀티 스레드로 처리가 가능해졌지만, 명령 실행은 여전히 싱글 스레드입니다.)
③ 영속성 (Persistence)
- Memcached: 메모리에만 데이터를 저장하므로 프로세스가 죽거나 서버가 재부팅되면 데이터가 모두 사라집니다. 캐시 용도로만 적합합니다.
- Redis: 데이터를 디스크에 저장하여 복구할 수 있는 옵션을 제공합니다.
- RDB: 특정 시점의 스냅샷 저장.
- AOF: 모든 쓰기 작업을 로그로 기록.
④ 확장성 (Scaling)
- Memcached: 서버끼리 서로 통신하지 않습니다. 데이터 분산은 **클라이언트(애플리케이션)**가 어떤 서버에 저장할지 결정합니다(Consistent Hashing). 클러스터 관리가 비교적 단순하지만, 서버 추가/제거 시 캐시 미스(Cache Miss) 관리가 필요합니다.
- Redis: Redis Cluster 기능을 통해 서버끼리 통신하며 데이터를 자동으로 분산(Sharding)하고, 장애 시 자동으로 복구(Failover)하는 기능을 자체적으로 지원합니다.
3. 어떤 것을 선택해야 할까요?
최근의 기술 트렌드는 Redis를 기본으로 선택하는 추세입니다. Redis가 Memcached의 기능을 거의 다 포함하면서도 더 많은 기능을 제공하기 때문입니다.
✅ Redis를 선택하세요
- 단순 문자열 외에 리스트, 셋, 정렬된 셋 등 복잡한 데이터 처리가 필요할 때.
- **데이터의 영속성(Persistence)**이 필요하거나, 중요 데이터의 백업이 필요할 때.
- 여러 대의 서버로 클러스터링 및 고가용성(HA) 구성이 필요할 때.
- Pub/Sub(메시지 큐), Geo(위치 정보) 등의 부가 기능이 필요할 때.
✅ Memcached를 선택하세요
- 데이터가 작고 정적이며(HTML 조각, 단순 세션 객체), 극도로 높은 트래픽이 발생하는 경우.
- 복잡한 기능 없이 가장 단순한 캐시 시스템이 필요할 때.
- 대용량의 멀티 코어 서버 하나에서 최대한의 스레드 성능을 뽑아내야 할 때 (Redis는 코어 1개만 주로 사용하므로, 멀티 코어 활용 면에서는 Memcached가 설정이 더 간단할 수 있습니다).