Redis 백업 및 영속화 전략 #
Redis는 기본적으로 메모리 기반 데이터 저장소입니다. 이는 빠른 속도의 장점이 있지만, 서버가 리부팅되거나 장애가 발생하면 메모리 데이터가 사라지는 특성이 있습니다. 이를 해결하기 위해 Redis는 디스크에 데이터를 저장하는 영속화(Persistence) 기능을 제공합니다.
📌 왜 Redis 백업이 필요한가? #
Redis는 기본적으로 인메모리에 데이터를 저장합니다.
즉, 프로세스가 종료되거나 서버가 재부팅될 경우 메모리 데이터가 사라집니다.
이를 방지하기 위해 디스크에 데이터를 백업해야 하며, Redis는 2가지 주요 백업 방식을 지원합니다.
- RDB (Snapshot) 방식
- AOF (Append Only File) 방식
🧠 1. RDB (Snapshot) 방식 #
📌 개념 #
RDB는 특정 시점의 메모리 상태를 스냅샷 형태로 저장하는 방식입니다.
이 스냅샷은 .rdb 확장자의 파일(dump.rdb)로 저장되며, Redis 부팅 시 해당 파일을 읽어 데이터를 복원합니다.
📌 동작 원리 #
redis.conf 파일의 save 옵션을 통해 주기적인 스냅샷 저장 조건을 정의합니다.
예를 들어:
save 60 10– 60초 동안 10개 이상의 키 변경이 발생하면 snapshot 저장합니다. 여러 조건이 있을 경우 조건 중 하나라도 만족하면 저장됩니다.
📌 예시 설정 #
save 3600 1
save 300 100
save 60 10000이는 세 조건 중 하나라도 만족되면 스냅샷이 실행됩니다.
📌 특징 – 장점 & 단점 #
| 장점 | 단점 |
|---|---|
| ✨ 작은 파일로 관리가 쉬움 | ⚠ 스냅샷 사이 데이터 유실 가능 |
| ✨ 빠른 복구 가능 | ⚠ fork 기반이라 리소스 소모 |
🧠 2. AOF (Append Only File) 방식 #
📌 개념 #
AOF는 모든 쓰기 명령어(SET, DEL 등)를 로그 형태로 저장하는 방식입니다.
Redis 재부팅 시 이 로그를 순차적으로 재실행하여 데이터를 복원합니다.
📌 동작 원리 #
Redis는 쓰기 명령 실행 시마다 로그 파일(appendonly.aof)에 명령을 기록하며,
로그 파일은 텍스트 형식이므로 사람이 직접 읽거나 수정할 수 있습니다.
📍 AOF Rewrite (압축) #
AOF 파일은 계속 기록되므로 파일 크기가 커지는 경향이 있습니다.
이때 Rewrite 기능을 사용하면 불필요한 명령을 제거하여 파일 크기를 줄일 수 있습니다.
예를 들어 같은 키에 대해 SET 명령이 100회 실행되었을 때, 마지막 값만 기록하면 충분하므로 Rewrite는 파일을 최적화합니다.
📊 RDB vs AOF – 비교 #
| 항목 | RDB | AOF |
|---|---|---|
| 저장 방식 | 스냅샷 시점 저장 | 모든 쓰기 명령 저장 |
| 복구 시점 | 가장 최근 스냅샷 | 전체 로그 재실행 |
| 파일 크기 | 작음 | 상대적으로 큼 |
| 복구 성능 | 빠름 | 느림 (로그 재실행) |
| 데이터 완전성 | 일부 유실 가능 | 대부분 보장 |
🧩 실습 예시 (Docker) #
RDB 기반 백업 #
1docker run \
2 -v $(pwd)/redis.conf:/redis.conf \
3 --name redis-rdb \
4 redis redis-server /redis.confRedis에 데이터 입력 후 RDB 조건 만족 여부를 확인해 보세요.
AOF 기반 백업 #
redis.conf에서 다음 설정 활성화:
appendonly yes이후 컨테이너를 실행하면 AOF 로그로 백업이 수행됩니다.
🧠 참고 – 운영 환경 전략 #
운영 환경에서는 RDB와 AOF를 조합하여 사용하는 것이 일반적입니다. – RDB로 주기적인 전체 스냅샷 저장 – AOF로 세부 로그 저장 및 복원 안정성 확보
📌 마무리 #
Redis 백업은 단순히 데이터를 디스크에 저장하는 것이 아니라, 데이터 유실을 최소화하고 필요한 복구 전략을 갖추는 작업입니다.
✔ RDB: 빠른 백업 & 빠른 복구 ✔ AOF: 높은 데이터 완전성
필요하다면 두 방식을 동시 적용하여 안정성과 성능 두 가지 모두 확보하는 것이 좋습니다.