개요
Redis는 인메모리 데이터 저장소로 서버가 내려가면 데이터가 소실된다는 단점을 가지고 있습니다.
이를 극복하기 위해 Redis는 데이터를 복구할 수 있는 AOF 방식과 RDB 방식을 지원합니다.
이번에는 RDB 방식에 대해 공부한 내용을 정리해보겠습니다.
RDB
특징
RDB는 특정 시점에 스냅샷을 찍어 저장하는 방식입니다.
설정 파일을 통해서 자동으로 저장하게 할 수 있고 SAVE, BGSAVE 명령어를 사용하여 수동으로 저장할 수 있습니다.
RDB로 생성된 스냅샷은 dump.rdb 이름으로 생성됩니다. (설정 파일에서 이름을 바꿀 수 있습니다.)
AOF와 RDB를 사용하면 AOF를 먼저 실행되고 AOF 파일이 없으면 RDB를 찾아 실행합니다.
AOF 파일이 손상되거나 문제가 발생한 경우 RDB를 백업으로 사용할 수 있으므로, 두 방법을 사용하면 데이터의 안정성과 내구성이 크게 향상됩니다.
장점
빠른 데이터 로드
RDB 스냅샷을 사용하면 Redis 서버를 재시작할 때 빠르게 데이터를 로드할 수 있습니다. (AOF 보다 빠릅니다.)
백업
RDB 파일은 특정 시점의 데이터 스냅샷으로 이를 다른 위치에 복사해 백업으로 사용하기 쉽습니다.
메모리
RDB 파일이 AOF 보다 파일 크기가 적습니다. AOF는 모든 쓰기 작업을 순차적으로 작업하지만 RDB는 현재 데이터 상태만 디스크에 저장합니다.
단점
데이터 손실
RDB는 주기적으로 스냅샷을 생성하므로 마지막 스냅샷 이후의 데이터는 잃어버릴 위험이 있습니다.
설정
Redis의 설정 파일을 통해 RDB를 설정할 수 있습니다.
window의 경우 redis-windows-service.conf 파일에서 설정할 수 있습니다.
설정을 만족하면 자동으로 RDB의 스냅샷을 생성합니다.
이름 설정
dbfilename [이름]
dbfilename dump.rdb
경로 설정
dir [경로]
dir ./
RDB 조건 설정
save [시간] [변경 횟수]
save 900 1
save 300 10
save 60 10000
위의 3개의 명령어들은 기본적으로 설정되어 있습니다.
save 시간 변경 횟수 형태입니다.
예를 들어, save 900 1 명령어의 의미는 900초 (15분) 동안 1번의 변경이 있을 경우 스냅샷 생성 을 뜻 합니다.
save로는 여러 개의 조건을 설정할 수 있고 조건 중 하나라도 맞아 떨어지면 스냅샷이 생성됩니다.
만약 RDB를 사용하고 싶지 않다면 save 기능들을 전부 삭제하거나 주석 처리 하면 됩니다.
수동 생성
설정을 통해 자동으로 생성할 수 있지만 명령어를 이용하면 RDB의 스냅샷을 수동으로 생성할 수 있습니다.
RDB의 스냅샷 수동 생성은 SAVE와 BGSAVE, 두 가지 방식이 있습니다.
SAVE
메인 Redis 프로세스에서 동기적으로 스냅샷을 생성합니다.
Redis 를 잠시 멈추고 .rdb 파일을 생성하는 방식입니다.
따라서 큰 데이터셋에 대해서는 작업이 오래 걸릴 수 있고 그 동안 Redis가 응답하지 않을 수 있습니다.
redis-cli 에서 save 명령어로 실행할 수 있습니다.
SAVE
BGSAVE
백그라운드에서 비동기적으로 스냅샷을 생성합니다.
BGSAVE는 자식 프로세스를 생성하여 스냅샷을 수행하고 메인 Redis 프로세스는 일반 작업을 계속 처리합니다.
자식 프로세스를 생성하므로 메모리가 많이 드는 작업입니다.
redis-cli 에서 bgsave 명령어로 실행할 수 있습니다.
BGSAVE
일반적으로 BGSAVE가 SAVE 보다 더 선호된다고 합니다. BGSAVE 가 Redis에 메인 작업 흐름에 영향을 주지 않기 때문입니다.
마무리
이번에는 AOF에 이어 Redis 데이터 복구 방법인 RDB 방법을 공부하여 정리했습니다.
두 가지 방식을 잘 사용하고 프로젝트의 주어진 환경에 따라 정밀 설정을 하면 안정적으로 프로젝트를 운영할 수 있는걸 배웠습니다.
감사합니다.