데이터 영속성

Redis 개요

Redis는 오픈 소스 기반의 인메모리 데이터 구조 서버로, 빠른 속도와 유연한 데이터 구조를 제공합니다. 특히 캐시 서버, 데이터 저장소, 메시지 브로커로 폭넓게 활용되며, 기업 환경에서도 필수적인 컴포넌트로 자리 잡고 있습니다. Redis의 주요 특징은 다음과 같습니다:

  • 인메모리 기반: 데이터는 기본적으로 메모리에 저장되어 빠른 처리 속도를 보장합니다.

  • 유연한 데이터 구조: 문자열, 리스트, 셋, 해시, 정렬된 셋 등 다양한 자료형을 지원합니다.

  • 확장성: Redis 클러스터를 통해 수평 확장이 가능하며, 수백 GB에 달하는 데이터를 처리할 수 있습니다.

  • 데이터 영속성: RDB와 AOF를 통해 메모리에 저장된 데이터를 디스크로 보존할 수 있습니다.


Redis 데이터 영속성: 메모리 데이터를 안전하게 보존하기

Redis는 메모리 기반 시스템이지만, 영속성을 지원하여 데이터를 디스크에 저장하고, 장애 발생 시 복원할 수 있는 옵션을 제공합니다. Redis의 영속성 방식에는 크게 두 가지가 있습니다: **RDB (Snapshot)**와 AOF (Append Only File).

RDB (Redis DataBase)

개념

RDB는 특정 시점에 Redis의 데이터를 스냅숏으로 저장하는 방식입니다. 저장된 데이터는 .rdb 파일 형태로 보존되며, 필요 시 이를 사용하여 데이터를 복원할 수 있습니다.

동작 방식

  • 수동 스냅숏: SAVE 명령을 실행하여 즉시 RDB 파일을 생성합니다.

  • 백그라운드 스냅숏: BGSAVE 명령을 실행하면 별도 프로세스를 생성하여 작업을 수행합니다. 이는 Redis의 메인 프로세스를 차단하지 않으므로 서비스에 영향을 주지 않습니다.

설정

redis.conf 파일에서 스냅숏 빈도를 설정할 수 있습니다.

save 900 1   # 900초(15분) 동안 1번 이상 수정된 경우 스냅숏 생성
save 300 10  # 300초(5분) 동안 10번 이상 수정된 경우 스냅숏 생성
save 60 10000 # 60초 동안 10,000번 이상 수정된 경우 스냅숏 생성

장단점

  • 장점

    • 스냅숏 생성 후 데이터베이스가 빠르게 시작됩니다.

    • RDB 파일 크기가 작아 전송과 백업이 용이합니다.

  • 단점

    • 스냅숏 생성 주기 사이의 데이터는 손실될 수 있습니다.

    • 데이터가 많아질 경우 스냅숏 생성 작업이 오랜 시간이 소요될 수 있습니다.


AOF (Append Only File)

개념

AOF는 모든 쓰기 연산을 로그 파일에 기록하여 데이터 복원을 지원합니다. Redis는 AOF 파일에 기록된 명령어를 순차적으로 재생하여 데이터를 복원합니다.

동작 방식

  • 쓰기 명령어(SET, INCR, HSET 등)가 실행될 때마다 로그 파일에 추가됩니다.

  • Redis는 주기적으로 AOF 파일을 재작성(compaction)하여 크기를 줄입니다.

설정

redis.conf 파일에서 AOF 관련 설정을 할 수 있습니다.

appendonly yes         # AOF 활성화
appendfsync always     # 매번 명령어 실행 시 디스크로 기록 (가장 안전)
appendfsync everysec   # 1초마다 기록 (성능과 안전성 균형)
appendfsync no         # 디스크 기록은 OS가 처리 (가장 빠름)

장단점

  • 장점

    • 데이터 손실이 거의 없습니다. (appendfsync everysec 설정 기준)

    • 데이터베이스 복구가 더 신뢰성이 높습니다.

  • 단점

    • AOF 파일 크기가 RDB보다 크며, 복원 속도가 느립니다.


RDB와 AOF를 함께 사용

이유

RDB와 AOF는 상호 보완적인 방식입니다. Redis는 AOF 파일을 우선 사용하여 데이터 무결성을 보장하며, RDB는 빠른 시작 시간을 제공합니다.

설정 예시

redis.conf 파일에서 다음과 같이 두 가지 방식을 함께 활성화할 수 있습니다.

save 900 1
appendonly yes
appendfsync everysec

Redis 아키텍처: 캐시 서버와 데이터 저장소로의 활용

Redis는 다양한 시나리오에서 사용할 수 있는 높은 유연성을 제공합니다. 여기서는 Redis를 캐시 서버데이터 저장소로 활용하는 방법을 소개합니다.

캐시 서버로 사용

Redis는 캐시 데이터 저장소로 널리 사용됩니다. 캐시 서버로 사용 시 일반적인 패턴은 다음과 같습니다:

지연 로딩 패턴 (Lazy Loading)

  • 캐시에 데이터가 없는 경우 요청이 백엔드 데이터베이스로 전달됩니다.

  • 데이터베이스에서 가져온 데이터는 캐시에 저장됩니다.

  • 이후 동일한 요청은 캐시에서 처리됩니다.

쓰기-뒤로 패턴 (Write-Back)

  • 쓰기 작업이 Redis 캐시에 저장된 뒤, 별도로 데이터베이스로 비동기 처리됩니다.

  • 이 방식은 쓰기 성능이 우수하지만, 데이터 동기화 지연 문제가 발생할 수 있습니다.


Redis 설정과 모니터링: redis.conf 파일 활용

Redis의 설정 파일인 redis.conf는 시스템 동작을 제어하는 핵심 요소입니다. 주요 설정 항목과 사용법은 아래와 같습니다:

데이터 영속성

  • save: 스냅숏 생성 빈도.

  • appendonly: AOF 사용 여부.

  • appendfsync: AOF 디스크 기록 정책.

메모리 관리

  • maxmemory: 사용할 최대 메모리 크기.

  • maxmemory-policy: 메모리 초과 시 제거 정책.

    • volatile-lru: TTL이 설정된 키 중 LRU 방식으로 제거.

    • allkeys-lru: 모든 키에서 LRU 방식으로 제거.

    • noeviction: 제거하지 않고 오류 반환.

보안

  • requirepass: 인증 비밀번호 설정.

  • bind: 특정 IP로 접근 제한.


Redis 클러스터 설정 및 활용

대규모 환경에서는 Redis 클러스터를 통해 확장성과 가용성을 높일 수 있습니다.

설정

redis.conf에서 클러스터 관련 설정을 활성화합니다.

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

CRC (Cyclic Redundancy Check): 데이터 무결성 보장

Redis는 CRC를 활용해 AOF 파일의 데이터 무결성을 보장합니다. CRC는 파일에 기록된 데이터가 손상되었는지 확인하는 데 사용됩니다.

동작 방식

  • Redis는 AOF 파일의 각 명령에 대한 체크섬을 계산해 저장합니다.

  • 복구 시점에 Redis는 저장된 체크섬과 파일 내용을 비교해 데이터 무결성을 확인합니다.

활용

  1. 데이터 검증: AOF 파일이 손상된 경우 이를 감지.

  2. 복구: 손상된 데이터를 건너뛰거나 이전 상태로 되돌리는 방식으로 복구 가능.


TTL (Time-To-Live): 데이터 수명 관리

Redis는 TTL을 활용해 키의 유효 기간을 설정할 수 있습니다. TTL이 만료되면 키는 자동으로 삭제됩니다.

설정 방법

  1. EXPIRE 명령어: 특정 키에 TTL을 설정합니다.

    plaintext복사편집EXPIRE key_name seconds
  2. EXPIREAT 명령어: 특정 시간에 키가 만료되도록 설정합니다.

    plaintext복사편집EXPIREAT key_name timestamp
  3. TTL 확인: 남은 TTL을 확인합니다.

    plaintext복사편집TTL key_name

활용 사례

  • 캐싱: 데이터의 유효 기간 설정.

  • 세션 관리: 사용자 세션 데이터 자동 삭제.

  • 레이트 리미팅: 요청 제한을 구현할 때 사용.


Redis 영속성 및 TTL 활용 예시

데이터 무결성 보장

  • AOF를 활성화하고 appendfsync everysec 옵션을 설정해 데이터 유실을 최소화.

  • 정기적으로 BGREWRITEAOF 명령으로 파일 크기 관리.

TTL을 활용한 캐싱

plaintext복사편집SET user:123 "data" EX 3600  # 1시간 동안 유지되는 키 설정

RDB 백업 및 복구

  • 주기적으로 RDB 스냅샷 생성.

  • 스냅샷 파일을 외부 스토리지에 저장해 추가 보안 제공.

Last updated

Was this helpful?