Redis 미드레벨 프레임워크 면접

Redis 미드레벨 (3~7년) 프레임워크 5문항 조회수 170 · 2026-04-25 (토) 19:10:53
1 Redis Persistence
Medium

Q. Redis의 RDB와 AOF 방식의 차이점을 설명하고, 각각의 장단점을 비교해주세요. 또한 프로덕션 환경에서 두 방식을 함께 사용할 때의 이점과 복구 우선순위에 대해 설명해주세요.

A. 모범답안

RDB는 특정 시점의 스냅샷을 바이너리 파일로 저장하는 방식으로 파일 크기가 작고 복구 속도가 빠르지만 마지막 스냅샷 이후 데이터가 유실될 수 있습니다. AOF는 모든 쓰기 명령을 로그로 기록하여 데이터 유실을 최소화하지만 파일 크기가 크고 복구 속도가 느립니다. 프로덕션에서는 두 방식을 함께 사용하여 RDB로 빠른 백업을, AOF로 데이터 내구성을 확보하며, Redis 재시작 시 AOF 파일이 존재하면 이를 우선적으로 사용하여 복구합니다. AOF rewrite 기능을 활용하면 파일 크기를 최적화할 수 있습니다.

핵심 포인트
  • • RDB: 스냅샷 방식, 작은 파일 크기, 빠른 복구, 데이터 유실 가능성
  • • AOF: 명령 로그 방식, 높은 내구성, 느린 복구, 큰 파일 크기
  • • 복구 우선순위: AOF 우선, AOF rewrite로 최적화 가능
  • • 프로덕션에서는 두 방식 병행 사용 권장
Follow-up 질문

AOF의 fsync 정책(always, everysec, no) 중 어떤 것을 선택하시겠습니까? 각 정책의 성능과 내구성 트레이드오프를 설명해주세요.

2 Redis Replication
Medium

Q. Redis의 Master-Replica 복제 구조에서 비동기 복제(asynchronous replication)가 어떻게 동작하는지 설명하고, 이로 인해 발생할 수 있는 데이터 일관성 문제와 해결 방법을 제시해주세요.

A. 모범답안

Redis는 Master에서 쓰기 작업이 발생하면 즉시 클라이언트에 응답한 후, 변경 사항을 Replica로 비동기적으로 전파합니다. 이 과정에서 Master가 응답 후 Replica 동기화 전에 장애가 발생하면 데이터 유실이 발생할 수 있습니다. 이를 해결하기 위해 WAIT 명령어를 사용하여 최소 N개의 Replica가 동기화될 때까지 대기하거나, min-replicas-to-write와 min-replicas-max-lag 설정으로 일정 수 이상의 Replica가 연결되어 있을 때만 쓰기를 허용할 수 있습니다. Sentinel이나 Redis Cluster를 활용한 자동 failover 구성도 가용성을 높이는 방법입니다.

핵심 포인트
  • • 비동기 복제: Master 응답 후 Replica 전파, 높은 성능
  • • 데이터 일관성 문제: 동기화 전 장애 시 데이터 유실 가능
  • • WAIT 명령어: 명시적 동기화 대기
  • • min-replicas 설정: 최소 Replica 수 보장
Follow-up 질문

Redis Sentinel의 쿼럼(quorum)과 majority 개념을 설명하고, Sentinel 클러스터 구성 시 홀수 개의 노드를 권장하는 이유는 무엇인가요?

3 Redis Hash
Medium

Q. Redis Hash 자료구조의 내부 구현에서 ziplist와 hashtable 인코딩이 언제 전환되는지 설명하고, 대량의 필드를 가진 Hash를 다룰 때 메모리 최적화 방안을 제시해주세요.

A. 모범답안

Redis Hash는 필드 수가 적고 값이 작을 때는 메모리 효율적인 ziplist로 인코딩되고, hash-max-ziplist-entries(기본 512개) 또는 hash-max-ziplist-value(기본 64바이트)를 초과하면 hashtable로 전환됩니다. ziplist는 연속된 메모리 블록으로 저장되어 메모리 효율이 높지만 O(N) 탐색 시간을 가지며, hashtable은 O(1) 성능이지만 메모리 오버헤드가 큽니다. 대량의 필드를 다룰 때는 Hash Sharding 기법을 사용하여 하나의 큰 Hash를 여러 개의 작은 Hash로 분할하고, 각각을 ziplist 범위 내로 유지하여 메모리를 절약할 수 있습니다.

핵심 포인트
  • • ziplist: 작은 Hash, 메모리 효율적, O(N) 탐색
  • • hashtable: 큰 Hash, O(1) 성능, 메모리 오버헤드
  • • 전환 임계값: hash-max-ziplist-entries, hash-max-ziplist-value
  • • Hash Sharding: 큰 Hash를 여러 작은 Hash로 분할
Follow-up 질문

Hash Sharding을 구현할 때 필드를 어떻게 분산시키고, 샤드 키 네이밍 전략은 어떻게 설계하시겠습니까?

4 Redis Expiration
Hard

Q. Redis의 키 만료(expiration) 메커니즘에서 passive expiration과 active expiration의 차이를 설명하고, 대량의 키가 동시에 만료될 때 발생할 수 있는 성능 문제와 해결 방안을 제시해주세요.

A. 모범답안

Passive expiration은 클라이언트가 만료된 키에 접근할 때 lazy하게 삭제하는 방식이고, active expiration은 Redis가 주기적으로(기본 100ms마다) 랜덤 샘플링하여 만료된 키를 삭제하는 방식입니다. 대량의 키가 동시에 만료되면 active expiration 과정에서 단일 스레드인 Redis가 블로킹되어 다른 명령어 처리가 지연될 수 있습니다. 이를 해결하기 위해 만료 시간에 랜덤 jitter를 추가하여 시간을 분산시키거나, UNLINK 명령어와 lazyfree-lazy-expire 설정으로 비동기 삭제를 활용하거나, 배치 작업 시간대를 고려하여 트래픽이 적은 시간에 만료되도록 설계할 수 있습니다.

핵심 포인트
  • • Passive expiration: 접근 시 lazy 삭제
  • • Active expiration: 주기적 샘플링 및 삭제
  • • 동시 만료 문제: 블로킹으로 인한 성능 저하
  • • 해결 방안: 만료 시간 jitter, lazyfree 설정, 배치 시간 분산
Follow-up 질문

Redis의 메모리 eviction과 expiration의 차이점은 무엇이며, 두 메커니즘이 동시에 작동할 때 우선순위는 어떻게 되나요?

5 Redis Cluster
Hard

Q. Redis Cluster의 해시 슬롯(hash slot) 개념과 데이터 분산 방식을 설명하고, 클러스터 환경에서 MGET이나 트랜잭션(MULTI/EXEC) 사용 시 제약사항과 이를 우회하는 방법을 제시해주세요.

A. 모범답안

Redis Cluster는 16384개의 해시 슬롯으로 데이터를 분산하며, 각 키는 CRC16(key) mod 16384로 계산된 슬롯에 할당되고 슬롯은 여러 마스터 노드에 분배됩니다. MGET이나 트랜잭션은 모든 키가 동일한 노드(슬롯)에 있어야 실행 가능하므로, 서로 다른 노드의 키를 참조하면 CROSSSLOT 에러가 발생합니다. 이를 해결하기 위해 Hash Tag를 사용하여 중괄호 안의 문자열만으로 슬롯을 계산하게 함으로써 관련 키들을 같은 슬롯에 배치할 수 있습니다. 예를 들어 user:{1000}:profile과 user:{1000}:session은 모두 1000으로 슬롯이 계산되어 같은 노드에 저장됩니다.

핵심 포인트
  • • 16384개 해시 슬롯으로 데이터 분산
  • • MGET/트랜잭션: 동일 노드의 키만 처리 가능
  • • CROSSSLOT 에러: 다른 노드 키 참조 시 발생
  • • Hash Tag: 중괄호로 슬롯 계산 제어, 관련 키 그룹화
Follow-up 질문

Redis Cluster에서 노드 추가/제거 시 해시 슬롯 재분배(resharding) 과정은 어떻게 진행되며, 이 과정에서 서비스 중단 없이 마이그레이션하는 방법은 무엇인가요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!