데이터베이스

Redis RDB vs AOF 비교

Jinwookoh 2025. 3. 3. 22:45

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 파일을 생성합니다.

  1. 자동 저장 (save 설정)
    save 900 1   # 900초(15분)마다 변경된 키 1개 이상이면 저장
    save 300 10  # 300초(5분)마다 변경된 키 10개 이상이면 저장
    save 60 10000 # 60초마다 변경된 키 10,000개 이상이면 저장
    
  2. 수동 저장
    • BGSAVE: 백그라운드 저장 (메인 프로세스 영향 적음)
    • SAVE: 동기적 저장 (실행 중인 Redis가 멈출 수 있음)

2. AOF (Append-Only File)

AOF는 모든 쓰기(write) 연산을 순차적으로 로그 파일(appendonly.aof)에 기록하는 방식으로, 장애 발생 시에도 마지막 상태를 복구할 수 있습니다.

📌 AOF의 특징

모든 변경 사항 저장: RDB보다 데이터 유실 가능성이 낮음
텍스트 기반 명령어 저장 (사람이 읽고 편집 가능)
세밀한 데이터 복구 가능 (fsync 설정으로 조정 가능)
파일 크기가 큼 (모든 연산을 기록하므로 RDB보다 용량이 많음)
쓰기 성능에 영향 (RDB보다 더 빈번한 디스크 쓰기가 발생)

📌 AOF 저장 방식

AOF는 변경 사항을 디스크에 저장하는 빈도를 조정할 수 있습니다.

  1. appendfsync always: 매 요청마다 저장 (가장 안전하지만 느림)
  2. appendfsync everysec: 1초마다 저장 (안정성과 성능의 균형)
  3. 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는 데이터 영속성 보장에 적합합니다! 🔥