개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

Redis Persistence — 메모리 데이터를 디스크에 저장하는 방법

2026년 1월 27일
RedisPersistenceRDBAOF영속성

Redis는 메모리에 데이터를 저장합니다. 서버가 재시작되면 데이터가 사라집니다. 이를 방지하기 위해 Redis는 두 가지 영속성 메커니즘을 제공합니다.

RDB — 스냅샷

RDB(Redis Database)는 특정 시점의 메모리 데이터를 통째로 디스크에 저장합니다.

t=0  [데이터 A, B, C] → dump.rdb 저장
t=1  데이터 변경 (D 추가)
t=2  [데이터 A, B, C, D] → dump.rdb 저장

설정

# redis.conf
save 900 1     # 900초 안에 1개 이상 변경되면 저장
save 300 10    # 300초 안에 10개 이상 변경되면 저장
save 60 10000  # 60초 안에 10000개 이상 변경되면 저장

dbfilename dump.rdb
dir /var/lib/redis

수동 저장

# 동기 저장 (완료까지 Redis 블로킹)
SAVE

# 비동기 저장 (백그라운드에서 fork 후 저장)
BGSAVE

# 마지막 저장 시각 확인
LASTSAVE

fork: 부모 프로세스의 메모리를 복사해 자식 프로세스를 생성하는 OS 기능. RDB는 fork 후 자식이 파일에 쓰는 동안 부모는 계속 요청을 처리합니다.

장단점

장점:

  • 파일 하나로 백업과 복구가 간단
  • 재시작 시 로드 속도가 빠름
  • 운영 환경 메모리 스냅샷으로 활용 가능

단점:

  • 마지막 저장 이후 데이터는 서버 장애 시 유실됨
  • 데이터가 클수록 fork 시간이 길어지고 메모리를 두 배 사용

AOF — 로그 방식

AOF(Append Only File)는 Write 명령을 모두 로그 파일에 추가합니다. 재시작 시 로그를 재실행해 데이터를 복구합니다.

SET user:1 "철수"   → appendonly.aof에 기록
INCR counter       → appendonly.aof에 기록
DEL temp           → appendonly.aof에 기록

설정

# redis.conf
appendonly yes
appendfilename "appendonly.aof"

# 디스크 동기화 주기
appendfsync always    # 모든 명령마다 (가장 안전, 느림)
appendfsync everysec  # 초당 1회 (기본값, 최대 1초 데이터 유실 가능)
appendfsync no        # OS에 맡김 (빠름, 데이터 유실 위험)

fsync: OS 버퍼에 있는 데이터를 실제 디스크에 기록하도록 강제하는 시스템 호출. always는 모든 명령마다 fsync를 호출해 가장 안전하지만 I/O 부하가 큽니다.

AOF 재작성 (Rewrite)

시간이 지나면 AOF 파일이 커집니다. BGREWRITEAOF로 최소한의 명령 집합으로 압축할 수 있습니다.

# AOF 파일 재작성 (백그라운드)
BGREWRITEAOF

# 자동 재작성 설정
# redis.conf
auto-aof-rewrite-percentage 100   # 파일 크기가 2배가 되면
auto-aof-rewrite-min-size 64mb    # 64MB 이상일 때만

예시: INCR counter를 1000번 한 경우, AOF에는 1000줄이 쌓입니다. 재작성하면 SET counter 1000 1줄로 압축됩니다.

장단점

장점:

  • everysec 설정 시 최대 1초 치 데이터만 유실
  • always 설정 시 데이터 손실 없음

단점:

  • 파일 크기가 RDB보다 크게 늘어남
  • 재시작 시 전체 로그 재실행으로 로드 시간이 길 수 있음

RDB vs AOF 비교

항목RDBAOF
파일 크기작음큼
복구 속도빠름느림 (로그 재실행)
데이터 유실저장 주기만큼최대 1초 (everysec)
백업 편의성좋음 (파일 하나)복잡
쓰기 성능좋음약간 느림

두 방식 함께 사용

운영 환경에서는 RDB와 AOF를 함께 사용하는 것이 권장됩니다. 재시작 시 AOF를 우선 사용해 복구하고, RDB는 주기적 백업과 빠른 스냅샷 용도로 씁니다.

# redis.conf — 함께 사용
save 900 1
appendonly yes
appendfsync everysec

영속성이 필요 없는 경우

캐시 전용으로 쓰고 데이터 유실이 허용된다면 두 방식 모두 끌 수 있습니다. 메모리 사용을 최소화하고 쓰기 성능을 높입니다.

# redis.conf
save ""        # RDB 끄기
appendonly no  # AOF 끄기
← 이전 글Redis TTL — 키 만료와 자동 삭제
다음 글 →Redis 복제 — Master/Replica 구조와 읽기 분산