Redis는 데이터를 디스크에 저장하는 영속성(Persistence) 메커니즘으로 RDB (Redis Database)와 AOF (Append-Only File) 두 가지 방식을 제공합니다.
1. RDB (Redis Database)
RDB는 특정 시점(Snapshot)에서 전체 데이터를 저장하는 방식으로, 일정 주기마다 Redis의 데이터를 바이너리 파일(dump.rdb) 형태로 디스크에 저장합니다.
📌 RDB의 특징
✅ 스냅샷(Snapshot) 방식: 일정 시간마다 데이터를 파일로 저장
✅ 바이너리 형식으로 저장: 디스크 공간을 적게 사용하며, 복구가 빠름
✅ 저장 파일 (dump.rdb) 단 하나만 존재 → 파일 관리가 간편
✅ 성능에 미치는 영향이 적음 (저장 시점 외에는 Redis가 평소처럼 동작)
❌ 최근 데이터 손실 가능성 (스냅샷 주기 사이에 장애 발생 시, 마지막 저장 이후 데이터 유실)
❌ 빈번한 저장 설정 시 성능 저하 가능 (특히 대량 데이터를 처리하는 경우)
📌 RDB 저장 방식
Redis는 특정 이벤트 발생 시 RDB 파일을 생성합니다.
- 자동 저장 (save 설정)
save 900 1 # 900초(15분)마다 변경된 키 1개 이상이면 저장 save 300 10 # 300초(5분)마다 변경된 키 10개 이상이면 저장 save 60 10000 # 60초마다 변경된 키 10,000개 이상이면 저장
- 수동 저장
- BGSAVE: 백그라운드 저장 (메인 프로세스 영향 적음)
- SAVE: 동기적 저장 (실행 중인 Redis가 멈출 수 있음)
2. AOF (Append-Only File)
AOF는 모든 쓰기(write) 연산을 순차적으로 로그 파일(appendonly.aof)에 기록하는 방식으로, 장애 발생 시에도 마지막 상태를 복구할 수 있습니다.
📌 AOF의 특징
✅ 모든 변경 사항 저장: RDB보다 데이터 유실 가능성이 낮음
✅ 텍스트 기반 명령어 저장 (사람이 읽고 편집 가능)
✅ 세밀한 데이터 복구 가능 (fsync 설정으로 조정 가능)
❌ 파일 크기가 큼 (모든 연산을 기록하므로 RDB보다 용량이 많음)
❌ 쓰기 성능에 영향 (RDB보다 더 빈번한 디스크 쓰기가 발생)
📌 AOF 저장 방식
AOF는 변경 사항을 디스크에 저장하는 빈도를 조정할 수 있습니다.
- appendfsync always: 매 요청마다 저장 (가장 안전하지만 느림)
- appendfsync everysec: 1초마다 저장 (안정성과 성능의 균형)
- appendfsync no: OS가 자동으로 처리하도록 위임 (가장 빠르지만 데이터 손실 가능성 있음)
📌 AOF 파일 재작성 (Rewrite)
AOF는 시간이 지나면서 커질 수 있기 때문에, Redis는 기존 파일을 최적화하여 크기를 줄이는 AOF Rewrite 기법을 제공합니다.
- 명령어 중복 제거 (SET A 1, SET A 2, SET A 3 → SET A 3 만 남김)
- Redis가 BGREWRITEAOF 명령어를 실행하여 백그라운드에서 자동으로 최적화
3. RDB vs AOF 비교표
비교 항목 | RDB (Redis Database) | AOF (Append-Only File) |
저장 방식 | 전체 스냅샷 저장 | 모든 변경 사항 로그 기록 |
파일명 | dump.rdb | appendonly.aof |
데이터 유실 가능성 | 있음 (최근 변경 사항은 저장 주기 사이에 유실) | 거의 없음 (최대 1초 이내 손실) |
복구 속도 | 빠름 (단일 바이너리 파일) | 느림 (로그를 모두 재실행해야 함) |
성능 영향 | 낮음 (백그라운드에서 실행) | 높음 (잦은 디스크 쓰기) |
파일 크기 | 작음 | 큼 (모든 변경 기록 저장) |
읽기 가능 여부 | 바이너리 포맷 (읽기 어려움) | 명령어 기반 (읽기 및 수정 가능) |
적합한 경우 | 빠른 재시작이 필요한 경우 (예: 캐시 시스템) | 데이터 보존이 중요한 경우 (예: 금융 시스템) |
4. RDB vs AOF 선택 기준
✅ RDB를 사용해야 하는 경우
- 빠른 복구가 중요할 때 (예: Redis를 캐시 시스템으로 사용)
- 성능이 중요한 대규모 데이터 처리 (백업 주기를 길게 설정 가능)
- 디스크 사용량을 최소화하고 싶을 때
✅ AOF를 사용해야 하는 경우
- 데이터 영속성(안전성)이 중요할 때 (예: 금융, 주문 데이터 저장)
- 실시간 데이터 변경이 많을 때 (1초 단위로 데이터 손실을 방지하고 싶을 때)
- 사람이 읽을 수 있는 로그 기록이 필요할 때
✅ RDB + AOF 함께 사용하기
Redis는 RDB와 AOF를 동시에 활성화할 수도 있음
- 기본 설정: RDB + AOF 동시 사용
- RDB는 빠른 복구, AOF는 데이터 유실 최소화 역할을 함
appendonly yes # AOF 활성화
save 900 1 # RDB 백업 주기 설정 (900초마다 변경된 키 1개 이상이면 저장)
5. 결론
- 빠른 시작 & 낮은 리소스 사용이 필요하면 → RDB
- 데이터 보존이 중요하고 장애 시 손실을 최소화하려면 → AOF
- 안정성과 성능을 균형 있게 유지하려면 → RDB + AOF 함께 사용
🚀 즉, RDB는 성능 최적화에 적합하고, AOF는 데이터 영속성 보장에 적합합니다! 🔥
'데이터베이스' 카테고리의 다른 글
PostgreSQL 데이터 타입 정리 (0) | 2025.03.13 |
---|---|
Redis TTL (Time-To-Live) 이란? (0) | 2025.03.03 |
LRU (Least Recently Used)와 LFU (Least Frequently Used) 알고리즘 (0) | 2025.03.03 |
Redis Pipelining이란? (1) | 2025.03.03 |
Redis Pub/Sub vs Kafka 비교 (0) | 2025.03.03 |