Redis에서 데이터를 영구 저장하는 방법으로 AOF(Append-Only File)RDB(Redis Database Snapshot) 두 가지 옵션이 있습니다. 운영 환경에서는 보통 두 가지를 함께 설정하지만, 많은 개발자들이 다음과 같은 의문을 가질 수 있습니다.

"AOF가 데이터를 실시간으로 기록하는데, RDB 설정이 의미가 있을까?" "어차피 AOF가 복구 우선순위를 가지는데, RDB는 필요 없는 것이 아닐까?"

그러나 실제 운영 환경에서는 RDB도 반드시 필요합니다. 그 이유를 살펴보겠습니다.

Redis RDB vs AOF Infographic


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 1save 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 기능에 대한 분석 내용이 담긴 이전 글도 확인해 보세요.

Redis AOF Rewrite: 성능 최적화와 데이터 보존