Redis의 String, Hash, List, Set, Sorted Set과 같은 주요 데이터 구조 각각의 특징과 실제 서비스에서 어떤 용도로 활용될 수 있는지 구체적인 예시를 들어 설명해 주세요.
힌트 · 각 데이터 구조가 제공하는 연산의 시간 복잡도와 유즈케이스(예: 랭킹, 팔로우/팔로워, 메시지 큐)를 중심으로 설명합니다.
모범답안
Redis는 다양한 데이터 구조를 제공하여 여러 서비스 요구사항을 충족할 수 있습니다.
String은 단순한 Key-Value 저장에 적합하며, 캐싱, 세션 관리, 간단한 카운터 등에 활용됩니다. 예를 들어, 사용자 ID를 키로, 사용자 이름을 값으로 저장하여 빠르게 사용자 정보를 조회할 수 있습니다.
Hash는 객체 저장을 위한 구조로, 사용자 프로필 정보나 상품 정보를 저장하는 데 유용합니다. Key-Value 쌍을 필드로 가지므로, 객체의 특정 필드만 업데이트하는 것이 가능합니다.
List는 순서가 있는 데이터 목록을 저장하며, 메시지 큐, 최근 활동 기록 등에 활용됩니다. LPUSH와 RPOP을 사용하여 간단한 큐를 구현할 수 있습니다.
Set은 중복 없는 데이터 집합을 저장하며, 팔로우/팔로워 관계, 그룹 멤버십 관리 등에 사용됩니다. 특정 사용자가 팔로우하는 사용자 목록을 Set으로 관리하고, 교집합 연산을 통해 공통 팔로워를 찾을 수 있습니다.
Sorted Set은 점수를 기준으로 정렬된 데이터 집합을 저장하며, 랭킹 시스템, 실시간 순위 등에 활용됩니다. 사용자의 점수를 기준으로 랭킹을 매기고, ZRANGE를 사용하여 상위 랭커를 쉽게 조회할 수 있습니다. 각 데이터 구조는 특정 연산에 대해 최적화된 시간 복잡도를 제공하므로, 서비스 요구사항에 맞는 데이터 구조를 선택하는 것이 중요합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 캐시 (Redis) 면접 질문
- 가장 기본적인 캐싱 전략 중 하나인 'Cache-Aside' 패턴에 대해 설명해 주세요. 데이터 읽기 및 쓰기 시 어떻게 동작하나요?
- 캐시 무효화 전략 중 Write-through, Write-back, Lazy loading(Write-aside) 방식의 차이점과 각각의 장단점을 설명하고, 특정 상황에 적합한 전략을 선택하는 기준에 대해 설명해 주세요.
- Redis에서 설정 가능한 다양한 eviction 정책(예: LRU, LFU, volatile-lru 등)에 대해 설명하고, 서비스 특성을 고려하여 적절한 정책을 선택하는 기준과 그 이유를 설명해 주세요.
- Redis의 영속성(Persistence)을 제공하는 RDB와 AOF 방식의 동작 원리, 장단점을 비교하고, 데이터 유실 허용 범위와 복구 속도 관점에서 어떤 상황에 어떤 방식을 선택해야 하는지 설명해 주세요.
- Redis Sentinel은 무엇이며, 어떤 문제를 해결하기 위해 사용되는지 설명해 주세요. 또한, Sentinel이 제공하는 고가용성(High Availability) 기능과 동작 방식에 대해 구체적으로 설명해 주세요.
- 분산 환경에서 캐시를 사용할 때 발생할 수 있는 데이터 불일치(Stale Data) 문제의 원인을 설명하고, 이를 해결하기 위한 일반적인 방법들을 제시해 주세요.