ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [공식 문서 훑어보기] 5. Redis Persistence RDB? AOF? 장단점 알아보기
    Redis 2025. 5. 5. 13:42
    728x90
    반응형

    Redis Persistence 란?

    Redis Persistence는 쉽게 말해 SSD와 같은 곳에 데이터를 기록하는 것을 말하며 이는 복구 작업에 사용하게 됩니다.

    • RDB (Redis Database)
      • RDB 방식은 현재 메모리 상태를 특정 시점에 그대로 하나의 파일로 저장하는 방식입니다.
      • 이 파일은 .rdb 확장자를 가지며, 백업이나 복구에 사용됩니다.
    • AOF (Append Only File)
      • Redis가 수신한 모든 쓰기 명령어를 순서대로 파일에 기록하는 방식입니다.
      • 서버가 꺼져도 이 파일을 재생(replay)해서 데이터를 복구할 수 있습니다.

    ⭐ RDB (Redis Database) 장점

    1. 복구에 적합한 단일 파일

    RDB는 Redis 데이터 전체를 특정 시점에 1개의 파일로 저장하는 방식 입니다.

    예를 들어 지정된 시간 단위로 저장하며, 쓰기작업이 N건 이상 있을때 저장하는 등 다양하게 설정할 수 있습니다.

    2. 복구 작업에 적합

    RDB 파일의 경우 크기가 작은 단일 파일이기 때문에 외부에 저장소에 업로드 하기가 쉽습니다.

    이때 파일을 암호화 하게 되면 보안성도 확보 할 수 있게 됩니다.

    3. Redis 성능에 미치는 영향 최소화

    RDB 파일 생성은 Redis Main Process가 fork()를 통해 Sub Process를 생성하여 독립적으로 Disk I/O 작업을 수행하기 때문에 Main Process의 성능에 영향을 최소화 할 수 있습니다.

    4. 대용량 데이터 복구에 적합

    AOF보다 파일 크기가 작고 읽기 속도도 빨라서 복구가 빠르기 때문에 서버 재 시작 시 데이터를 빠르게 복구 할 수 있습니다.

    5. 부분 재동기화 지원

    Redis 복제(replication) 환경에서 장애 복구 시 전체 데이터를 재복사하지 않고, 변경된 일부만 반영할 수 있습니다.

    ❌ RDB (Redis Database) 단점

    1. 데이터 유실 가능성

    RDB 방식의 경우 설정된 시점에만 데이터를 저장하기 때문에 Redis가 비정상적으로 종료되면 설정된 시점부터 종료된 시점까지의 데이터를 유실될 수 있기 때문에 실시간 성이 중요한 경우에는 RDB 방식만으로는 부족할 수 있습니다.

    2. fork()로 인한 성능 저하

    특정 시점마다 디스크에 저장하기 위해서 자주 fork()를 자주 실행해야 하는데 데이터 용량이 크다면 fork() 하는 시점에서 시간이 많이 소요 될 수 있으며 만약 CPU 성능이 좋지 않은 경우 짧은 시간이지 서버가 중단될 수 있습니다.

    • AOF 방식도 fork()는 하지만 RDB 방식에 비해 빈도가 낮으며 내구성에 대한 타협 없이 로그를 다시 작성하는 빈도를 조정 할 수 있습니다.

    ⭐ AOF (Append Only File) 장점

    1. 데이터 보존성이 높음

    AOF의 경우 데이터를 명령어 단위로 계속 기록하는 방식이므로 데이터 손실 가능성이 낮습니다.

    • always : 모든 명령어마다 디스크에 기록 (안전하지만 속도가 느림)
    • everysec : 1초 마다 디스크에 기록 (실무에 주로 사용 / 기본값)
    • no : OS에게 맡겨서 기록 (30초)

    AOF의 경우 Background thread를 통해 실행되며 정책을 비활성화한 경우 Main thread가 쓰기 작업을 시도하므로 1초 분량의 쓰기만 손실될 뿐 입니다.

    2. 손상 복구가 쉬움

    AOF 파일이 손상된 경우에도 redis-check-aof 도구로 쉽게 복구할 수 있습니다.

    3. 자동 최적화

    만약 AOF 파일이 너무 커지게 되면 Redis는 자동으로 Background에서 필요한 명령어만 골라 재작성(최적화)을 진행합니다.

    이때 기존 AOF에는 계속해서 명령이 추가되며 새로운 최적화된 AOF 파일이 완성되면 안전하게 교체하게 됩니다.

    4. 이해하기 쉬운 형식

    사람이 읽을 수 있는 Redis 명령어 형식이기 때문에 분석이나 수정도 가능합니다.

    ❌ AOF (Append Only File) 단점

    1. RDB 보다 파일이 큼

    동일한 데이터 크기인 경우 AOF는 반복적인 명령어도 그대로 저장되기 때문에 RDB보다 무거워집니다.

    2. 정책에 따른 성능 저하

    AOF 정책에 따라 RDB 보다 느려질 수 있습니다.

    기본적으로 everysec 인 경우 성능이 좋지만 여전히 RDB에 비해 최대 지연 시간은 높을 수 있습니다.

    특히 쓰기 부하가 높은 경우 RDB에 비해 느릴 수 있습니다.

    3. 재작성 중 메모리 사용량 증가

    AOF 재작성 시 Redis 7 미만에서는 새 명령어들이 메모리에 버퍼링 되고 나중에 한번에 디스크에 기록되는데 이로 인해 메모리 사용량이 증가할 수 있습니다.

    4. 중복되는 기록

    AOF 재작성 시 기존 AOF와 신규 AOF 모두에 기록되므로 작업이 중복됩니다.

    5. 재작성 완료 시 일시 중지 가능성

    Redis는 재작성이 끝날 때 새로운 AOF 파일에 대한 쓰기 명령의 쓰기 및 fsyncing을 중단할 수 있습니다.

    728x90
    반응형
Designed by Tistory.