Redis 의 백업
레디스는 휘발성 저장소이기 때문에 데이터를 안전하게 보관하려면 디스크에 데이터를 백업해야 한다.
레디스에서 디스크에 백업하는 방식을 두 가지를 제공한다. RDB 방식과 AOF 방식이다.
1. RDB
RDB는 Redis Database File 약자로, 특정 시점의 데이터를 덤프 파일로 저장하는 방식이다. 재시작 시 덤프 파일로부터 데이터를 복구한다.

RDB 방식의 장점으로는
- 빠른 복구가 가능하다.
- 특정 시점의 메모리의 데이터를 저장하기 때문에 파일 사이즈가 작다.(바이너리 데이터의 형식으로)
단점으로는
- 스냅샷을 저장하는 시점 사이의 데이터 변경 사항은 유실이 있을 수 있다.
- fork 를 이용하기 때문에 시간이 오래 걸리고, CPU 와 메모리 자원을 많이 소모한다
2. RDB에 대한 설정값
우선 설정 파일이 없으면 기본적으로 RDB 방식이 활성화되어 있다.
save 설정
- 특정 주기 동안 특정 조건이 발생한다면 스냅샷을 남긴다.
- 예시) save 3600 1: 1시간(3600) 동안 데이터가 1번 이상 변경되는 경우 스냅샷을 생성한다.
- 이를 비활성하고 싶은 경우 save "" 으로 설정하여 RDB 스냅샷 기능을 비활성화 할 수 있다.
그 외의 설정들은
https://raw.githubusercontent.com/redis/redis/unstable/redis.conf
에서 확인할 수 있다.
3. RDB 저장 시점
RDB 저장 방식에는 SAVE 와 BGSAVE 방식이 존재한다.
SAVE는 레디스의 동작을 정지시키고 스냅샷을 디스크에 저장한다. (blocking 방식)
- 메인 프로세스만 사용하므로 별도의 자식의 프로세스 관리가 필요 없다. -> 추가적인 메모리 를 사용하지 않는다.
- 스냅샷을 디스크에 저장하는 동안 레디스는 다른 요청을 처리하지 못해 서비스 중단이 발생할 수 있다. -> 실시간 시스템이 적합하지 않다.
동작 순서는
1) 주 프로세스가 데이터를 새로운 RDB 파일에 저장한다.
2) 모든 데이터 쓰기가 끝나면 기준 RDB 파일을 삭제하고 새로운 RDB 파일을 교체한다.
BGSAVE는 백그라운드 SAVE라는 의미로, 별도의 자식 프로세스를 만들어 레디스 동작의 중단 없이 스냅샷을 디스크에 저장한다. (non-blocking)
- 자식 프로세스가 백업을 수행하므로 메인 프로세스는 요청을 처리할 수 있어 서비스 중단 없이 백업이 가능하다. -> 실시간 시스템에 적합하다.
- 자식프로세스를 생성하여 처리하기 때문에 그 만큼의 리소스(메모리) 사용량이 증가한다.
동작 순서는
1) 자식 프로세스를 생성하기 위해 fork()를 호출하여 프로세스를 복제한다.
2) 새로 생성된 프로세스에서 데이터를 새로운 RDB 임시 파일에 작성한다.
3) 모든 데이터 쓰기가 끝나면 기존 RDB 파일을 삭제하고, 새 임시 파일의 이름을 RDB 파일로 변경하여 교체한다.
4. AOF
AOF 는 Append Only File 약자로, 모든 쓰기 연산을 순차적으로 파일엑에 기록하는 방식이다. 재시작 시 AOF에 기록된 모든 연산을 재수행하여 데이터를 복구한다.

AOF 방식의 장점으로는
- 모든 변경사항을 기록하기 때문에 안정적으로 데이터를 백업할 수 있다.
- append-only 방식이므로 백업 파일이 손상될 위험이 적다.
- 실제 수행된 명령어가 저장되어 있으므로 개발자가 보고 이해할 수 있고 수정도 가능하다.
단점으로는
- 모든 히스토리가 저장되기 때문에 RDB 파일 사이즈가 크다.
- RDB 방식 대비 백업과 복구 속도가 느리다.
5. AOF에 대한 설정값
설정 파일로 보면 기본적으로는 RDB 방식이 활성화되어 있다.
AOF 방식을 사용하려면 appendonly yes로 설정해야 한다.
참고자료
https://minnseong.tistory.com/50