영속화 (Persistence)¶
개요¶
Redis는 기본적으로 데이터를 메모리에 두고 동작해요. 그런데 메모리만으로는 서버가 재시작되면 데이터가 사라질 위험이 있어요. 영속화(persistence)는 데이터를 디스크(SSD 같은 내구성 저장소)에 써서 이 위험을 줄이는 방법이에요. Redis는 원하는 수준대로 고를 수 있도록 여러 영속화 옵션을 제공하는데, 크게 RDB와 AOF 두 방식이에요.
핵심 개념¶
RDB — 시점 스냅샷¶
RDB(Redis Database)는 지정된 간격으로 데이터셋의 시점 스냅샷(point-in-time snapshot)을 만드는 방식이에요.
- 장점 — RDB 파일은 데이터를 담은 매우 압축된 단일 파일이라 백업에 딱 맞아요. 예를 들어 매시간 RDB 파일을 24시간치 보관하고, 매일 스냅샷을 30일치 보관하는 식이에요.
- 성능 — 영속화할 때 부모 프로세스는 파일(fork)을 하나 만들고 나머지는 자식이 처리해서, 부모 프로세스는 디스크 I/O를 하지 않아요. 그래서 Redis 성능을 최대화해요.
- 큰 데이터셋에서는 AOF보다 재시작이 더 빠르다는 장점도 있어요.
AOF — 모든 쓰기 연산 기록¶
AOF(Append Only File)는 서버가 받은 모든 쓰기 연산을 기록하는 방식이에요. 기록된 연산을 서버 시작 시 다시 재생(replay)해서 원래 데이터셋을 복원해요. 명령은 Redis 프로토콜과 같은 형식으로 남겨요.
AOF는 쓰기 하나하나를 남기니 RDB보다 데이터 손실을 줄일 수 있지만, 파일이 커지고 재시작이 느려질 수 있어요.
조합과 선택¶
Redis는 네 가지 조합을 허용해요.
- RDB만 — 일정 간격 스냅샷
- AOF만 — 모든 쓰기 연산 기록
- 둘 다(RDB + AOF) — 같은 인스턴스에 함께 적용
- 영속성 없음 — 완전히 끄기. 캐시 용도로 쓰는 경우 이렇게 할 때가 있어요.
캐시는 원본을 다른 곳(주 저장소)에 두고 있으니, 잃어도 다시 만들 수 있다는 점에서 영속성을 아예 끄는 선택이 합리적일 수 있어요.
실제 적용 (데이터스케쳐스)¶
영속성 설정은 Redis를 어떤 역할로 쓰느냐에 따라 달라져요.
- 캐시로서 — Redis는 주 저장소(PostgreSQL)의 부하를 줄이는 캐시예요. 캐시는 원본이 별도로 있으니 영속성을 끄거나 최소한으로 두어도 돼요. 잃어도 다시 채우면 되니까요.
- 세션·큐 데이터 — 세션이나 작업 큐의 상태는 재시작 후에도 남는 게 좋아요. 필요에 따라 AOF 또는 RDB+AOF로 영속화해 데이터 손실을 줄여요.
- 빠른 재시작 — 대량 데이터를 복원해야 한다면 RDB가 재시작을 빠르게 해줘요.
정리하면, "영속 보관이 필수인 정합성 데이터는 PostgreSQL이 맡고, Redis는 빠른 역할을 담당하되 용도에 맞게 영속화 수준을 고른다"가 우리의 접근이에요.
더 알아보기¶
- 공식 문서 (1차)
- 영속화 (Redis Persistence) — redis.io/docs/latest/operate/oss_and_stack/management/persistence
- RDB — redis.io/docs/latest/operate/oss_and_stack/management/persistence#rdb-snapshotting
- AOF — redis.io/docs/latest/operate/oss_and_stack/management/persistence#append-only-file
- 큐레이션/블로그 (2차)
- Redis 공식 블로그 — redis.com/blog