Redis에서 데이터를 영구 저장하는 방법으로 AOF(Append-Only File)과 RDB(Redis Database Snapshot) 두 가지 옵션이 있습니다. 운영 환경에서는 보통 두 가지를 함께 설정하지만, 많은 개발자들이 다음과 같은 의문을 가질 수 있습니다.
"AOF가 데이터를 실시간으로 기록하는데, RDB 설정이 의미가 있을까?" "어차피 AOF가 복구 우선순위를 가지는데, RDB는 필요 없는 것이 아닐까?"
그러나 실제 운영 환경에서는 RDB도 반드시 필요합니다. 그 이유를 살펴보겠습니다.
1. AOF 파일이 손상될 수 있다
AOF는 모든 변경 사항을 기록하지만, 파일 손상 위험이 있습니다. 디스크 오류, 운영 중 장애, 잘못된 파일 이동 등으로 인해 AOF 파일이 깨지면 복구가 어려울 수 있습니다.
redis-server --appendonly yes
Redis를 다시 시작할 때 AOF 파일이 손상되어 있다면 데이터 복원이 불가능할 수도 있습니다. 이런 경우 RDB 백업이 있으면 최소한의 데이터라도 복구할 수 있습니다.
✅ AOF만 사용하다가 파일이 손상되면? 데이터 손실 위험 증가
✅ RDB가 있으면? 최소한의 데이터라도 복구 가능
2. AOF 복구 속도가 느리다
AOF는 모든 변경 사항을 하나씩 다시 실행하면서 복구해야 합니다. 데이터가 많을수록 Redis 재시작 시 복구 시간이 오래 걸릴 수 있습니다.
예를 들어, AOF 파일이 2GB라면 Redis는 수백만 개의 SET 명령을 실행해야 합니다. 반면, RDB는 단순히 덤프 파일을 로드하는 방식이므로 훨씬 빠르게 복구할 수 있습니다.
✅ AOF만 사용하면? 복구 시간이 길어질 위험이 있음
✅ RDB를 함께 사용하면? 빠른 복구 가능
3. RDB는 백업 및 서버 마이그레이션에 유리하다
운영 환경에서 데이터 백업 시 AOF는 파일 크기가 크고 로그 형식이라 활용이 어렵습니다. 반면, RDB는 파일 크기가 작고 특정 시점의 데이터를 그대로 보존할 수 있어 백업이 훨씬 쉽습니다.
✔ RDB를 활용한 백업 예시:
cp /var/lib/redis/dump.rdb /backup/dump-2025-02-17.rdb
✔ 다른 서버로 데이터 이전 예시:
scp /var/lib/redis/dump.rdb new-server:/var/lib/redis/
✅ AOF는 데이터가 많을수록 백업이 어려움
✅ RDB는 특정 시점의 데이터를 빠르게 백업하고 복원하는 데 유리함
4. 디스크 I/O 부담을 줄일 수 있다
AOF는 모든 변경 사항을 디스크에 기록해야 하므로, 디스크 I/O 부담이 큽니다. 반면, RDB는 정해진 주기마다 한 번만 저장하므로 디스크 부하가 적습니다.
✅ AOF만 사용하면? 디스크 부하 증가 가능성
✅ RDB와 병행하면? 성능 최적화 가능
5. 운영 환경에서 추천하는 RDB + AOF 설정
운영 환경에서는 다음과 같은 설정을 추천합니다.
# RDB 스냅샷 설정 (조건을 만족할 경우, 데이터를 디스크에 저장)
# save <seconds> <changes> [<seconds> <changes> ...]
save 900 1 300 10 60 10000
# 900초(15분) 동안 1개 이상 의 키 변경 시 혹은 300초(5분) 동안 10개 이상의 키 변경 시 혹은 60초(1분) 동안 10,000개 이상의 키 변경 시 저장
# AOF 활성화
appendonly yes
appendfsync everysec # 매 초마다 디스크에 기록하여 성능과 안정성 균형 유지
# AOF 파일 크기 자동 최적화 (리라이트)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
🔍 여러 개의 save
조건은 어떻게 평가될까?
Redis에서는 모든 save
조건이 OR 조건으로 동작합니다. 즉, 어느 하나의 조건만 만족해도 스냅샷이 저장됩니다.
✔ 예시 1: save 900 1
과 save 60 10000
이 설정된 경우 - 900초 동안 1개 이상의 키 변경이 발생하거나 - 60초 동안 10,000개 이상의 키 변경이 발생하면 - RDB 스냅샷이 저장됩니다.
✔ 예시 2: save 300 10
조건이 추가된 경우 - 300초 동안 10개 이상의 키 변경이 발생하거나 - 900초 동안 1개 이상의 변경이 발생하거나 - 60초 동안 10,000개 이상의 변경이 발생하면 - RDB 스냅샷이 저장됩니다.
✅ 모든 save
옵션은 OR 조건으로 평가됨
✅ 하나라도 만족하면 즉시 RDB가 저장됨
결론: AOF가 있어도 RDB는 반드시 필요하다
✅ AOF만으로는 데이터 보호가 완벽하지 않음
✅ AOF가 손상될 경우 RDB가 최후의 백업 역할을 함
✅ AOF 복구 속도가 느려질 수 있으므로 RDB를 활용하면 빠르게 복구 가능
✅ RDB는 백업 및 서버 마이그레이션에 유리함
✅ 디스크 I/O 부담을 줄이고 성능을 최적화할 수 있음
✅ save
설정은 OR 조건으로 동작하여 하나라도 충족되면 RDB가 저장됨
따라서, 운영 환경에서는 RDB + AOF를 함께 설정하는 것이 가장 안전하고 최적의 방법입니다.
우측의 검색창을 통해 `Redis`를 검색해보세요! Redis와 관련된 다른 포스트들이 준비되어 있습니다.
AOF Rewrite 기능에 대한 분석 내용이 담긴 이전 글도 확인해 보세요.
Add a New Comment