Redis
Q. Redis에 대해서 설명해주세요.
Redis는 Remote Dictionary Server의 약자로, 메모리 기반의 NoSQL 데이터베이스입니다.
일반적으로 Key-Value 저장소로 사용되며, 빠른 속도를 제공하기 때문에, 캐싱, 세션 관리, 메시지 브로커 등의 용도로 많이 활용됩니다.
Redis의 주요 특징으로는 데이터의 인메모리 저장, 빠른 응답 속도, 그리고 다양한 자료구조 지원이 있습니다. 데이터가 메모리에 저장되므로 조회 및 수정 속도가 빠르고, String, List, Set 등 다양한 자료구조를 제공하여 유연한 데이터 처리가 가능합니다.
또한, AOF, RDB 등의 영속성 기능을 지원하여 데이터를 디스크에 저장할 수도 있으며, Replication을 통해 Master-Slave 구조로 운영 가능하고, Sentinel과 Cluster를 이용한 고가용성 및 확장성도 제공합니다.
하지만, 메모리 기반이기 때문에 데이터 용량이 제한적이고, 장애 발생 시 데이터 유실 가능성이 있어 이에 대한 대비가 필요합니다.
Q. Redis의 Cache-Aside 전략은 무엇인가요?
Cache-Aside
전략은 애플리케이션에서 캐시를 효율적으로 사용하여 DB의 부하를 줄이는 패턴 중 하나로, 데이터가 캐시에 없는 경우와 있는 경우의 흐름을 정의한 방식입니다.
애플리케이션이 데이터를 요청하면 먼저 Redis에서 해당 데이터를 조회합니다. 캐시에 데이터가 있으면 바로 반환하는데, 이를 Cache Hit
라고 합니다.
캐시에 데이터가 없으면, 애플리케이션은 DB에서 데이터를 조회합니다. 조회된 데이터를 Redis에 저장하여 다음 요청 시 캐시를 활용할 수 있도록 합니다.
만약 DB의 데이터가 변경되었을 경우, 보통 캐시의 해당 데이터를 무효화(삭제)하여 최신 데이터가 반영되도록 합니다. 이후 다음 조회 요청에서 새로운 데이터가 DB에서 조회된 후 다시 캐시에 저장됩니다.
Q. Redis의 Rate Limiting에 대해서 설명해주세요.
Rate Limiting
은 말그대로 특정 시간 동안 허용된 요청 수를 제한하여 API 남용 방지, DDoS 완화, 트래픽 관리 등의 목적을 달성하는 기법입니다. 대표적으로 4가지 방식이 있습니다.
첫번째, Fixed Window Counter
는 1분 등의 일정한 시간 단위에 대해 요청 횟수를 제한하는 방식입니다. Redis에서 키(key)와 카운터 값을 사용하여 요청 횟수를 추적하고 윈도우가 갱신될 때마다 카운터를 초기화합니다.
두번째, Sliding Window Log
는 요청 시간을 Sorted Set으로 저장하고, 특정 기간 내의 요청 수를 계산하는 방식입니다. 요청이 발생할 때 현재 시간의 타임스탬프를 저장하고, TTL이 지난 이천 요청들은 삭제합니다.
세번째, Token Bucket
은 일정 속도로 토큰을 생성하고, 요청 시 토큰을 소비하는 방식입니다. 생성된 토큰의 갯수에 따라 짧은 시간 내 다량 요청 허용을 할 수 있습니다.
마지막으로 Leaky Bucket
은 버킷에서 일정한 속도로 요청을 처리하는 방식입니다. Redis의 큐를 활용하여 FIFO 방식으로 요청을 저장하고 순차적으로 처리합니다. 트래픽이 순각적으로 몰려도 부드럽게 처리되며, 과부하를 방지할 수 있습니다.
Last updated