I. 데이터 영속성
1. 스냅숏 (RDB)
- (1) 개요
스냅숏은 Redis의 메모리 상태를 일정 시점에RDB 파일형태로 저장하는 방식이다
일반적으로 save 설정을 통해 특정 시간 동안 일정 횟수 이상의 변경이 발생했을 경우 자동으로 수행된다 - (2) 장점
저장 속도가 빠르며실행 중인 인스턴스의 상태를 간단히 백업할 수 있다- 재시작 시
복구 속도가 빠르며운영 중단 시간을 최소화할 수 있다
- (3) 단점
- 마지막 저장 이후 발생한 데이터는
손실될 수 있다 - 저장 시점에 따라
일관성 없는 상태가 저장될 가능성도 존재한다
- 마지막 저장 이후 발생한 데이터는
2. AOF (Append Only File)
- (1) 개요
AOF는 Redis의 모든쓰기 명령어를 순차적으로 기록하여 영속성을 보장하는 방식이다
재시작 시 해당 로그를 순서대로 재실행함으로써 데이터를 복구한다 - (2) 장점
데이터 유실을 최소화할 수 있으며RDB보다 내구성이 높다- 로그 기반 구조로 인해
문제 발생 시 디버깅이나 복구가 용이하다
- (3) 단점
- 모든 명령을 기록하므로
파일 크기가 커지기 쉽고 성능이 저하될 수 있다 - 주기적인
리라이트(rewrite) 작업이 필요하며설정에 따라 서버 부하가 발생할 수 있다
- 모든 명령을 기록하므로
3. 스냅숏과 AOF 비교
- (1)
RDB는 특정 조건에서 전체 데이터를한 번에 저장하는 방식이며,AOF는 모든 명령을순차적으로 기록한다 - (2)
RDB는 빠른 저장과 복구가 가능하지만 일부 데이터 손실이 발생할 수 있으며,AOF는 상대적으로 느리지만 데이터 손실이 적다 - (3) Redis에서는 두 방식을 함께 사용할 수 있으며, 일반적으로
AOF를 기본 복구 수단으로 사용하고 RDB는 보조 백업으로 사용하는 형태가 권장된다
II. 캐시 서버로서 레디스 아키텍처
1. 읽기 관점 아키텍처
- (1) 개요
읽기 중심의 아키텍처에서는 클라이언트 요청이캐시 서버(Redis)를 우선적으로 조회하고,캐시에 값이 없을 경우에만백엔드 데이터 저장소(RDBMS 등)로 요청을 전달한다
이 방식은응답 속도를 향상시키고백엔드 시스템에 가해지는 부하를 줄이는 데 효과적이다 - (2) 장점
- 대부분의 요청이 Redis에서 처리되므로
지연 시간이 매우 짧다 스케일 아웃이 용이하며, 로드 밸런서와 조합하여 처리량을 유연하게 확장할 수 있다
- 대부분의 요청이 Redis에서 처리되므로
- (3) 단점
- 캐시에 없는 데이터는 백엔드로 요청되므로
캐시 미스 비율에 따라 성능 편차가 발생할 수 있다 - 데이터 갱신 시점에 대한 관리가 필요하며,
불일치(Inconsistency) 문제가 발생할 수 있다
- 캐시에 없는 데이터는 백엔드로 요청되므로
2. 쓰기 관점 아키텍처
- (1) 개요
쓰기 중심의 아키텍처에서는데이터 갱신이 발생할 때Redis와 백엔드 저장소에 대한 처리를 동시에 고려해야 한다
보통은 백엔드에 쓰기를 완료한 후 Redis를 갱신하거나 삭제하여 일관성을 맞추는 방식이 사용된다 - (2) 전략
Write-through방식은 쓰기 요청이 Redis와 백엔드 저장소에 동시에 들어가도록 하며, 쓰기 일관성을 보장하지만 지연이 늘어날 수 있다Write-back방식은 우선 Redis에만 반영하고, 백그라운드로 영속 저장소를 갱신한다Write-around는 백엔드에만 쓰고 Redis에는 갱신하지 않으며, 다음 읽기 요청 시 다시 캐시에 로드하는 방식이다
- (3) 주의점
동시성 이슈에 취약할 수 있으며, 재시도 로직이 필요하다- 쓰기-읽기 타이밍이 어긋나면
구버전 데이터가 읽히는 현상이 발생할 수 있다
3. 아키텍처 안티 패턴
- (1) 단일 인스턴스에 모든 요청 집중
Redis를 하나의 인스턴스로 구성하고 읽기/쓰기/백업까지 전부 처리하도록 설정하는 경우,장애 시 전체 서비스 중단 위험이 커진다읽기/쓰기 분리또는샤딩을 통해 부담을 분산하는 구조가 필요하다 - (2) 캐시와 영속 저장소 역할을 동시에 수행
Redis를 캐시 겸 영속 저장소로 사용하는 경우, 캐시의 일관성, 데이터 유실, 복구 전략 등에 대한 고려 없이 구성하면영속성을 보장하지 못하는 위험이 존재한다
이러한 설계는 테스트 환경이나 단순 구조에는 유리할 수 있으나, 운영 환경에서는 권장되지 않는다 - (3) TTL 없이 무한 저장
캐시로 사용하는 키에 TTL 설정이 없는 경우, 메모리를 계속 소비하게 되어메모리 부족, eviction, OOM(Out of Memory)으로 이어질 수 있다
4. 데이터 저장소로서의 레디스 아키텍처
- (1) 개요
Redis를 단순 캐시가 아닌주요 데이터 저장소로 사용하는 방식은 가능하지만 몇 가지 제한사항과 고려사항이 존재한다
예를 들어영속성 확보를 위한 AOF/RDB 설정,복제 및 클러스터 구성,백업 체계등은 필수적으로 갖추어야 한다 - (2) 권장 패턴
TTL 정책과 결합하여, 오래된 데이터는 자동으로 제거되도록 구성한다복제본 노드를 별도로 구성하여 읽기 부하를 분산시킨다페일오버 및 장애 감지 기능이 있는 Sentinel 또는 Redis Cluster를 활용하여 고가용성을 확보한다
III. 운영 모범 사례
1. TTL 설정
- (1) 개요
Redis는 메모리 기반 데이터 저장소이므로용량이 한정되어 있으며필요하지 않은 데이터를 장기간 유지하면메모리 부족으로 이어질 수 있다
따라서 각 키에 대해TTL(Time To Live)을 설정하여 일정 시간이 지나면 자동으로 제거되도록 구성하는 것이 바람직하다 - (2) 권장 방식
- 캐시 데이터에는 기본적으로 TTL을 설정하는 습관을 들여야 한다
- TTL이 없는 키는 점차적으로 메모리를 점유하므로, 전체 키 중
TTL이 없는 키 비율을 주기적으로 모니터링하는 것이 좋다
2. 제거 정책 설정
- (1) 개요
Redis는maxmemory설정을 통해 사용할 수 있는 최대 메모리를 제한할 수 있으며, 이 설정을 초과할 경우eviction 정책에 따라 키를 제거한다 - (2) 정책 종류
volatile-lru,allkeys-lru등은 자주 사용되지 않은 키부터 제거하는 방식으로효율적인 메모리 관리가 가능하다noeviction은 설정된 메모리 초과 시 새로운 데이터를 저장하지 않고 오류를 발생시키므로, 신중하게 사용해야 한다
- (3) 권장 설정
일반적인 캐시 용도에서는allkeys-lru또는volatile-lru설정이 자주 사용되며, 서비스 특성에 따라TTL과 함께 조합하여 적용하는 것이 바람직하다
3. 백업
- (1) 개요
Redis는 기본적으로인메모리이기 때문에 장애나 시스템 다운 시데이터 손실 가능성이 있다
따라서정기적인 백업 정책을 수립하는 것이 필수적이다 - (2) 방법
RDB 파일을 주기적으로 백업하고,AOF 파일을 함께 보관하여 재해 복구 시 활용할 수 있도록 한다- 중요한 서비스에서는
서버 외부의 안전한 위치에 백업 데이터를 저장하는 것이 권장된다
4. 커넥션 풀링
- (1) 개요
Redis는 연결마다소켓 리소스를 사용하므로 다수의 클라이언트가 직접 연결을 유지할 경우 리소스 낭비가 발생할 수 있다
이를 방지하기 위해커넥션 풀을 활용하는 것이 안정적인 운영에 유리하다 - (2) 장점
- 매 요청마다 연결/해제를 반복하지 않아
네트워크 오버헤드가 줄어든다 - Redis 서버의
동시 연결 수를 제어할 수 있으므로, 서버 부하를 예측 가능하게 만든다
- 매 요청마다 연결/해제를 반복하지 않아
5. 재시도 처리
- (1) 개요
일시적인 네트워크 지연이나 서버 부하로 인해 Redis 명령이 실패하는 경우가 있을 수 있다
이러한 상황을 고려하여 클라이언트 측에서재시도 로직을 구현하는 것이 좋다 - (2) 권장 방식
지수 백오프(Exponential Backoff)전략을 통해 재시도 간 간격을 조절함으로써 과도한 부하를 방지할 수 있다- 실패 시 즉시 실패 처리하지 않고, 제한된 횟수 내에서 재시도하도록 구성한다
6. 기타 모범 사례
- (1) 모니터링
INFO명령이나Redis Exporter를 활용해 메모리 사용량, 커넥션 수, keyspace hit/miss 등을 지속적으로 모니터링해야 한다 - (2) 키 설계
key 이름은 명확하게 구분되는 접두사를 붙여 네임스페이스처럼 사용할 수 있으며, 복잡한 연산이 필요할 경우 자료형 설계를 충분히 고려한다 - (3) 운영 중 명령어 사용 주의
운영 환경에서KEYS,FLUSHALL등은 피해야 하며, 대안으로는SCAN,UNLINK등의 명령어를 사용하는 것이 권장된다
IV. 캐시 노드 크기 조정
1. 크기 조정 기준
- (1) 개요
Redis는인메모리 기반 시스템이므로 노드의 크기를 어떻게 설정하느냐에 따라 시스템의 안정성과 비용 효율성이 달라진다
따라서 전체 데이터의 특성과 부하 수준에 맞게 노드 크기를 결정하는 것이 중요하다 - (2) 고려 요소
- 캐시에 저장되는
데이터 수, 크기, TTL, 접근 패턴등을 종합적으로 고려해야 한다 - 레디스는
키 수와 값의 크기에 따라 메모리 사용량이 비선형적으로 증가할 수 있기 때문에,정확한 용량 산정은 필수적이다 - TTL이 길거나 없는 경우, 캐시의 누적이 계속 발생하므로
eviction 비율과 메모리 사용량의 추이를 기준으로 리사이징 필요 여부를 판단할 수 있다
- 캐시에 저장되는
- (3) 측정 방법
- 실제 트래픽 조건에서
redis-benchmark또는 실제 사용자 요청 기반의 부하 테스트를 수행하는 것이 좋다 INFO memory명령을 활용해 메모리 점유 현황을 모니터링하고,used_memory_peak_human등을 참고하여 최댓값을 예측한다
- 실제 트래픽 조건에서
2. 샤딩 고려
- (1) 필요성
하나의 인스턴스에 모든 데이터를 저장하는 구조는확장성과 가용성 측면에서 한계가 있다
서비스 성장과 함께 데이터가 증가하면수평 확장(샤딩)을 통해 각 노드의 부담을 분산시키는 것이 필요하다 - (2) 샤딩 기준
- 키 해싱 기반 샤딩이 일반적이며,
Consistent Hashing또는 Redis Cluster에서의슬롯 기반 샤딩을 사용할 수 있다 - 단순 해시 샤딩을 사용할 경우,
데이터 불균형이 발생할 가능성이 있으므로,접근 패턴이 균등한지사전에 분석해야 한다
- 키 해싱 기반 샤딩이 일반적이며,
- (3) 주의사항
- 샤딩된 구조에서는
cross-node 연산이 불가능하므로, 키 설계 시 같은 샤드 내에서 연산이 일어나도록 구성해야 한다 - 일부 복잡한 연산이 필요한 기능은 Redis에 적합하지 않으며, 이러한 경우는 백엔드 DB나 다른 처리 계층으로 위임하는 것이 좋다
- 샤딩된 구조에서는
V. 설정 파일 (redis.conf)
1. 개요
- (1) redis.conf는 Redis 서버의
기본 동작과 보안, 퍼포먼스, 영속성등을 제어하는 주요 설정 파일이다 - (2) 운영 환경에서는
기본 설정을 그대로 사용하지 않고서비스 특성과 목적에 맞게 일부 항목을 변경하는 것이 일반적이다 - (3) Redis를
데몬 형태로 실행하거나 systemd로 관리할 경우에도 이 파일을 통해 초기 설정을 적용하게 된다
2. 주요 설정 항목
- (1) 포트 및 접근 관련
port는 기본적으로 6379이며, 서비스 환경에 따라 변경할 수 있다bind항목은 접근을 허용할 IP를 설정하며, 예를 들어127.0.0.1만 설정하면 외부 접속은 제한된다protected-mode는 기본적으로 yes이며, 외부 접속 차단을 위한 보호 모드다
운영 환경에서 외부 접근을 허용하려면bind와 requirepass 설정을 함께 고려해야 한다
- (2) 보안 관련
requirepass는 Redis 접속 시 사용할 비밀번호를 설정하는 항목이다rename-command를 통해 위험한 명령어를 다른 이름으로 바꿔 보안을 강화할 수 있다
예를 들어FLUSHALL이나CONFIG명령은 반드시 리네이밍하거나 비활성화하는 것이 좋다- Redis 6 이상에서는
ACL 설정도 별도로 가능하며, 사용자별 권한 제어를 통해 보안을 세분화할 수 있다
- (3) 메모리 및 퍼포먼스
maxmemory는 Redis가 사용할 수 있는 최대 메모리를 제한하는 값이며,eviction 정책과 함께 설정해야 한다maxclients는 Redis가 동시에 처리할 수 있는 최대 클라이언트 수를 설정한다
이 값이 실제 OS의ulimit -n보다 클 경우 에러가 발생할 수 있으므로 반드시 시스템 리소스 제한과 함께 조정해야 한다
- (4) 영속성 관련
save설정은 RDB 스냅숏 저장 조건을 의미하며,save 900 1과 같이 시간-변경 횟수 조건으로 지정할 수 있다appendonly는 AOF 사용 여부를 설정하며, yes로 설정하면 모든 쓰기 명령을 appendonly.aof에 기록하게 된다appendfsync는 AOF 기록 주기를 설정하며, always, everysec, no 세 가지 중 하나를 선택할 수 있다
- (5) 로깅 및 모니터링
logfile은 로그를 기록할 파일 경로를 지정하며, 빈 값이면 stdout으로 출력된다loglevel은 로그 상세 수준을 설정하며, debug, verbose, notice, warning 중 하나를 선택할 수 있다slowlog-log-slower-than은 슬로우 쿼리 로깅 기준 시간으로,마이크로초 단위로 지정하며 성능 분석 시 활용된다
- (6) 기타 운영 관련
daemonize는 yes일 경우 백그라운드에서 데몬 형태로 실행되며, 일반적으로 시스템에 등록된 서비스로 실행 시에는 no로 설정한다tcp-keepalive는 커넥션 유지 주기를 조절하는 값으로, 네트워크 불안정 환경에서는 적절히 조절하는 것이 바람직하다databases는 사용할 수 있는 DB 인스턴스 수를 설정하며, 기본값은 16이지만 대부분의 서비스에서는 1개만 사용하는 경우가 많다
VI. 보안
1. 개요
- (1) Redis는 기본적으로
내부망에서의 사용을 전제로 설계되어 있으므로, 별도의 보안 설정을 하지 않으면 외부 공격에 취약할 수 있다 - (2) 운영 환경에서는
인증, 권한 제어, 명령어 제한등 보안 조치를 명확히 설정해야 하며, Redis 자체 기능뿐만 아니라 네트워크 및 시스템 레벨 보안도 함께 고려해야 한다
2. 접근 제어 (Authentication)
- (1)
requirepass
Redis는 인증 기능을 통해비밀번호를 설정할 수 있으며, 인증되지 않은 클라이언트는 명령 실행이 차단된다
설정 파일에서requirepass <password>형식으로 지정하며, 운영 환경에서는 반드시 강력한 비밀번호를 설정해야 한다 - (2) 제한 사항
비밀번호 인증만으로는IP 필터링이 없기 때문에외부에서 접속 가능한 경우 보안이 취약할 수 있다
따라서 반드시방화벽 설정, bind 주소 제한, TLS 사용등을 병행해야 한다
3. 명령어 제한 (rename-command)
- (1) 개요
Redis는 일부 위험한 명령어들을다른 이름으로 바꾸는 기능을 제공하며, 이를 통해 사용자의 오용이나 악의적인 접근을 방지할 수 있다
예를 들어FLUSHALL또는CONFIG명령은 실수로 실행될 경우 전체 데이터가 삭제되거나 설정이 변경될 수 있으므로 운영 환경에서는 반드시 제한해야 한다 - (2) 사용 방법
rename-command CONFIG ""처럼 빈 문자열을 지정하면 해당 명령어는 비활성화된다
또는rename-command FLUSHALL secure_flushall과 같이 명령어를 바꾸어 내부 관리 도구에서만 사용할 수 있게 할 수 있다
4. ACL (Access Control List)
- (1) 개요
Redis 6 이상부터는ACL 기능이 도입되어 사용자 단위로접근 권한, 키 패턴, 명령어 범위를 제한할 수 있게 되었다
이를 통해 Redis를 여러 서비스가 공유할 경우에도사용자 간 권한 분리가 가능해졌다 - (2) 주요 구성
- 사용자 생성:
ACL SETUSER <username> on >password형식으로 사용자와 비밀번호를 설정할 수 있다 - 명령어 제한:
+get,+set,-flushall형식으로 허용 및 차단할 명령어를 지정한다 - 키 패턴 제한:
~cache:*과 같이 특정 키 패턴만 접근 가능하도록 설정할 수 있다
- 사용자 생성:
- (3) 운영 팁
ACL 설정은 redis.conf 또는 별도 ACL 파일을 통해 유지 관리할 수 있으며, 권한 변경 시 서버 재시작 없이 반영 가능하다
관리 계정은 최소한으로 유지하고, 일반 클라이언트는 반드시 제한된 권한만 부여해야 한다
5. 기타 보안 모범 사례
- (1)
bind설정으로 외부 접속 차단
기본적으로 Redis는 모든 IP에서 접근 가능하므로bind 127.0.0.1또는 사내망 IP로 제한해야 한다 - (2)
protected-mode활성화
이 모드는 외부에서 인증 없이 접속하지 못하게 하며, Redis 6 이전에는 특히 필수적인 설정이다 - (3)
TLS 암호화
Redis 6부터는 TLS를 지원하므로 네트워크 단에서데이터 전송 시 암호화를 적용할 수 있다
민감한 데이터를 다루는 경우 반드시TLS 및 mTLS 인증서 기반 통신을 적용하는 것이 좋다 - (4)
운영 접근 최소화
운영자는FLUSHALL, DEBUG, CONFIG등의 고위험 명령을 리네이밍하거나 ACL로 차단하고, 해당 기능은 전용 계정을 통해서만 사용할 수 있도록 한다
VII. 벤치마크
1. 개요
- (1) Redis는 인메모리 구조의 특성상 매우 빠른 성능을 제공하지만, 실제 서비스 환경에서는
네트워크, 커넥션 수, 데이터 크기등에 따라 성능이 달라질 수 있다 - (2) 따라서 배포 전 또는 인프라 변경 시점에
성능을 수치화하고 비교 가능하게 측정하는 작업이 필요하다 - (3) Redis는 자체 제공 도구인
redis-benchmark를 통해 간단하게 벤치마크를 수행할 수 있으며, 실제 워크로드와 유사한 환경에서의 테스트가 권장된다
2. redis-benchmark 도구
- (1) 기본 사용법
redis-benchmark -h <host> -p <port>명령으로 기본 벤치마크를 수행할 수 있으며, 기본적으로50개의 동시 클라이언트로 100000개의 요청을 전송한다
다양한 명령어 유형에 대해 초당 처리량, 평균 지연 시간 등을 출력해준다 - (2) 주요 옵션
-n <num>: 전체 요청 수를 설정하며, 기본값은 100000이다-c <clients>: 동시 접속 클라이언트 수를 지정하며, 실제 서비스에서의 TPS 유사 환경을 구성할 수 있다-d <size>: SET/GET 시 사용하는 값의 크기를 지정한다-t <commands>: 테스트할 명령어를 지정하며, 예를 들어-t set,get처럼 사용할 수 있다-P <pipeline>: 파이프라이닝으로 묶을 명령 수를 지정하여 네트워크 효율성을 측정할 수 있다
- (3) 예시
redis-benchmark -n 100000 -c 100 -d 256 -t set,get -P 10은 256바이트 데이터를 100개의 동시 클라이언트가 10개씩 파이프라인으로 처리하는 상황을 시뮬레이션한다
3. 유의사항
- (1) redis-benchmark는
실제 애플리케이션의 트래픽 패턴을 완전히 반영하지 못한다
단순 명령어 반복 중심이므로 복잡한 트랜잭션, 키 분포, TTL 동작 등을 반영하려면별도 시나리오 기반 부하 테스트가 필요하다 - (2) 테스트 대상 서버와 클라이언트 위치가 동일하거나 네트워크가 안정적인 환경에서 진행되어야 정확한 측정이 가능하다
- (3) 파이프라이닝과 멀티스레딩 옵션을 과도하게 사용하면
실제 서비스보다 비현실적인 수치가 나올 수 있으므로적절히 조절해야 한다 - (4) 클러스터 환경에서는
슬롯 분산, 샤드 간 분기, 명령 재시도 비용등도 고려해야 하며, 단일 노드 테스트 결과만으로 판단해서는 안 된다
VIII. 멀티 스레드 처리
1. 개요
- (1) Redis는
기본적으로 싱글 스레드 구조를 유지하고 있으며, 이는 명령 처리의직렬성과 예측 가능한 성능을 보장한다는 장점이 있다 - (2) 그러나 Redis 6.0부터는
I/O 처리에 한해 멀티 스레드 기능이 도입되어, 네트워크 입출력에서 병목을 줄이는 데 도움을 준다
2. 싱글 스레드 처리 구조
- (1) Redis는 클라이언트의 요청을
하나의 메인 스레드에서 순차적으로 처리하며, 각 명령은blocking 없이 빠르게 실행되는 것이 전제다 - (2) 이 구조는
데이터 일관성과 간결한 코드 구조를 보장하지만, 고성능 네트워크 환경에서는 I/O 처리에서 병목이 발생할 수 있다
3. I/O 멀티 스레드 도입
- (1) Redis 6부터는
네트워크 입출력 처리에 한해 멀티 스레드를 사용할 수 있는 옵션이 추가되었다 - (2) 이는
실제 명령 실행은 여전히 싱글 스레드로 유지되지만, 클라이언트와의 통신에서 발생하는 데이터 수신/송신 처리를 여러 스레드로 병렬 처리함으로써처리량을 증가시킬 수 있다 - (3) 활성화 방법
redis.conf에서io-threads-do-reads yes설정을 통해 읽기 작업을 멀티 스레드로 처리할 수 있다io-threads <num>을 설정하여 사용할 스레드 수를 지정하며, 일반적으로 4~8개 사이가 권장된다
4. 유의사항 및 한계
- (1) 멀티 스레드는
명령 실행 자체를 병렬 처리하지 않기 때문에계산량이 많은 작업에서는 성능 향상 효과가 크지 않다 - (2) 반대로, 많은 클라이언트가 동시에 접속하여 작은 요청을 빠르게 주고받는 상황에서는
I/O 병목이 줄어들어 TPS 향상이 가능하다 - (3) I/O 멀티 스레드는
대부분의 리눅스 배포판에서 안정적으로 동작하지만, 운영 환경에서는CPU 코어 수, NUMA 구성등을 고려하여 조정해야 한다 - (4) 멀티 스레드를 사용하는 경우에는 redis-cli 등 단일 스레드 기반 도구와의
성능 비교가 왜곡될 수 있으므로주의해야 한다
IX. DEBUG 명령어
1. 개요
- (1) Redis는 내부 동작을 분석하거나 문제 상황을 진단하기 위해
DEBUG 계열의 명령어를 제공한다 - (2) 이러한 명령어들은 일반적인 운영 상황에서는 거의 사용되지 않지만,
성능 분석, 메모리 구조 파악, 장애 디버깅등의 목적으로 유용하게 활용될 수 있다 - (3) 단, 일부 DEBUG 명령은 운영 환경에서 사용 시
Redis 인스턴스를 중단시키거나 불안정하게 만들 수 있으므로주의가 필요하다
2. 주요 DEBUG 명령어
- (1)
DEBUG OBJECT <key>
해당 키의 내부 메타데이터를 출력하며,refcount, encoding, idle time등을 확인할 수 있다
예를 들어 오래된 키를 정리하거나, 어떤 방식으로 저장되고 있는지를 확인할 때 유용하다 - (2)
DEBUG SEGFAULT
강제로 Redis 서버에SIGSEGV 오류를 발생시켜 core dump를 유도하는 명령이다
운영 환경에서는 절대 실행하면 안 되며, 디버깅 테스트나 개발 환경에서만 제한적으로 사용해야 한다 - (3)
DEBUG HTSTATS <db>
특정 DB 인덱스에 해당하는해시 테이블의 버킷 분포 통계를 출력한다
키의 분포 상태나 충돌 현황을 확인하고자 할 때 유용하다 - (4)
DEBUG SLEEP <seconds>
지정한 시간 동안 Redis 서버를강제로 정지시키는 명령으로, 테스트 환경에서만 사용해야 한다 - (5)
DEBUG POPULATE <num> <prefix> <size>
대량의 키를 자동으로 생성해주는 명령으로, 벤치마크 테스트나 부하 테스트 전에 데이터를 준비할 때 활용할 수 있다
예를 들어DEBUG POPULATE 10000 foo 128은foo:0,foo:1...과 같은 키를 128바이트 값으로 10000개 생성한다
3. 사용 시 주의사항
- (1) DEBUG 명령은
공식적으로 내부 진단용으로만 제공되는 것이며, API 문서에도 일부는 명시되지 않을 수 있다 - (2) 운영 환경에서는 특히
DEBUG SEGFAULT, DEBUG SLEEP같은 명령을실행하지 않도록 보호 장치를 마련하는 것이 좋다 - (3) 만약 DEBUG 명령을 제한하고 싶다면,
redis.conf에서rename-command를 활용해 이름을 변경하거나, Redis 6 이상에서는ACL을 통해 명령 권한을 제한하는 것이 권장된다
'서적 > 실전 Redis' 카테고리의 다른 글
| CHAPTER 07 레플리케이션 [PART 02 실전] (2) | 2025.07.08 |
|---|---|
| CHAPTER 06 트러블슈팅 [PART 02 실전] (1) | 2025.07.01 |
| Chapter 03.고급 기능 [Part1 기초] (2) | 2025.06.09 |
| Chapter 02.자료형과 기능 [Part1 기초] (0) | 2025.05.26 |
| Chapter 01.레디스의 시작 [Part1 기초] : 연습문제 포함 (1) | 2025.05.17 |