Redis는 In-memory DB로, 메모리에 데이터를 저장해 매우 빠른 속도로 처리할 수 있다는 것이 큰 장점이다.
이로 인해 Redis를 영속성이 없는 휘발성 데이터베이스로 착각할 수 있지만, Redis는 데이터를 디스크에 저장하여 영구적으로 보존할 수 있는 강력한 메커니즘도 제공한다.
💡 이러한 영속성 덕분에 서버가 종료되거나 재시작되어도 데이터 유실 없이 다시 복구할 수 있는 능력을 갖추고 있다.
Redis의 영속성 기능은 매우 유용하지만, 이로 인해 발생할 수 있는 문제도 존재한다.
Redis를 단순 캐시 용도로만 사용한다면 데이터를 디스크에 저장할 필요가 없지만, 중요한 데이터를 저장하는 경우라면 영속성 기능을 적극적으로 활용해야 한다.
Redis는 두 가지 방식으로 데이터를 디스크에 저장할 수 있다: RDB 와 AOF
Redis의 메모리 데이터를 일정 간격마다 스냅샷 형태로 디스크에 저장하는 방식이다.
이 방식은 Redis 서버가 장애가 발생했을 때 해당 스냅샷을 사용해 특정 시점의 상태로 복구할 수 있게 해준다.
RDB는 RDBMS가 아니라 단순 메모리 스냅샷을 파일 형태로 저장할 때 쓰는 파일의 확장자명이다.
❗️ 세팅을 안해도 Redis는 자동으로 .rdb라는 확장자의 파일에 인메모리 데이터를 저장하도록 디폴트로 설정되어있다.
Redis에서 실행된 모든 변경 명령어(write, update)를 순차적으로 파일에 기록하는 방식이다.
이를 통해 장애 발생 시 로그 파일을 재실행해 최신 상태까지 데이터를 복구할 수 있다.
Redis에서 RDB와 AOF를 선택하는 데는 시스템 요구 사항에 따른 몇 가지 기준이 있다
데이터 손실이 전혀 허용되지 않는다면 AOF가 적합하다.
일정 부분 손실을 감수할 수 있다면 RDB만으로 충분할 수 있다.
빠른 복구 속도가 중요하다면 RDB가 적합하다. AOF는 모든 명령어를 다시 실행해야 하기 때문에 복구 시간이 오래 걸릴 수 있다.
AOF는 로그 파일 크기가 커질 수 있기 때문에 저장 공간이 제한적이라면 RDB가 더 효율적일 수 있다.
Redis는 RDB와 AOF의 장점을 조합하여 사용할 수 있다.
예를 들어, 주기적으로 RDB 스냅샷을 생성하고, 그 사이의 변경 사항은 AOF에 기록하는 방식으로 데이터를 관리할 수 있다.
❗️ 이 혼합 방식은 RDB의 빠른 복구 속도와 AOF의 데이터 무결성을 동시에 확보하는 좋은 방법이다.
Redis의 영속성 기능은 메모리 기반 DB의 단점을 보완해주며, 이를 통해 Redis는 단순한 캐시를 넘어 중요한 데이터 저장소로 활용될 수 있다.
각 방식이 가진 장단점을 잘 이해하고 시스템의 요구에 맞는 방식을 선택하는 것이 중요하다. 특히 RDB와 AOF를 혼합하여 사용하면 성능과 데이터 보존이라는 두 가지 요구를 모두 충족시킬 수 있는 최적의 솔루션을 만들 수 있다.