Ⅰ. Valkey 란?
Valkey(밸키)는 2024년 3월 28일 Linux Foundation 산하에서 출범한 Redis 7.2.4 기반의 BSD 3-Clause 오픈소스 인메모리 데이터스토어입니다. Redis Inc. 가 2024년 3월 20일 자사 코드 라이선스를 BSD 에서 SSPL/RSALv2(Source-Available) 로 일방적으로 전환하자, Redis 의 핵심 메인테이너 Madelyn Olson(5년차 코어 기여자) 과 AWS · Google Cloud · Oracle · Ericsson · Snap Inc. 가 단 8일 만에 포크(Fork) 를 결성해 만들어낸, "진정한 오픈소스 Redis 후계자" 입니다. 단순한 분기에 그치지 않고 2024년 9월 Valkey 8.0 GA 에서 비동기 I/O 멀티스레딩 · 메모리 사용량 20% 절감 · RDMA(베타) · 향상된 클러스터 슬롯 마이그레이션을 도입했고, 2025년 9월 Valkey 8.1 에서는 Bloom Filter · JSON · Vector Search 모듈을 코어에 내장하면서 "단순 캐시" 를 넘어 "AI · 벡터 · 이벤트 스트리밍 통합 데이터 플랫폼" 으로 진화했습니다. 2026년 4월 현재 v9.0 마일스톤이 진행 중이며, AWS ElastiCache for Valkey · Google Memorystore for Valkey · Oracle OCI Cache · Heroku · DigitalOcean Managed Valkey 등 주요 클라우드의 정식 기본 엔진으로 채택되었고, 카카오 · 네이버 · 라인 · 우아한형제들 · 토스 · 야놀자 · 컬리 · SK텔레콤 등 국내 주요 기업의 캐시 · 세션 · 큐 · 리더보드 · 실시간 분석 인프라가 빠르게 Valkey 로 이전되고 있습니다.
■ Valkey vs 주요 인메모리 데이터스토어 비교
| 비교 항목 | Valkey 8.x | Redis 7.4(SSPL) | DragonflyDB | KeyDB |
| 라이선스 | BSD 3-Clause(완전 OSS) | SSPL / RSALv2 | BSL 1.1 | BSD 3-Clause |
| 거버넌스 | Linux Foundation(중립) | Redis Inc. 단독 | DragonflyDB Inc. | Snap Inc. 후원 종료 |
| 스레딩 모델 | 단일 + 비동기 I/O 멀티 | 단일 + I/O 스레드 | 완전 멀티스레드(Shared-Nothing) | 멀티스레드 액티브-액티브 |
| RESP 호환 | RESP2 · RESP3 100% | RESP2 · RESP3 | RESP2 · RESP3 | RESP2 · RESP3 |
| 클러스터 | 16384 슬롯 + 다중 슬롯 마이그레이션 | 16384 슬롯 | 독자 샤딩(Pull) | 액티브-액티브 복제 |
| 모듈 / 확장 | Bloom · JSON · Vector 코어 내장 | Stack 별도 라이선스 | 일부 호환 | 거의 없음 |
| 벡터 검색 | VSIM · VEMB(8.1 +) | RediSearch(상용) | 제한적 | 미지원 |
| 매니지드 서비스 | AWS · GCP · Oracle · DO | Redis Cloud · Azure | Dragonfly Cloud | 없음(EOL 위험) |
| 대표 사용처 | AWS, Google, 카카오, 라인 | X(트위터), Stack Overflow | 일부 스타트업 | 일부 미디어 기업 |
Ⅱ. Valkey 주요 특징
ⅰ. 100% 오픈소스 BSD 3-Clause
: SSPL · BSL · 듀얼 라이선스 같은 상업 사용 제한이 전혀 없는 BSD 3-Clause 로 영구 보장되어, 클라우드 사업자 · SaaS 제공사 · 기업 내부 임베딩까지 라이선스 비용 · 법무 검토 부담 없이 자유롭게 활용할 수 있습니다.
ⅱ. Redis 100% 와이어 호환
: RESP2 · RESP3 프로토콜과 명령어 셋(GET/SET/INCR/HSET/ZADD/XADD …) 이 완전히 동일해, redis-cli · Lettuce · Jedis · ioredis · go-redis · redis-py 등 기존 클라이언트를 한 줄도 고치지 않고 즉시 연결할 수 있습니다.
ⅲ. 비동기 I/O 멀티스레딩(8.0+)
: 명령 처리 자체는 결정성 보장을 위해 단일 스레드를 유지하되, 네트워크 읽기/쓰기 · 응답 인코딩을 비동기 I/O 스레드로 분리해 단일 노드에서 200% 이상의 처리량 향상을 달성합니다.
ⅳ. 메모리 효율 20% 개선
: 키 임베딩(Embedded Key) 최적화로 작은 키-값 데이터의 오버헤드를 줄이고, listpack · ziplist 인코딩을 정교화해 동일 데이터셋에서 RAM 사용량을 평균 20% 절감해 인프라 비용을 직접적으로 낮춥니다.
ⅴ. 다중 슬롯 동시 마이그레이션
: 기존 Redis Cluster 가 한 번에 한 슬롯씩 옮기던 한계를 깨고, 8.1+ 부터 여러 슬롯을 병렬 이전(CLUSTER SLOTS-MIGRATE) 해 리샤딩 시간이 5~10배 단축됩니다.
ⅵ. 코어 내장 벡터 · JSON · Bloom
: 8.1 부터 RedisJSON · RedisBloom · 벡터 검색(VSIM/VEMB) 이 코어로 합류해, 별도 모듈 라이선스 없이 RAG · 추천 · 중복 검출 · 부정거래 탐지 워크로드를 하나의 데이터스토어에서 처리합니다.
ⅶ. RDMA · TLS 1.3 · IPv6
: 8.0 의 RDMA(Beta) 트랜스포트로 InfiniBand · RoCE 환경에서 대역폭 800% 향상 사례가 보고되며, TLS 1.3 · IPv6 · IPv4/6 듀얼 스택을 코어 차원에서 지원해 차세대 네트워크에 대비합니다.
ⅷ. 풍부한 자료구조
: String · Hash · List · Set · Sorted Set · Stream · HyperLogLog · Bitmap · Geo · Bitfield · Bloom · JSON · Vector 까지 13종의 1차 자료구조를 단일 프로토콜로 다뤄, 별도 시스템 없이 캐시 · 큐 · 시계열 · 검색 워크로드를 통합합니다.
ⅸ. 다양한 영속성(Persistence) 모드
: 메모리 외에도 RDB(스냅샷) · AOF(쓰기 로그) · 혼합(RDB+AOF Rewrite) · No-Persistence 모드를 선택할 수 있어, 캐시(휘발성) ~ Source-of-Truth(영속성) 까지 워크로드별 최적화가 가능합니다.
ⅹ. 중립 거버넌스(Linux Foundation)
: 단일 회사가 아닌 Linux Foundation 산하 TOC(Technical Oversight Committee) 가 의사결정을 주도하고, AWS · Google · Oracle · Ericsson · Snap 등이 공동 후원해 한 회사의 라이선스 정책 변경에 다시는 휘둘리지 않는 구조를 갖추고 있습니다.
Ⅲ. Valkey 동작 방식
Valkey 는 단일 valkey-server 프로세스 안에서 "Networking Layer → I/O Threading Layer → Single-Threaded Command Processor → Data Structure Layer → Persistence(RDB · AOF) Layer → Replication / Cluster Layer" 6계층 구조가 협력하며 동작합니다. 클라이언트가 RESP 명령을 보내면, 다음 9단계가 자동으로 흐릅니다.
ⅰ. 연결 수락(Accept) : OS 의 epoll/kqueue 가 새 TCP/TLS/Unix 소켓을 감지하고, Acceptor 가 클라이언트 컨텍스트(client struct) 를 생성합니다.
ⅱ. 비동기 읽기(Async Read) : I/O 스레드 풀이 RESP 바이트 스트림을 비동기로 읽고 디코딩해, 메인 스레드가 받을 수 있는 명령 큐(Pending Commands) 에 적재합니다.
ⅲ. 명령 라우팅(Routing) : 메인 스레드는 키의 CRC16(key) % 16384 해시 슬롯을 계산해, 해당 슬롯이 자기 노드에 속하면 직접 처리하고 아니면 MOVED/ASK 응답으로 클러스터 리다이렉트를 안내합니다.
ⅳ. 자료구조 처리 : 단일 스레드가 String · Hash · ZSet · Stream 등에 대한 명령을 결정성 있게 실행하며, 메모리 내 자료구조(dict · skiplist · listpack · quicklist) 를 직접 변경합니다.
ⅴ. 영속성 기록 : appendonly 모드일 경우 명령이 AOF 버퍼에 기록되고, fsync 정책(always/everysec/no) 에 따라 디스크에 동기화됩니다.
ⅵ. 복제(Replication) : 변경된 명령은 복제 백로그(Repl Backlog) 에 쌓여 마스터 → 레플리카로 비동기 PSYNC2 스트림으로 전파됩니다.
ⅶ. 비동기 응답(Async Reply) : 결과 객체는 다시 I/O 스레드 풀로 넘어가 RESP 인코딩 및 소켓 쓰기가 병렬로 수행됩니다.
ⅷ. 만료 / Eviction : 백그라운드 cron 잡이 expire 사전을 샘플링해 만료 키를 삭제하고, maxmemory 도달 시 LRU/LFU/TTL 정책에 따라 키를 축출합니다.
ⅸ. 클러스터 가십(Gossip) : 노드들은 100ms 마다 PING/PONG 메시지로 토폴로지 · 슬롯 소유권 · 장애 정보를 가십 프로토콜로 동기화하고, 마스터 장애 시 레플리카가 자동 승격됩니다.
| 단계 | 처리 주체 | 핵심 동작 / 산출물 |
| 연결 수락 | Acceptor / epoll | client struct 생성, TLS 핸드셰이크 |
| 비동기 읽기 | I/O Thread Pool | RESP 디코딩, Pending Command 큐 적재 |
| 명령 라우팅 | Main Thread / Cluster | CRC16 슬롯 계산, MOVED/ASK 응답 |
| 자료구조 처리 | Single-Thread Processor | dict · skiplist · listpack 변경 |
| 영속성 기록 | AOF Writer / RDB BGSAVE | AOF 버퍼 · fsync, 자식 프로세스 스냅샷 |
| 복제 전파 | Replication Backlog | PSYNC2 비동기 스트림 |
| 비동기 응답 | I/O Thread Pool | RESP 인코딩, 소켓 쓰기 병렬화 |
| 만료 / Eviction | serverCron / Evictor | 샘플링 만료, LRU/LFU 축출 |
| 클러스터 가십 | Cluster Bus | PING/PONG, 슬롯 소유권 동기화 |
Ⅳ. Valkey 구성 및 흐름도
Valkey 의 실제 운영 토폴로지는 "Application → Connection Pool → Valkey Sentinel/Cluster → Primary(Master) → Replica → Persistence(RDB/AOF) → Backup Storage(S3/MinIO)" 의 7개 계층으로 구성됩니다. 단일 노드부터 멀티 리전 클러스터까지 동일한 RESP 프로토콜로 일관되게 확장됩니다.
ⅰ. 클라이언트 계층 : 애플리케이션은 Lettuce · Jedis · ioredis · go-redis · redis-py 등 RESP 클라이언트를 사용해 커넥션 풀을 통해 Valkey 에 접속합니다.
ⅱ. 디스커버리 계층 : Sentinel(센티넬) 또는 Cluster Bus 가 마스터 위치 · 슬롯 소유권을 클라이언트에 알려, 페일오버 시 자동 재연결을 가능케 합니다.
ⅲ. 프록시 / LB(선택) : Envoy · HAProxy · AWS NLB · Twemproxy 가 앞단에서 TLS 종료 · 부하 분산 · 명령 라우팅을 담당할 수 있습니다.
ⅳ. Primary 노드 : 쓰기/읽기를 처리하는 마스터 노드로, 단일 스레드 명령 처리기 + I/O 스레드 풀 구조를 갖습니다.
ⅴ. Replica 노드 : 마스터의 복제본으로 PSYNC2 비동기 스트림을 받아, READONLY 명령으로 읽기 트래픽을 흡수합니다.
ⅵ. 영속성 계층 : RDB 스냅샷(BGSAVE) · AOF 쓰기 로그를 디스크에 기록하고, 백그라운드 자식 프로세스가 RDB Rewrite · AOF Rewrite 를 수행해 파일 크기를 압축합니다.
ⅶ. 백업 / DR : RDB · AOF 파일을 S3 · MinIO · GCS 로 정기 업로드해 시점 복구 · 다른 리전으로의 복원에 활용합니다.
ⅷ. 모니터링 : valkey-exporter + Prometheus + Grafana, 그리고 INFO · LATENCY DOCTOR · SLOWLOG 명령으로 메모리 · QPS · 슬로우 쿼리 · 키스페이스 통계를 수집합니다.
ⅸ. 보안 계층 : TLS 1.3 · ACL(사용자/명령어 권한) · IP Allowlist · 클라이언트 인증서를 통해 제로 트러스트 캐시 인프라를 구성합니다.
| 구성 요소 | 역할 | 특징 / 비고 |
| Client SDK | RESP 명령 송수신 | Lettuce/Jedis/ioredis/redis-py/go-redis 그대로 사용 |
| Sentinel | HA 모니터링 / 페일오버 | 다수결 기반 마스터 자동 승격 |
| Cluster Bus | 슬롯 분배 / 가십 통신 | 16384 슬롯 · TCP 16379 포트 |
| Primary(Master) | 쓰기/읽기 처리 | 단일 스레드 + I/O 멀티스레드 |
| Replica(Slave) | 읽기 분산 / DR | PSYNC2 비동기 복제, READONLY |
| RDB 파일 | 주기적 메모리 스냅샷 | fork() COW · 빠른 풀 백업 |
| AOF 파일 | 쓰기 명령 로그 | fsync 정책에 따른 내구성 조정 |
| Backup Store | S3/MinIO 장기 보관 | PITR · 다른 리전 복원 |
| Exporter / Grafana | 메트릭 수집·시각화 | QPS/Hit ratio/Memory/Latency |
Ⅴ. Valkey 설치 방법
Valkey 는 단일 실행 파일(valkey-server) 로 동작하기 때문에 패키지 매니저 · 컨테이너 · Helm · 매니지드 서비스 등 다양한 경로로 5분 이내 설치할 수 있습니다. 운영 등급에서는 컨테이너 + Sentinel/Cluster 또는 매니지드 서비스를 권장합니다.
ⅰ. Linux 패키지 설치(Ubuntu 24.04 / RHEL 9)
## Ubuntu 24.04 / Debian 12
sudo apt-get update
sudo apt-get install -y valkey-server valkey-tools
sudo systemctl enable --now valkey-server
valkey-cli ping # → PONG
## RHEL 9 / Rocky 9 (EPEL)
sudo dnf install -y epel-release
sudo dnf install -y valkey valkey-cli
sudo systemctl enable --now valkey
ⅱ. 소스 빌드(공식 권장 — 최신 버전)
git clone -b 8.1 https://github.com/valkey-io/valkey.git
cd valkey
make BUILD_TLS=yes BUILD_WITH_RDMA=yes -j$(nproc)
sudo make install PREFIX=/opt/valkey
/opt/valkey/bin/valkey-server --version
ⅲ. Docker / Podman
docker run -d --name valkey \
-p 6379:6379 \
-v $PWD/data:/data \
valkey/valkey:8.1 \
valkey-server --appendonly yes --maxmemory 2gb --maxmemory-policy allkeys-lru
ⅳ. Kubernetes (Helm)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install vk bitnami/valkey \
--set architecture=replication \
--set replica.replicaCount=2 \
--set sentinel.enabled=true \
--set tls.enabled=true
ⅴ. 매니지드 서비스
## AWS ElastiCache for Valkey
aws elasticache create-replication-group \
--replication-group-id prod-vk \
--engine valkey --engine-version 8.1 \
--num-node-groups 3 --replicas-per-node-group 1 \
--cache-node-type cache.r7g.large
## GCP Memorystore for Valkey
gcloud memorystore instances create vk-prod \
--location=asia-northeast3 \
--shard-count=3 --replica-count=1 \
--node-type=highmem-medium
## Oracle OCI Cache(Valkey)
oci cache cluster create --cluster-mode SHARDED \
--node-count 3 --node-memory-in-gbs 16 \
--software-version VALKEY_8_1
Ⅵ. Valkey 사용 방법
Valkey 는 RESP 호환 클라이언트 한 줄이면 즉시 사용할 수 있고, 워크로드에 따라 캐시 · 세션 · 리더보드 · 큐 · Pub/Sub · 스트리밍 · 벡터 검색까지 단일 엔드포인트로 처리할 수 있습니다.
ⅰ. Python(redis-py) 캐시 패턴
import redis, json
r = redis.Redis(host="vk.prod", port=6379, ssl=True, decode_responses=True)
def get_user(uid: int) -> dict:
key = f"user:{uid}"
cached = r.get(key)
if cached:
return json.loads(cached)
user = db.fetch_user(uid) # DB 조회
r.set(key, json.dumps(user), ex=300) # TTL 5분
return user
ⅱ. Java(Lettuce) 분산 락(SETNX)
StatefulRedisConnection<String,String> conn = ...;
String token = UUID.randomUUID().toString();
String ok = conn.sync().set("lock:order:" + id, token,
SetArgs.Builder.nx().ex(10));
if ("OK".equals(ok)) {
try { processOrder(id); }
finally {
// Lua 스크립트로 안전 해제
conn.sync().eval(
"if redis.call('get', KEYS[1]) == ARGV[1] " +
"then return redis.call('del', KEYS[1]) else return 0 end",
ScriptOutputType.INTEGER,
new String[]{"lock:order:" + id}, token);
}
}
ⅲ. Node.js(ioredis) 리더보드(ZSET)
const Redis = require("ioredis");
const r = new Redis.Cluster([{ host: "vk-1", port: 6379 }]);
await r.zadd("game:rank", 1500, "user:1024");
await r.zincrby("game:rank", 50, "user:1024");
const top10 = await r.zrevrange("game:rank", 0, 9, "WITHSCORES");
ⅳ. Go(go-redis) Streams 큐
rdb := redis.NewClient(&redis.Options{Addr: "vk:6379"})
// Producer
rdb.XAdd(ctx, &redis.XAddArgs{
Stream: "events",
Values: map[string]interface{}{"type": "order", "id": 42},
})
// Consumer Group
rdb.XGroupCreateMkStream(ctx, "events", "wkr", "$")
msgs, _ := rdb.XReadGroup(ctx, &redis.XReadGroupArgs{
Group: "wkr", Consumer: "c1",
Streams: []string{"events", ">"},
Block: 5 * time.Second,
}).Result()
ⅴ. 운영 시 고려사항
| 고려 항목 | 권장 설정 / 패턴 | 이유 / 효과 |
| 최대 메모리 | maxmemory = 인스턴스의 75% | OOM · COW fork 메모리 폭증 방지 |
| 축출 정책 | allkeys-lru 또는 allkeys-lfu | 핫 데이터 유지, 콜드 데이터 우선 제거 |
| 영속성 | AOF everysec + RDB 6h 스냅샷 | 1초 손실 허용, 빠른 풀 복구 가능 |
| I/O 스레드 | io-threads = 4~8(코어의 절반) | 처리량 2~3배, 컨텍스트 스위치 비용 균형 |
| 커넥션 풀 | 앱당 50~200, idle timeout 300s | 핸드셰이크 비용 ↓, 누수 방지 |
| 슬로우 로그 | slowlog-log-slower-than 10000us | 10ms 이상 명령 추적 |
| 키 네임스페이스 | service:entity:id 형식 강제 | 충돌 방지 · 모니터링 그루핑 |
| TLS / ACL | TLS 1.3 + 사용자별 ACL + 명령어 화이트리스트 | 제로 트러스트, FLUSHALL · CONFIG 차단 |
| 백업 | RDB → S3 + 7일 보존 | PITR · 리전 간 복원 |
| 모니터링 | valkey-exporter + Grafana 대시보드 | QPS · Hit% · Mem · Repl Lag 추적 |
Ⅶ. Valkey 자주 쓰는 명령어
Valkey 명령어는 valkey-cli(대부분의 RESP 클라이언트와 동일) 로 실행하며, GET/SET 기본부터 클러스터 · ACL · 영속성 · 디버깅까지 포괄합니다. 실무에서 자주 쓰는 명령을 분류해 정리합니다.
| 분류 | 명령어 / 사례 | 설명 |
| 접속 | valkey-cli -h vk.prod -p 6379 --tls -a $PASS | TLS + 패스워드 접속 |
| 핑 / 정보 | PING / INFO / DBSIZE / TIME | 헬스체크, 서버 통계, 키 개수 |
| String | SET k v EX 60 / GET k / INCRBY counter 10 | TTL, 원자 카운터 |
| Hash | HSET user:1 name kim age 30 / HGETALL user:1 | 객체 필드 단위 저장 |
| List(Queue) | LPUSH q job1 / BRPOP q 0 | 좌측 입력 / 우측 블로킹 소비 |
| Set | SADD tags ai db / SMEMBERS tags | 유니크 멤버 집합 |
| Sorted Set | ZADD rank 1500 u1 / ZREVRANGE rank 0 9 WITHSCORES | 리더보드 / 우선순위 큐 |
| Stream | XADD events * type order / XREADGROUP GROUP g c COUNT 10 STREAMS events > | 이벤트 스트림 · 컨슈머 그룹 |
| Pub/Sub | PUBLISH chat hi / SUBSCRIBE chat | 채팅 / 알림 브로드캐스트 |
| 키 관리 | EXPIRE k 60 / TTL k / PERSIST k / DEL k | TTL 부여·해제·삭제 |
| 스캔 | SCAN 0 MATCH user:* COUNT 100 | 대용량 환경에서 KEYS * 대체 |
| 벡터(8.1+) | VEMB add idx id1 0.1 0.2 ... / VSIM idx FROM 0.1 ... K 5 | 임베딩 저장 · 유사도 검색 |
| JSON | JSON.SET k $ '{"x":1}' / JSON.GET k $.x | RedisJSON 호환 명령 |
| Bloom | BF.ADD seen abc / BF.EXISTS seen abc | 중복 검출 · 부정거래 1차 필터 |
| 스크립트 | EVAL "return redis.call('GET', KEYS[1])" 1 mykey | Lua 원자 실행 |
| 트랜잭션 | MULTI / SET k v / INCR c / EXEC | 명령 묶음 원자 실행 |
| Pipeline | valkey-cli --pipe < bigload.txt | 대량 입력 RTT 최적화 |
| ACL | ACL SETUSER app on >pw +@read +@write -FLUSHALL ~app:* | 사용자 · 명령어 · 키 권한 정의 |
| 설정 | CONFIG SET maxmemory 4gb / CONFIG GET save | 런타임 설정 변경 / 조회 |
| 슬로우 로그 | SLOWLOG GET 20 / SLOWLOG RESET | 느린 명령 분석 |
| 레이턴시 | LATENCY DOCTOR / LATENCY HISTORY event-loop | 지연 진단 · 권고 |
| 메모리 | MEMORY USAGE k / MEMORY STATS | 키 별 / 전체 메모리 분석 |
| 영속성 | BGSAVE / BGREWRITEAOF / LASTSAVE | RDB · AOF 비동기 작업 |
| 복제 | REPLICAOF vk-master 6379 / REPLICAOF NO ONE | 복제 시작 / 마스터 승격 |
| 클러스터 | CLUSTER NODES / CLUSTER SLOTS / CLUSTER FAILOVER | 토폴로지 조회 · 페일오버 |
| 리샤딩 | valkey-cli --cluster reshard host:port | 슬롯 이동 · 다중 슬롯 병렬 |
| 벤치마크 | valkey-benchmark -h vk -p 6379 -t set,get -n 1000000 -P 16 | 처리량/지연 측정 |
| 마이그레이션 | MIGRATE host port key 0 5000 COPY REPLACE | 키 단위 노드 간 이동 |
| 디버그 | DEBUG OBJECT k / DEBUG SLEEP 5 | 객체 인코딩 / 지연 시뮬레이션 |
| 종료 | SHUTDOWN SAVE / NOSAVE | 안전 / 강제 종료 |
Ⅷ. Valkey 활용 방안
Valkey 는 단순 캐시를 넘어 세션 · 큐 · 리더보드 · 실시간 분석 · 벡터 검색 · Pub/Sub · 분산 락 · AI 워크로드까지 폭넓게 활용됩니다. 2025~2026 실무에서 가장 효과적인 8가지 활용 시나리오를 정리합니다.
| 활용 분야 | 시나리오 | 적용 효과 | 대표 사례 |
| 웹 캐시 · 세션 | API 응답 / 세션 스토어 | DB 부하의 80~95% 를 흡수해 평균 지연을 100ms → 1ms 수준으로 낮추고, 멀티 인스턴스 환경에서 세션 일관성을 보장합니다. | 카카오, 우아한형제들, 야놀자 |
| 리더보드 / 랭킹 | 게임 · 커머스 · 광고 입찰 | ZSET 의 O(log N) 정렬을 활용해 수천만 유저의 실시간 순위를 ms 단위로 갱신·조회합니다. | 라인 게임, 컬리 베스트, SK텔레콤 |
| 분산 락 / 동시성 | 주문 · 결제 · 재고 | SET NX EX + Lua 안전 해제 패턴으로 마이크로서비스 간 중복 처리 · 더블 차징을 방지합니다. | 토스, 우아한형제들, 마켓컬리 |
| 이벤트 / 큐 | Streams 기반 작업 큐 | 경량 큐가 필요할 때 Kafka · RabbitMQ 없이 XADD/XREADGROUP 으로 컨슈머 그룹 · ACK · 재처리를 구현합니다. | 네이버 광고, 11번가, 라인페이 |
| 실시간 분석 | HyperLogLog · Bitmap · TopK | 일일 UV · DAU · 실시간 대시보드를 수십 KB 메모리로 처리해 OLAP DB 부하를 분산합니다. | 카카오 모먼트, 네이버 데이터랩 |
| AI / RAG | 벡터 검색 + 캐시 | VSIM/VEMB 으로 임베딩 인덱스를 구축해 RAG 응답 캐시 · 의미 기반 추천을 단일 노드에서 통합합니다. | Anthropic 파트너, OpenAI 파트너, 카카오브레인 |
| Pub/Sub · 알림 | 채팅 · 푸시 · 실시간 협업 | SUBSCRIBE/PSUBSCRIBE 패턴으로 수십만 동접 채널의 메시지 팬아웃을 ms 지연으로 처리합니다. | 라인, 디스코드 한국 파트너, 카카오톡 |
| 피처 스토어 | ML 온라인 추론 | 모델 입력 피처를 키-값 · 해시 형태로 저장해 추론 지연을 ms 미만으로 줄이고, 오프라인 학습-온라인 추론 일관성을 확보합니다. | 쿠팡 추천, 네이버 검색, 카카오 추천 |
다만 Valkey 는 모든 워크로드의 만능 키가 아니며, 다음 상황에서는 다른 기술을 고려해야 합니다.
| 피해야 할 상황 | 이유 / 한계 | 권장 대안 |
| 대용량 영구 저장(TB+) | RAM 비용이 디스크 대비 50~100배, 메모리 한계가 비용 한계 | PostgreSQL · CockroachDB · ScyllaDB |
| 강한 일관성 트랜잭션 | 비동기 복제 + AOF everysec 의 1초 손실 가능성 | CockroachDB · Spanner · Postgres |
| 복잡 분석 / 조인 | SQL · JOIN · 집계 함수가 약하고, 옵티마이저 부재 | ClickHouse · DuckDB · Trino |
| 대용량 메시지 브로커 | Streams 도 내구성 · 순서 · 멀티테넌시는 Kafka 대비 제한적 | Apache Kafka · Pulsar |
| 풀텍스트 검색 | 형태소 분석 · 한국어 토크나이저 · 랭킹 함수 미흡 | OpenSearch · Elasticsearch |
| 지리 공간 고급 쿼리 | GEO 명령은 기본 거리만 지원, PostGIS 수준 미달 | PostGIS · MongoDB Geo |
| 대규모 그래프 탐색 | 그래프 알고리즘 · Cypher 같은 질의 언어 부재 | Neo4j · Memgraph |
| 장기 시계열 보관 | TimescaleDB 같은 압축 · 다운샘플링 · SQL 미지원 | TimescaleDB · InfluxDB · Prometheus |
정리하면, Valkey 는 "Redis 와 100% 호환되면서도 라이선스 자유 · 멀티스레드 I/O · 벡터/JSON 내장 · 중립 거버넌스" 라는 네 가지 강점을 무기로 2024~2026년 인메모리 데이터스토어의 사실상 표준(de facto) 자리를 빠르게 차지하고 있습니다. 신규 시스템이라면 Valkey 8.x 부터 시작하고, 기존 Redis 기반 시스템도 라이선스 · 비용 · 운영 일관성을 고려해 점진적 이전을 진행한다면, 한 회사의 정책 변경에도 흔들리지 않는 견고한 인메모리 인프라를 확보할 수 있을 것입니다.
'데이터베이스' 카테고리의 다른 글
| 왜 PrestoSQL이 Trino가 되었을까? 특징부터 기본 실행까지 총 정리 (0) | 2026.04.30 |
|---|---|
| B-Tree (Balanced Tree) 에 대해 알아보겠습니다. (0) | 2026.01.07 |
| 데이터베이스에서 사용되는 인덱스(Index)에 대해 알아보겠습니다. (0) | 2026.01.06 |
| Connection Pooling (데이터베이스 연결 풀) 에 대해 알아보겠습니다. (0) | 2025.12.29 |
| 데이터베이스 샤딩(Database Sharding)에 대해 알아보겠습니다. (0) | 2025.10.16 |