🔹 Redis 데이터 영속화 개요
Redis는 메모리 기반 데이터베이스지만, 데이터를 디스크에 저장하여 영속성(persistence) 을 유지할 수 있습니다.
이를 위해 두 가지 주요 방법을 제공합니다:
스냅숏 (Snapshot, RDB)
AOF (Append Only File)
🧩 1. 스냅숏 (Snapshot, RDB)
📘 개념
특정 시점의 데이터를 RDB 파일 형태로 저장하는 방식
Redis는 일정 주기로 데이터를 디스크에 덤프하여 백업본을 생성합니다.
⚙️ 주요 명령어
SAVE : 동기 방식으로 스냅숏을 생성
BGSAVE : 비동기 방식으로 스냅숏을 생성 (백그라운드에서 수행)
💾 특징
RDB 파일은 dump.rdb 형태로 저장
데이터 복원 시에는 이 파일을 읽어 메모리에 로드
⚠️ 주의사항
BGSAVE는 백그라운드 프로세스를 생성하므로 메모리 사용량이 일시적으로 증가할 수 있음
생성 시점 이후의 데이터 변경은 반영되지 않음 (즉, 주기적 백업)
✅ 장점
파일 크기가 작음
백업 및 복구 속도가 빠름
읽기 성능에 거의 영향이 없음
❌ 단점
문제 발생 시, 마지막 스냅숏 이후 변경된 데이터는 유실됨
🧩 2. AOF (Append Only File)
📘 개념
모든 쓰기(write) 연산을 순차적으로 로그 파일에 기록하는 방식
데이터 변경이 발생할 때마다 명령어를 파일에 추가로 기록 (append)
⚙️ 주요 설정
appendonly yes : AOF 기능 활성화
appendfilename : 파일 이름 지정
appendfsync : 디스크 쓰기 시점 설정
always : 매번 동기화 (가장 안전하지만 느림)
everysec : 1초마다 동기화 (기본값, 균형잡힌 옵션)
no : OS 버퍼에 맡김 (가장 빠르지만 위험)
💾 재작성(AOF Rewrite)
로그가 너무 커지면 Redis가 새 파일로 압축하여 재작성 (기존 로그를 요약)
관련 설정:
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size
✅ 장점
데이터 손실 가능성이 매우 낮음 (거의 실시간 백업)
지속적인 로그로 인한 높은 복원 신뢰도
❌ 단점
파일 크기가 커짐
디스크 I/O 부하가 증가
RDB보다 복구 시간이 길 수 있음
⚖️ 3. 스냅숏과 AOF 비교
구분 스냅숏 (RDB) AOF
저장 방식 특정 시점의 메모리 상태를 덤프 모든 명령을 순차 기록
복구 속도 빠름 느림
데이터 손실 가능성 높음 (주기적 백업) 낮음 (거의 실시간)
파일 크기 작음 큼
성능 영향 적음 많음
추천 사용처 주기적 백업, 읽기 위주 데이터 신뢰성 중시, 쓰기 빈번
💡 혼합 사용 가능
Redis는 RDB + AOF를 동시에 사용하여 안정성과 성능을 모두 확보할 수 있습니다.
🧮 4. RDB 파일 형식 (예시)
RDB 파일의 내부 구조는 다음과 같습니다:
$ hexdump -C dump.rdb
00000000 52 45 44 49 53 30 30 31 30 ... |REDIS0010...|
...
redis-check-rdb 명령을 사용하면 덤프 파일의 유효성을 검증할 수 있습니다.
🧮 5. 데이터 손실 및 삭제 패턴
Redis에서 데이터가 사라질 수 있는 원인:
명령어로 인한 삭제 (DEL, FLUSHALL, EXPIRE, UNLINK)
TTL 만료
메모리 초과 정책 (maxmemory-policy)
장애로 인한 복구 실패
복제(replication) 실패나 네트워크 단절
캐시 노드 고장
운영자 실수 (명령어 오입력)
🔧 6. 복구 및 점검 명령어
redis-check-rdb dump.rdb
redis-check-aof
BGSAVE, BGREWRITEAOF
appendonly, save, dir, dbfilename 등 설정 확인
📘 요약
항목 스냅숏(RDB) AOF
목적 주기적 백업 실시간 기록
데이터 손실 위험 있음 거의 없음
파일 크기 작음 큼
복구 속도 빠름 느림
성능 영향 적음 큼
대표 명령어 SAVE / BGSAVE BGREWRITEAOF / APPENDFSYNC
추천 환경 읽기 중심 서비스 쓰기 빈번 / 신뢰성 중시