fos-blog/study
01 / 홈02 / 카테고리
01 / 홈02 / 카테고리

카테고리

  • AI 페이지로 이동
    • RAG 페이지로 이동
    • langgraph 페이지로 이동
    • agents.md
    • BMAD Method — AI 에이전트로 애자일 개발하는 방법론
    • Claude Code의 Skill 시스템 - 개발자를 위한 AI 자동화의 새로운 차원
    • Claude Code를 5주 더 쓴 결과 — 스킬·CLAUDE.md를 키워가는 방식
    • Claude Code를 11일 동안 쓴 결과 — 데이터로 본 나의 사용 패턴
    • Claude Code 멀티 에이전트 — Teams
    • AI 에이전트와 디자인의 새 컨벤션 — DESIGN.md, Google Stitch, Claude Design
    • 하네스 엔지니어링 실전 — 4인 에이전트 팀으로 코딩 파이프라인 구축하기
    • 하네스 엔지니어링 — 오래 실행되는 AI 에이전트를 위한 설계
    • 멀티모달 LLM (Multimodal Large Language Model)
    • AI 에이전트와 함께 MVP 만들기 — dooray-cli 사례
  • ai 페이지로 이동
    • agent 페이지로 이동
  • algorithm 페이지로 이동
    • live-coding 페이지로 이동
    • 분산 계산을 위한 알고리즘
  • architecture 페이지로 이동
    • [초안] 시니어 백엔드를 위한 API 설계 실전 스터디 팩 — REST · 멱등성 · 페이지네이션 · 버전 전략
    • [초안] API Versioning과 Backward Compatibility: 시니어 백엔드 관점 정리
    • 캐시 설계 전략 총정리
    • [초안] CJ푸드빌 커머스/F&B 도메인 설계 면접 대비 — 슬롯 경험을 주문·결제·쿠폰·매장 상태 설계로 번역하기
    • [초안] 커머스 Spring 서비스에 Clean/Hexagonal Architecture를 실용적으로 적용하기
    • [초안] 커머스 주문 상태와 데이터 정합성 기본기 — CJ푸드빌 면접 대비
    • [초안] 쿠폰/프로모션 동시성과 정합성 기본기 — 선착순·중복 사용 방지·발급/사용/복구
    • [초안] DDD와 도메인 모델링: 시니어 백엔드 관점의 전술/전략 패턴 실전 가이드
    • [초안] Decorator & Chain of Responsibility — 행동을 체인으로 조립하는 두 가지 방식
    • 디자인 패턴
    • [초안] 분산 아키텍처 완전 정복: Java 백엔드 시니어 인터뷰 대비 실전 가이드
    • [초안] 분산 트랜잭션과 Outbox 패턴 — 왜 2PC를 피하고 어떻게 대신할 것인가
    • 분산 트랜잭션
    • [초안] e-Commerce 주문·결제 도메인 모델링: 상태머신, 멱등성, Outbox/Saga 실전 정리
    • [초안] F&B 쿠폰·프로모션·멤버십·포인트 설계
    • [초안] F&B · e-Commerce 디지털 채널 도메인 한 장 정리 — CJ푸드빌 디지털 채널 백엔드 면접 대비
    • [초안] F&B 주문/매장/픽업 상태머신 설계 — CJ푸드빌 디지털 채널 백엔드 관점
    • [초안] F&B 이커머스 결제·환불·정산 운영 가이드
    • [초안] Hexagonal / Clean Architecture를 Spring 백엔드에 적용하기
    • [초안] 대규모 커머스 트래픽 처리 패턴 — 1,600만 고객과 올영세일을 버티는 설계
    • [초안] 레거시 JSP/jQuery 화면과 신규 API가 공존하는 백엔드 운영 전략
    • [초안] MSA 서비스 간 통신: Redis [Cache-Aside](../database/redis/cache-aside.md) × Kafka 이벤트 하이브리드 설계
    • [초안] Observability 입문: 시니어 백엔드가 장애를 탐지하고 대응하는 방식
    • [초안] Outbox / Inbox Pattern 심화 — 분산 메시징의 정합성 문제를 DB 트랜잭션으로 풀어내기
    • [초안] 결제 도메인 멱등성과 트랜잭션 재시도 기본기
    • [초안] 시니어 백엔드를 위한 Resilience 패턴 실전 가이드 — Timeout, Retry, Circuit Breaker, Bulkhead, Backpressure
    • [초안] REST API 버저닝과 모바일 앱 하위 호환성 — CJ푸드빌 디지털 채널 백엔드 관점
    • [초안] Strategy Pattern — 분기문을 없애는 설계, 시니어 백엔드 인터뷰 핵심 패턴
    • [초안] 시니어 백엔드를 위한 시스템 설계 입문 스터디 팩
    • [초안] 템플릿 메서드 패턴 - 백엔드 처리 골격을 강제하는 가장 오래되고 가장 위험한 패턴
    • [초안] 대규모 트래픽 중 무중단 마이그레이션 — Feature Flag + Shadow Mode 실전
  • database 페이지로 이동
    • mysql 페이지로 이동
    • opensearch 페이지로 이동
    • redis 페이지로 이동
    • 김영한의-실전-데이터베이스-설계 페이지로 이동
    • 커넥션 풀 크기는 얼마나 조정해야 할까?
    • 인덱스 - DB 성능 최적화의 핵심
    • [초안] JPA N+1과 커머스 조회 모델: 주문/메뉴/쿠폰 도메인에서 살아남기
    • [초안] MyBatis 기본기 — XML Mapper, resultMap, 동적 SQL, 운영 패턴 정리
    • [초안] MyBatis와 JPA/Hibernate 트레이드오프 — 레거시 백엔드를 다루는 시니어 관점
    • 역정규화 (Denormalization)
    • 데이터 베이스 정규화
  • devops 페이지로 이동
    • docker 페이지로 이동
    • k8s 페이지로 이동
    • k8s-in-action 페이지로 이동
    • observability 페이지로 이동
    • [초안] 커머스/F&B 채널 장애 첫 5분과 관측성 기본기
    • Envoy Proxy
    • [초안] F&B / e-Commerce 운영 장애 대응과 모니터링 — 백엔드 관점 정리
    • Graceful Shutdown
  • finance 페이지로 이동
    • industry-cycle 페이지로 이동
    • investing 페이지로 이동
    • stock-notes 페이지로 이동
  • http 페이지로 이동
    • HTTP Connection Pool
  • interview 페이지로 이동
    • [초안] AI 서비스 팀 경험 기반 시니어 백엔드 면접 질문 뱅크 — Spring Batch RAG / gRPC graceful shutdown / 전략 패턴 / 12일 AI 웹툰 MVP
    • [초안] CJ푸드빌 디지털 채널 Back-end 커피챗 준비
    • [초안] CJ푸드빌 디지털 채널 — Part 2: ivips.co.kr SRE 외부 진단
    • [초안] CJ푸드빌 디지털 채널 — Part 3: 5/18 사전 커피챗 D-5 준비
    • [초안] CJ푸드빌 디지털 채널 Back-end 개발자 직무 분석
    • [초안] CJ푸드빌 디지털 채널 Back-end 면접 답변집 — 슬롯 도메인 경험을 커머스/F&B 설계로 번역하기
    • [초안] F&B / e-Commerce 운영 모니터링과 장애 대응 인터뷰 정리
    • Observability — 면접 답변 프레임
    • [초안] 시니어 Java 백엔드 면접 마스터 플레이북 — 김병태
    • [초안] NSC 슬롯팀 경험 기반 질문 은행 — 도메인 모델링·동시성·성능·AI 협업
  • java 페이지로 이동
    • concurrency 페이지로 이동
    • jdbc 페이지로 이동
    • opentelemetry 페이지로 이동
    • spring 페이지로 이동
    • spring-batch 페이지로 이동
    • 더_자바_코드를_조작하는_다양한_방법 페이지로 이동
    • [초안] Java 동시성 락 정리 — 커머스 메뉴/프로모션 정책 캐시 갱신 관점
    • [초안] JVM 튜닝 실전: 메모리 구조부터 Virtual Threads, GC 튜닝, 프로파일링까지
    • Java의 로깅 환경
    • MDC (Mapped Diagnostic Context)
    • Java StampedLock — 읽기 폭주에도 쓰기가 밀리지 않는 락
    • Virtual Thread와 Project Loom
  • javascript 페이지로 이동
    • typescript 페이지로 이동
    • AbortController
    • Async Iterator와 제너레이터
    • CommonJS와 ECMAScript Modules
    • 제너레이터(Generator)
    • Http Client
    • Node 백엔드 운영 패턴 — Streams 백프레셔, pipe/pipeline, 멱등성 vs 분산 락
    • Node.js
    • npm vs pnpm — 어떤 기준으로 선택했나
    • `setImmediate()`
  • kafka 페이지로 이동
    • [초안] Kafka 기본 개념 — 토픽, 파티션, 오프셋, 복제
    • Kafka를 사용하여 **데이터 정합성**은 어떻게 유지해야 할까?
    • [초안] Kafka 실전 설계: 파티션 전략, 컨슈머 그룹, 전달 보장, 재시도, 순서 보장 트레이드오프
    • 메시지 전송 신뢰성
  • linux 페이지로 이동
    • fsync — 리눅스 파일 동기화 시스템 콜
    • tmux — Terminal Multiplexer
  • network 페이지로 이동
    • L2(스위치)와 L3(라우터)의 역할 차이
    • L4와 VIP(Virtual IP Address)
    • IP Subnet
  • rabbitmq 페이지로 이동
    • [초안] RabbitMQ Basics — 실전 백엔드 관점에서 정리하는 메시지 브로커 기본기
    • [초안] RabbitMQ vs Kafka — 백엔드 메시징 선택 기준과 실전 운영 관점
  • security 페이지로 이동
    • [초안] 시니어 백엔드를 위한 보안 / 인증 스터디 팩 — Spring Security, JWT, OAuth2, OWASP Top 10
  • task 페이지로 이동
    • ai-service-team 페이지로 이동
    • nsc-slot 페이지로 이동
    • sb-dev-team 페이지로 이동
    • the-future-company 페이지로 이동
  • testing 페이지로 이동
    • [초안] 시니어 Java 백엔드를 위한 테스트 전략 완전 정리 — 피라미드부터 TestContainers, 마이크로벤치, Contract까지
  • travel 페이지로 이동
    • 오사카 3박 4일 일정표: 우메다 쇼핑, USJ, 난바·도톤보리, 오사카성
  • web 페이지로 이동
    • [초안] HTTP / Cookie / Session / Token 인증 기본기 — 레거시 JSP와 모바일 API가 공존하는 백엔드 관점
FOS-BLOG · FOOTERall systems normal·v0.1 · 2026.04.27·seoul, kr
Ffos-blog/study

개발 학습 기록을 정리하는 블로그입니다. 공부하면서 기록하고, 기록하면서 다시 배웁니다.

visitors
01site
  • Home↗
  • Posts↗
  • Categories↗
  • About↗
02policy
  • 소개/about
  • 개인정보처리방침/privacy
  • 연락처/contact
03categories
  • AI↗
  • Algorithm↗
  • DB↗
  • DevOps↗
  • Java/Spring↗
  • JS/TS↗
  • React↗
  • Next.js↗
  • System↗
04connect
  • GitHub@jon890↗
  • Source repositoryjon890/fos-study↗
  • RSS feed/rss.xml↗
  • Newsletter매주 1 회 · 한 편의 글→
© 2026 FOS Study. All posts MIT-licensed.
built with·Next.js·Tailwind v4·Geist·Pretendard·oklch
fos-blog/database/Redis 운영 가이드
db

Redis 운영 가이드

캐시, 세션, 분산 락 등 다양한 역할로 Redis를 쓰다 보면 성능 한계, 메모리 부족, 장애 대응 같은 운영 이슈를 마주치게 된다. 이 문서는 Redis를 실무에서 운영할 때 알아야 할 것들을 정리한다. --- Redis는 싱글 스레드이므로 성능은 단일 코어 성능에 비례한다. | 조건 | 처리량 (ops/sec) | |------|------------...

2026.03.27·10 min read·58 views

캐시, 세션, 분산 락 등 다양한 역할로 Redis를 쓰다 보면 성능 한계, 메모리 부족, 장애 대응 같은 운영 이슈를 마주치게 된다. 이 문서는 Redis를 실무에서 운영할 때 알아야 할 것들을 정리한다.


성능 — 얼마나 낼 수 있나?

단일 인스턴스 기준 처리량

Redis는 싱글 스레드이므로 성능은 단일 코어 성능에 비례한다.

조건처리량 (ops/sec)
기본 (파이프라인 없음, 클라이언트 50개)80,000 ~ 200,000
파이프라인 적용 (P=16)1,000,000 ~ 1,800,000
Unix Domain Socket (로컬)TCP 대비 약 50% 빠름
가상화 환경물리 서버 대비 10~20% 저하
bash
# 실제 환경 벤치마크
redis-benchmark -q -n 100000                          # 기본
redis-benchmark -t set,get -n 1000000 -P 16 -q       # 파이프라인 포함
redis-benchmark -c 100 -n 100000 -d 256 -q            # 256바이트 페이로드, 클라이언트 100개

성능에 영향을 주는 요소

요소영향도설명
CPU 단일 코어 성능매우 높음싱글 스레드라 클럭 속도가 중요
네트워크 RTT높음클라이언트-서버 거리가 멀수록 지연
데이터 크기중간10KB 이상부터 메모리 대역폭 영향
동시 연결 수중간30,000개 연결 시 처리량 약 50% 감소
O(N) 명령어높음하나가 전체 서버 블로킹
AOF fsync 정책중간always 설정 시 쓰기 속도 급감
가상화낮음~중간fork() 비용이 RDB/AOF 저장에 영향

응답 지연 목표치 (P99 기준)

환경목표 지연
같은 서버 (Unix Socket)< 0.1ms
같은 데이터센터 (내부망)< 1ms
다른 리전10~50ms

P99가 1ms를 넘기 시작하면 O(N) 명령어, Slow Query, 메모리 부족 중 하나를 의심해야 한다.


메모리 — 얼마가 적절하고, 몇 % 이상이면 위험한가?

메모리 사용률 임계값

사용률상태조치
~60%정상모니터링 유지
60~75%주의증설 계획 수립
75% 초과경고즉시 증설 또는 데이터 정리
90% 초과위험Eviction/OOM 발생 직전

60~75%를 상한선으로 잡는 이유:

  1. RDB 저장 시 fork(): BGSAVE 실행 시 자식 프로세스가 메모리를 복사(Copy-on-Write)하므로 순간적으로 메모리 사용량이 2배까지 올라갈 수 있다.
  2. 메모리 파편화: 실제 데이터보다 더 많은 물리 메모리를 점유할 수 있다.
  3. 트래픽 버스트: 순간적인 데이터 급증에 대한 여유분.

적정 메모리 용량 계산

plaintext
권장 메모리 = 피크 데이터 사용량 × 2 (RDB fork 고려) × 1.3 (파편화 여유)
 
예:
- 평상시 데이터: 4GB
- 피크 데이터: 6GB
- fork 여유: 6GB × 2 = 12GB
- 파편화 여유: 12GB × 1.3 = 15.6GB
- 권장: 16GB 이상

maxmemory 설정

bash
# redis.conf
maxmemory 12gb              # 실제 물리 메모리보다 낮게 설정 (여유분 확보)
maxmemory-policy noeviction # 메모리 초과 시 쓰기 거부 (권장)

Eviction 정책 선택:

정책설명적합 케이스
noeviction메모리 초과 시 쓰기 에러 반환데이터 유실 불허 (기본 권장)
allkeys-lru전체 키 중 LRU 제거모든 키가 캐시 성격일 때
volatile-lruTTL 있는 키 중 LRU 제거중요 키(TTL 없음)는 유지하고 캐시만 제거
allkeys-lfu사용 빈도 기준 제거특정 키에 집중 접근하는 워크로드
volatile-ttl만료 임박 순으로 제거TTL 관리가 잘 된 경우

noeviction이 가장 안전하다. OOM보다 에러가 낫다 — 에러는 모니터링으로 잡히지만, 조용히 데이터가 사라지는 건 더 위험하다.

메모리 파편화 관리

bash
# 파편화 비율 확인
redis-cli INFO memory | grep mem_fragmentation_ratio
 
# 해석
# 1.0 ~ 1.3 : 정상
# 1.3 ~ 1.5 : 주의
# 1.5 이상   : 높은 파편화 → 조치 필요

파편화 해소 방법:

bash
# Redis 4.0+: 온라인 파편화 정리
redis-cli CONFIG SET activedefrag yes
redis-cli CONFIG SET active-defrag-ignore-bytes 100mb  # 100MB 이상 파편화 시 시작
redis-cli CONFIG SET active-defrag-enabled yes
 
# 수동 정리 (Redis 재시작 없이)
redis-cli MEMORY PURGE

모니터링 — 어떤 지표를 봐야 하나

핵심 지표

bash
# 전체 상태 조회
redis-cli INFO all
 
# 섹션별 조회
redis-cli INFO memory      # 메모리
redis-cli INFO stats       # 연결, 명령어 처리
redis-cli INFO replication # 복제 상태
redis-cli INFO persistence # RDB/AOF 상태
redis-cli INFO clients     # 연결 클라이언트

주요 모니터링 항목과 알림 기준

지표명령어정상경고 기준
메모리 사용률used_memory / maxmemory< 60%> 75%
파편화 비율mem_fragmentation_ratio1.0~1.3> 1.5
캐시 히트율keyspace_hits / (hits + misses)> 90%< 80%
연결 수connected_clients서비스마다 다름최대치 80% 이상
차단된 클라이언트blocked_clients0> 0 지속 시
거부된 연결rejected_connections0> 0
Evicted 키evicted_keys0> 0 (noeviction이면 발생 안 함)
만료된 키expired_keys—급격히 증가 시
복제 지연master_repl_offset - slave_repl_offset< 100KB> 1MB

Slow Log (느린 쿼리 로그)

bash
# 10ms 이상 걸린 명령어 기록 (기본: 10000μs = 10ms)
redis-cli CONFIG SET slowlog-log-slower-than 10000
redis-cli CONFIG SET slowlog-max-len 128
 
# 슬로우 로그 조회
redis-cli SLOWLOG GET 10     # 최근 10개
redis-cli SLOWLOG LEN        # 전체 개수
redis-cli SLOWLOG RESET      # 초기화

출력 형식:

plaintext
1) 1) (integer) 14           # 순번
   2) (integer) 1711500000   # 실행 시각 (unix timestamp)
   3) (integer) 15000        # 소요 시간 (μs) → 15ms
   4) 1) "KEYS"              # 실행 명령어
      2) "*"

실시간 모니터링 (주의: 운영 환경에서 짧게만)

bash
# 실시간 명령어 스트리밍 (성능 영향 큼 → 운영 환경 사용 주의)
redis-cli MONITOR
 
# 1초 간격 통계 (이쪽이 안전)
redis-cli --stat
 
# 메모리 사용 분석
redis-cli MEMORY USAGE key:name          # 특정 키 메모리 사용량
redis-cli MEMORY DOCTOR                  # 메모리 상태 진단

장애 유형별 대응

1. 메모리 부족 (OOM / Eviction)

증상:

  • evicted_keys 증가
  • OOM command not allowed 에러 (noeviction 정책 시)
  • 응답 속도 급격히 저하

즉각 대응:

bash
# 1. 메모리 사용량 확인
redis-cli INFO memory
 
# 2. 큰 키 찾기
redis-cli --bigkeys
redis-cli MEMORY USAGE {key}
 
# 3. 불필요한 키 즉시 삭제
redis-cli DEL {unnecessary_key}
 
# 4. TTL 없는 키에 만료 시간 부여
redis-cli OBJECT ENCODING {key}
redis-cli TTL {key}                  # -1이면 TTL 없음
redis-cli EXPIRE {key} 3600

근본 해결:

  • maxmemory 증설 (서버 메모리 업그레이드)
  • 데이터 분산 (Redis Cluster)
  • 불필요한 데이터 캐싱 정책 재검토

2. 서버 다운 / 재시작

RDB만 사용 중:

bash
# 마지막 스냅샷 이후 데이터 유실
# 재시작하면 .rdb 파일에서 자동 복구
redis-server /etc/redis/redis.conf
 
# 복구 확인
redis-cli INFO persistence
# rdb_last_bgsave_status: ok
# rdb_last_bgsave_time_sec: 3

AOF 사용 중:

bash
# AOF 파일 손상 여부 확인
redis-check-aof --fix appendonly.aof
 
# 복구 (appendonly.aof 재실행)
redis-server /etc/redis/redis.conf
# aof_enabled: 1
# aof_rewrite_in_progress: 0

복구 우선순위: AOF > RDB (AOF가 더 최신 데이터)

3. 복제 지연 (Replica Lag)

증상:

  • master_repl_offset와 slave_repl_offset 차이가 큼
  • Replica에서 구 데이터가 읽힘
bash
# 복제 상태 확인
redis-cli INFO replication
 
# 출력 예시
# role:master
# connected_slaves:2
# slave0:ip=10.0.0.2,port=6379,state=online,offset=12345678,lag=0
# slave1:ip=10.0.0.3,port=6379,state=online,offset=12300000,lag=2  ← lag 주의

원인별 대응:

  • 네트워크 대역폭 부족 → repl-backlog-size 증가
  • Master 부하 과다 → Replica에 읽기 트래픽 분산
  • Replica 서버 성능 부족 → 서버 스펙 업그레이드

4. Master 장애 (Failover)

Sentinel 환경:

bash
# Sentinel이 자동으로 Replica → Master 승격
# 상태 확인
redis-cli -p 26379 SENTINEL masters
redis-cli -p 26379 SENTINEL slaves mymaster
 
# 수동 Failover (Sentinel에 명령)
redis-cli -p 26379 SENTINEL failover mymaster

Cluster 환경:

bash
# 클러스터 상태 확인
redis-cli CLUSTER INFO
redis-cli CLUSTER NODES
 
# 장애 노드 확인
# cluster_state: fail → 클러스터 불안정
# cluster_state: ok   → 정상
 
# 수동 Failover (Replica에서 실행)
redis-cli CLUSTER FAILOVER

Sentinel/Cluster 없는 단독 장애:

bash
# 1. Replica를 새 Master로 승격
redis-cli -h replica-host REPLICAOF NO ONE
 
# 2. 애플리케이션의 Redis 연결 주소 변경
# 3. 장애 Master 복구 후 새 Replica로 편입
redis-cli -h old-master REPLICAOF new-master-host 6379

5. Cache Stampede (캐시 폭풍)

증상:

  • TTL 만료 순간 DB CPU/응답 시간 급증
  • Redis 히트율 급락

즉각 대응:

bash
# 해당 키 즉시 Pre-warming
redis-cli SET hot:key {value} EX 3600
 
# 또는 TTL 연장
redis-cli EXPIREAT hot:key {future_timestamp}

근본 해결: 확률적 조기 갱신(Probabilistic Early Expiration) 또는 Lock 기반 갱신 → 캐시 설계 전략


운영 금지 명령어

다음 명령어는 운영 환경에서 사용하면 전체 서버가 블로킹될 수 있다.

명령어문제대안
KEYS *O(N) 전체 스캔 → 서버 블로킹SCAN 0 COUNT 100 (커서 기반 반복)
FLUSHALL모든 데이터 즉시 삭제FLUSHALL ASYNC (Redis 4.0+, 백그라운드)
FLUSHDB현재 DB 즉시 삭제FLUSHDB ASYNC
DEBUG SLEEP의도적 블로킹사용 금지
SMEMBERS (대형 Set)O(N)SSCAN
HGETALL (필드 수천 개)O(N)HSCAN 또는 필요 필드만 HMGET
LRANGE 0 -1 (긴 List)O(N)페이지네이션
MONITOR성능 50% 저하SLOWLOG GET 또는 짧게만 사용

하드웨어 권장 사항

CPU

  • 코어 수보다 클럭 속도가 중요 (싱글 스레드 특성)
  • Redis 인스턴스 하나당 코어 1개 사용
  • 여러 인스턴스를 실행하는 경우 코어 수 확보
  • Intel > AMD Opteron (Redis 공식 벤치마크 기준)

메모리

plaintext
권장 구성:
- Redis 데이터: 최대 maxmemory의 60%까지 사용 목표
- OS 및 기타: 여유분 (최소 2~4GB)
- fork() 여유: maxmemory만큼 추가 확보 (RDB/AOF 사용 시)
 
예시: 32GB 서버
- maxmemory: 24GB (OS용 8GB 남김)
- 피크 데이터 목표: 14~15GB (60%)
- fork() 발생 시 최대: 24 + 15 = 39GB → 서버 물리 메모리 초과!
→ RDB/AOF 사용 시 서버 메모리를 maxmemory의 2배 이상 권장

스토리지 (RDB/AOF 저장 시)

  • 로컬 SSD 필수 (NAS/NFS 사용 시 I/O 지연으로 성능 급락)
  • AOF 파일 크기가 maxmemory를 초과할 수 있음 → 별도 볼륨 권장
  • dir 설정으로 데이터 디렉터리 분리
bash
# redis.conf
dir /data/redis               # RDB/AOF 저장 경로 (SSD 마운트)
dbfilename dump.rdb
appendfilename appendonly.aof

네트워크

  • 대용량 데이터(4KB × 100,000 ops/s)는 3.2 Gbit/s 대역폭 사용
  • 10Gbps NIC 권장 (고부하 환경)
  • 동일 데이터센터 내 Redis-애플리케이션 배치 (네트워크 RTT 최소화)

설정 체크리스트

bash
# redis.conf 핵심 설정
 
# 메모리
maxmemory 12gb
maxmemory-policy noeviction
 
# 영속성 (캐시 전용이면 비활성화)
save ""                              # RDB 비활성화 (캐시 전용)
appendonly no                        # AOF 비활성화 (캐시 전용)
 
# 또는 영속성 필요 시
save 900 1
save 300 10
appendonly yes
appendfsync everysec                 # 성능과 안전의 균형
 
# 보안
requirepass {strong_password}
bind 127.0.0.1 10.0.0.1             # 내부망 IP만 바인딩
protected-mode yes
 
# 슬로우 로그
slowlog-log-slower-than 10000       # 10ms 이상 기록
slowlog-max-len 128
 
# 파편화 자동 정리 (Redis 4.0+)
activedefrag yes
active-defrag-ignore-bytes 100mb
active-defrag-threshold-lower 10    # 10% 파편화부터 시작
 
# 클라이언트 연결
maxclients 10000
tcp-keepalive 300
 
# 커널 설정 (OS 레벨)
# vm.overcommit_memory = 1          # fork() 메모리 할당 보장
# net.core.somaxconn = 511          # 연결 큐 크기
# transparent_hugepage = madvise    # THP 비활성화 (지연 방지)

관련 문서

  • Redis 기본 — 아키텍처, 자료구조, 사용 사례
  • Redis 영속성과 클러스터 — RDB/AOF 상세 설정, Cluster 구성
  • 캐시 설계 전략 — Cache Stampede 해결책 포함
on this page
  • 01성능 — 얼마나 낼 수 있나?
  • 단일 인스턴스 기준 처리량
  • 성능에 영향을 주는 요소
  • 응답 지연 목표치 (P99 기준)
  • 02메모리 — 얼마가 적절하고, 몇 % 이상이면 위험한가?
  • 메모리 사용률 임계값
  • 적정 메모리 용량 계산
  • maxmemory 설정
  • 메모리 파편화 관리
  • 03모니터링 — 어떤 지표를 봐야 하나
  • 핵심 지표
  • 주요 모니터링 항목과 알림 기준
  • Slow Log (느린 쿼리 로그)
  • 실시간 모니터링 (주의: 운영 환경에서 짧게만)
  • 04장애 유형별 대응
  • 1. 메모리 부족 (OOM / Eviction)
  • 2. 서버 다운 / 재시작
  • 3. 복제 지연 (Replica Lag)
  • 4. Master 장애 (Failover)
  • 5. Cache Stampede (캐시 폭풍)
  • 05운영 금지 명령어
  • 06하드웨어 권장 사항
  • CPU
  • 메모리
  • 스토리지 (RDB/AOF 저장 시)
  • 네트워크
  • 07설정 체크리스트
  • 08관련 문서

댓글 (0)