Redis 리드·아키텍트 프레임워크 면접

Redis 리드 · 아키텍트 (10년+) 프레임워크 10문항 조회수 26 · 2026-08-23 (일) 22:12:55
1 Redis Persistence
Hard

Q. Redis의 RDB와 AOF 영속성 메커니즘의 내부 동작 원리를 각각 설명하고, Copy-on-Write 방식의 fork() 시스템 콜이 RDB 스냅샷 생성 과정에서 메모리와 성능에 미치는 영향을 분석해주세요. AOF rewrite 과정에서 발생할 수 있는 메모리 오버헤드와 이를 최소화하기 위한 전략도 함께 제시하세요.

fork()가 부모 프로세스의 메모리 페이지를 어떻게 처리하는지, 그리고 AOF rewrite 중 새로운 쓰기 명령을 어떻게 관리하는지 생각해보세요.

A. 모범답안

RDB는 특정 시점에 fork()를 통해 자식 프로세스를 생성하고, Copy-on-Write 메커니즘으로 메모리를 공유하면서 디스크에 바이너리 스냅샷을 저장합니다. COW 방식은 초기에는 메모리를 복사하지 않지만, 부모 프로세스가 데이터를 수정하면 해당 페이지만 복사되므로 쓰기가 많은 상황에서는 최대 2배의 메모리가 필요할 수 있습니다. AOF는 모든 쓰기 명령을 로그로 기록하며, AOF rewrite 시에도 fork()를 사용하여 백그라운드에서 압축된 AOF 파일을 생성합니다. Rewrite 중 새로운 명령은 메모리 버퍼(AOF rewrite buffer)에 누적되며, rewrite 완료 후 병합되므로 추가 메모리가 필요합니다. 메모리 오버헤드를 줄이기 위해서는 적절한 시간대에 rewrite를 스케줄링하고, 메모리 여유분을 충분히 확보하며, maxmemory-policy 설정을 통해 메모리 압박 상황을 관리해야 합니다.

핵심 포인트
  • • RDB는 fork()와 COW 방식으로 스냅샷을 생성하며, 쓰기가 많으면 메모리가 2배까지 증가 가능
  • • AOF는 쓰기 명령을 로그로 기록하고, rewrite 시 별도 버퍼에 새 명령을 누적
  • • 메모리 오버헤드 최소화를 위해 rewrite 스케줄링과 충분한 메모리 여유분 확보 필요
답변에 넣으면 좋은 키워드
RDB AOF Copy-on-Write fork AOF rewrite 메모리 오버헤드
실무에서는

수십 GB 규모의 Redis 인스턴스에서 백업 중 메모리 부족으로 OOM이 발생하는 것을 방지하기 위한 영속성 전략 수립 시 사용됩니다.

Follow-up 질문

대규모 트래픽 환경에서 RDB와 AOF를 함께 사용할 때, 각각의 저장 주기를 어떻게 설정하고 장애 복구 시나리오를 어떻게 설계하시겠습니까?

2 Redis Cluster
Hard

Q. Redis Cluster의 해시 슬롯(Hash Slot) 기반 샤딩 메커니즘을 설명하고, 16384개의 슬롯을 사용하는 이유를 네트워크 오버헤드와 클러스터 메타데이터 관점에서 분석해주세요. 노드 추가/제거 시 슬롯 재분배 과정에서 발생하는 리다이렉션(MOVED, ASK)의 차이점과 클라이언트가 이를 처리하는 방법도 설명하세요.

클러스터 버스 프로토콜의 heartbeat 패킷 크기와 비트맵 표현 방식을 고려해보세요.

A. 모범답안

Redis Cluster는 0부터 16383까지 16384개의 해시 슬롯을 사용하며, 각 키는 CRC16(key) mod 16384로 슬롯에 매핑됩니다. 16384개를 사용하는 이유는 클러스터 노드 간 gossip 프로토콜로 전송되는 heartbeat 패킷에 슬롯 정보를 비트맵으로 포함하는데, 16384비트는 2KB로 네트워크 오버헤드가 적절하기 때문입니다. 더 많은 슬롯을 사용하면 메타데이터 크기가 증가하고, 더 적으면 재분배 시 세밀한 제어가 어렵습니다. 슬롯 재분배 시 MOVED 에러는 슬롯이 완전히 다른 노드로 이동했음을 의미하며 클라이언트는 슬롯 테이블을 업데이트합니다. ASK 에러는 슬롯 마이그레이션 중 일시적 리다이렉션으로, 클라이언트는 ASKING 명령 후 대상 노드에 재요청하되 슬롯 테이블은 업데이트하지 않습니다. 클라이언트는 이러한 리다이렉션을 자동으로 처리하며, 슬롯 테이블 캐싱을 통해 대부분의 요청을 올바른 노드로 직접 전송합니다.

핵심 포인트
  • • 16384개 슬롯은 gossip 프로토콜의 비트맵 크기(2KB)를 고려한 최적값
  • • MOVED는 영구적 이동, ASK는 마이그레이션 중 임시 리다이렉션
  • • 클라이언트는 슬롯 테이블을 캐싱하여 리다이렉션을 최소화
답변에 넣으면 좋은 키워드
Hash Slot CRC16 MOVED ASK gossip protocol 슬롯 재분배
실무에서는

수백 노드 규모의 Redis Cluster 운영 시 노드 추가/제거로 인한 서비스 영향을 최소화하고, 클라이언트 리다이렉션 처리를 최적화할 때 사용됩니다.

Follow-up 질문

Multi-key 연산이 필요한 상황에서 Hash Tag를 사용한 키 설계 전략과, 이것이 데이터 분산에 미치는 영향을 어떻게 관리하시겠습니까?

3 Redis Pub/Sub
Medium

Q. Redis Pub/Sub의 메시지 전달 메커니즘을 설명하고, 메시지 유실 가능성이 있는 시나리오를 구체적으로 제시해주세요. Redis Stream과 비교했을 때 Pub/Sub의 적합한 사용 사례와 부적합한 사례를 각각 설명하고, 대규모 실시간 알림 시스템 설계 시 어떤 선택을 하실지 근거와 함께 제시하세요.

Pub/Sub은 메시지를 어디에 저장하지 않고, 구독자가 없거나 연결이 끊어진 상황을 생각해보세요.

A. 모범답안

Redis Pub/Sub은 발행된 메시지를 현재 연결된 구독자에게만 즉시 전달하며, 메시지를 저장하지 않는 fire-and-forget 방식입니다. 구독자가 없거나, 네트워크 지연으로 클라이언트 버퍼가 가득 차거나, 구독자가 일시적으로 연결이 끊긴 경우 메시지가 유실됩니다. Pub/Sub은 실시간성이 중요하고 메시지 유실이 허용되는 라이브 채팅, 실시간 알림, 캐시 무효화 이벤트 전파 등에 적합합니다. 반면 메시지 지속성, 재처리, 컨슈머 그룹이 필요한 이벤트 소싱이나 작업 큐에는 부적합하며 이 경우 Stream이 적절합니다. 대규모 실시간 알림 시스템의 경우, 중요도가 낮은 실시간 피드는 Pub/Sub으로, 반드시 전달되어야 하는 중요 알림은 Stream으로 분리하여 설계하는 하이브리드 접근이 효과적입니다.

핵심 포인트
  • • Pub/Sub은 메시지를 저장하지 않아 구독자 부재나 연결 끊김 시 유실 발생
  • • 실시간성 우선이고 유실 허용 가능한 경우 적합, 지속성 필요 시 Stream 사용
  • • 중요도에 따라 Pub/Sub과 Stream을 분리하는 하이브리드 설계 권장
답변에 넣으면 좋은 키워드
Pub/Sub fire-and-forget 메시지 유실 Redis Stream 실시간 알림
실무에서는

마이크로서비스 간 실시간 이벤트 전파나 WebSocket 기반 알림 시스템에서 메시지 브로커 선택 시 사용됩니다.

Follow-up 질문

Pub/Sub의 패턴 매칭 구독(PSUBSCRIBE)을 사용할 때 발생할 수 있는 성능 이슈와 이를 해결하기 위한 채널 네이밍 전략은 무엇입니까?

4 Redis Memory Management
Hard

Q. Redis의 메모리 관리 정책인 maxmemory-policy의 모든 옵션(noeviction, allkeys-lru, volatile-lru, allkeys-lfu, volatile-lfu, allkeys-random, volatile-random, volatile-ttl)의 동작 원리를 설명하고, LRU와 LFU 알고리즘의 Redis 구현 방식이 일반적인 정확한 LRU/LFU와 어떻게 다른지 설명해주세요. 각 정책이 적합한 캐시 사용 패턴도 함께 제시하세요.

Redis는 성능을 위해 근사 LRU(approximated LRU)를 사용하며, 샘플링 기반 접근 방식을 취합니다.

A. 모범답안

Redis의 maxmemory-policy는 메모리 한계 도달 시 키 제거 방식을 결정하며, noeviction은 쓰기를 거부하고, allkeys 계열은 모든 키를, volatile 계열은 TTL이 설정된 키만 대상으로 합니다. LRU는 가장 오래 사용되지 않은 키를, LFU는 가장 적게 사용된 키를, random은 무작위로, ttl은 만료 시간이 가까운 키를 제거합니다. Redis LRU는 정확한 연결 리스트 기반이 아닌 근사 LRU로, maxmemory-samples 설정값만큼(기본 5개) 무작위 샘플링하여 그 중 가장 오래된 키를 제거하므로 O(1) 성능을 유지합니다. LFU는 Morris counter를 사용한 logarithmic counter로 접근 빈도를 추적하며, lfu-decay-time으로 시간에 따른 감쇠를 구현합니다. allkeys-lru는 일반적인 캐시에, volatile-lru는 세션 데이터와 임시 데이터 혼합 시, allkeys-lfu는 인기도 기반 콘텐츠 캐싱에, volatile-ttl은 명시적 만료 시간 관리가 필요한 경우에 적합합니다.

핵심 포인트
  • • Redis LRU는 샘플링 기반 근사 알고리즘으로 O(1) 성능 유지
  • • LFU는 Morris counter로 접근 빈도를 추적하며 시간 감쇠 지원
  • • 캐시 패턴에 따라 allkeys vs volatile, LRU vs LFU 선택 필요
답변에 넣으면 좋은 키워드
maxmemory-policy 근사 LRU LFU Morris counter eviction 샘플링
실무에서는

수십 GB 규모의 캐시 서버에서 메모리 효율성과 히트율을 최적화하기 위한 eviction 정책 선택 시 사용됩니다.

Follow-up 질문

maxmemory-samples 값을 증가시키면 LRU 정확도는 향상되지만 성능 영향이 있습니다. 실무에서 이 값을 튜닝할 때 어떤 메트릭을 모니터링하고 어떤 기준으로 결정하시겠습니까?

5 Redis Replication
Hard

Q. Redis의 Master-Replica 복제 메커니즘에서 전체 동기화(Full Resync)와 부분 동기화(Partial Resync)의 동작 원리를 설명하고, replication backlog의 역할과 적절한 크기 산정 방법을 제시해주세요. PSYNC2 프로토콜이 Redis 4.0 이전 버전과 비교하여 개선한 점과, 복제 지연(replication lag) 발생 시 아키텍처 레벨에서 취할 수 있는 대응 전략도 설명하세요.

replication backlog는 순환 버퍼이며, replica가 일시적으로 연결이 끊겼을 때 필요한 명령을 저장합니다.

A. 모범답안

전체 동기화는 replica가 처음 연결되거나 backlog에 필요한 데이터가 없을 때 master가 RDB 스냅샷을 생성하여 전송하고, 그 이후 명령을 버퍼링하여 전달하는 방식입니다. 부분 동기화는 replica가 일시적으로 연결이 끊겼다가 재연결될 때 replication offset을 기준으로 backlog에서 누락된 명령만 전송합니다. Replication backlog는 순환 버퍼로, 크기는 예상되는 네트워크 단절 시간과 쓰기 처리량을 곱한 값보다 커야 하며, 예를 들어 초당 10MB 쓰기에 60초 단절을 대비하려면 최소 600MB 이상이 필요합니다. PSYNC2는 replica가 master로 승격된 후에도 replication ID를 추적하여 부분 동기화가 가능하도록 개선했으며, 장애 조치 후 전체 동기화를 피할 수 있습니다. 복제 지연 발생 시 읽기 워크로드를 분산하여 master 부하를 줄이거나, replica를 추가하거나, 쓰기 집약적 작업을 배치로 처리하거나, 최종 일관성을 허용하는 읽기는 replica에서 처리하도록 애플리케이션 레벨에서 분리하는 전략을 사용합니다.

핵심 포인트
  • • 전체 동기화는 RDB 전송, 부분 동기화는 backlog의 누락 명령만 전송
  • • Replication backlog 크기는 네트워크 단절 시간과 쓰기 처리량 고려하여 산정
  • • PSYNC2는 장애 조치 후에도 부분 동기화 가능하도록 개선
답변에 넣으면 좋은 키워드
Full Resync Partial Resync replication backlog PSYNC2 replication offset 복제 지연
실무에서는

고가용성 Redis 클러스터에서 replica 재연결 시 전체 동기화로 인한 master 부하와 네트워크 대역폭 낭비를 방지할 때 사용됩니다.

Follow-up 질문

diskless replication 옵션을 사용할 때의 장단점과, 어떤 인프라 환경에서 이 옵션을 활성화하는 것이 유리한지 설명해주세요.

6 Redis Transaction
Medium

Q. Redis의 MULTI/EXEC를 이용한 트랜잭션과 Lua Script의 원자성 보장 메커니즘을 각각 설명하고, 두 방식의 차이점을 비교해주세요. WATCH를 이용한 낙관적 락(Optimistic Lock)의 동작 원리와 경쟁 조건(race condition)이 발생할 수 있는 시나리오, 그리고 재시도 로직 설계 시 고려사항을 제시하세요.

MULTI/EXEC는 명령을 큐잉하고, Lua는 단일 스레드에서 실행되며, WATCH는 키의 변경을 감지합니다.

A. 모범답안

MULTI/EXEC 트랜잭션은 여러 명령을 큐에 저장했다가 EXEC 시점에 순차적으로 실행하여 원자성을 보장하지만, 명령 간 조건부 로직은 불가능하고 명령 실행 중 에러가 발생해도 롤백되지 않습니다. Lua Script는 Redis가 단일 스레드로 스크립트 전체를 원자적으로 실행하므로, 조건문과 반복문을 포함한 복잡한 로직을 원자적으로 처리할 수 있으며 중간에 다른 명령이 끼어들 수 없습니다. WATCH는 지정한 키를 모니터링하여 MULTI 실행 전에 키가 변경되면 EXEC가 실패(nil 반환)하는 낙관적 락을 구현하며, 여러 클라이언트가 동시에 같은 키를 수정하려 할 때 경쟁 조건이 발생합니다. 재시도 로직 설계 시 무한 루프를 방지하기 위한 최대 재시도 횟수 제한, 재시도 간 지수 백오프 적용, 경쟁이 심한 경우 Lua Script나 분산 락으로 전환하는 폴백 전략을 고려해야 합니다.

핵심 포인트
  • • MULTI/EXEC는 명령 큐잉 후 순차 실행, Lua는 단일 스레드로 스크립트 전체를 원자적 실행
  • • WATCH는 키 변경 감지로 낙관적 락 구현, 경쟁 시 EXEC 실패
  • • 재시도 로직에는 최대 횟수 제한과 지수 백오프 필요
답변에 넣으면 좋은 키워드
MULTI/EXEC Lua Script WATCH 낙관적 락 원자성 재시도
실무에서는

재고 차감이나 좌석 예약처럼 동시성 제어가 필요한 비즈니스 로직을 Redis에서 안전하게 처리할 때 사용됩니다.

Follow-up 질문

Lua Script 실행 시간이 길어지면 Redis가 블로킹되는 문제가 있습니다. SCRIPT KILL과 lua-time-limit 설정의 동작 방식과 한계를 설명하고, 장시간 실행 스크립트를 안전하게 관리하는 방법을 제시해주세요.

7 Redis Pipeline
Medium

Q. Redis Pipeline의 동작 원리를 네트워크 RTT(Round Trip Time) 관점에서 설명하고, 일반적인 명령 실행과 비교하여 성능 향상 메커니즘을 분석해주세요. Pipeline 사용 시 주의해야 할 메모리 버퍼 이슈와 적절한 배치 크기 결정 방법, 그리고 트랜잭션(MULTI/EXEC)과의 차이점도 설명하세요.

Pipeline은 여러 명령을 한 번에 전송하여 네트워크 왕복을 줄이지만, 응답도 버퍼에 누적됩니다.

A. 모범답안

Redis Pipeline은 여러 명령을 클라이언트 측에서 버퍼링한 후 한 번의 네트워크 전송으로 서버에 보내고, 모든 응답을 받아오는 방식으로, N개 명령의 RTT를 N번에서 1번으로 줄여 네트워크 지연을 극적으로 감소시킵니다. 일반 실행은 명령마다 send-receive 사이클이 필요하지만, Pipeline은 명령들을 모아서 보내므로 네트워크 대역폭을 효율적으로 사용합니다. 주의할 점은 클라이언트와 서버 양쪽 모두 응답을 버퍼에 누적하므로, 배치 크기가 너무 크면 메모리 사용량이 급증하고 네트워크 타임아웃이 발생할 수 있습니다. 적절한 배치 크기는 네트워크 조건과 명령 크기에 따라 다르지만 일반적으로 100~1000개 정도가 적절하며, 메모리 사용량과 처리 시간을 모니터링하여 조정해야 합니다. Pipeline은 단순히 네트워크 최적화이며 원자성을 보장하지 않지만, MULTI/EXEC는 명령들의 원자적 실행을 보장하며, 두 기법을 함께 사용할 수도 있습니다.

핵심 포인트
  • • Pipeline은 여러 명령을 한 번에 전송하여 RTT를 N번에서 1번으로 감소
  • • 배치 크기가 크면 메모리 버퍼 증가와 타임아웃 위험
  • • Pipeline은 네트워크 최적화이고 MULTI/EXEC는 원자성 보장
답변에 넣으면 좋은 키워드
Pipeline RTT 배치 처리 네트워크 최적화 버퍼링
실무에서는

대량의 캐시 데이터를 초기 적재하거나, 배치 작업으로 수천 개의 키를 한 번에 업데이트할 때 네트워크 오버헤드를 최소화하는 데 사용됩니다.

Follow-up 질문

대량의 데이터를 Redis에 적재할 때 Pipeline, MULTI/EXEC, Lua Script를 각각 사용하는 경우의 성능과 안전성 트레이드오프를 비교하고, 어떤 상황에서 어떤 방법을 선택하시겠습니까?

8 Redis Sentinel
Hard

Q. Redis Sentinel의 장애 감지와 자동 페일오버 메커니즘을 상세히 설명하고, SDOWN(Subjectively Down)과 ODOWN(Objectively Down)의 차이점, 그리고 quorum 설정의 의미와 적절한 값 선정 기준을 제시해주세요. 스플릿 브레인(split-brain) 상황이 발생할 수 있는 시나리오와 이를 방지하기 위한 아키텍처 설계 원칙도 설명하세요.

Sentinel들이 투표를 통해 장애를 합의하고, quorum과 majority는 다른 개념입니다.

A. 모범답안

Redis Sentinel은 master를 주기적으로 모니터링하며, 개별 Sentinel이 master 응답이 없다고 판단하면 SDOWN(주관적 다운) 상태로 표시합니다. 여러 Sentinel이 SDOWN을 감지하고 quorum 이상의 Sentinel이 동의하면 ODOWN(객관적 다운)으로 전환되어 페일오버가 시작됩니다. Quorum은 ODOWN 판단에 필요한 최소 Sentinel 수이며, 페일오버 승인에는 전체 Sentinel의 과반수(majority)가 필요하므로, quorum은 majority 이하로 설정해야 합니다. 일반적으로 Sentinel을 홀수 개(3개 또는 5개) 배치하고 quorum을 과반수로 설정합니다. 스플릿 브레인은 네트워크 파티션으로 구 master가 격리되어도 쓰기를 계속 받는 상황으로, min-replicas-to-write와 min-replicas-max-lag 설정으로 replica 연결 수가 부족하면 쓰기를 거부하도록 하여 방지할 수 있습니다. 또한 Sentinel을 여러 가용 영역에 분산 배치하고, 클라이언트가 Sentinel을 통해 master를 발견하도록 하여 페일오버 후 자동으로 새 master에 연결되도록 설계해야 합니다.

핵심 포인트
  • • SDOWN은 개별 Sentinel의 판단, ODOWN은 quorum 이상의 합의로 페일오버 시작
  • • Quorum은 ODOWN 판단 기준, 페일오버는 majority 필요
  • • min-replicas 설정과 분산 배치로 스플릿 브레인 방지
답변에 넣으면 좋은 키워드
Sentinel SDOWN ODOWN quorum 페일오버 스플릿 브레인
실무에서는

미션 크리티컬한 서비스에서 Redis master 장애 시 수동 개입 없이 자동으로 replica를 master로 승격시켜 다운타임을 최소화할 때 사용됩니다.

Follow-up 질문

Sentinel 기반 고가용성 구성과 Redis Cluster의 고가용성 메커니즘을 비교하고, 각각 어떤 규모와 요구사항에 적합한지 설명해주세요.

9 Redis Module
Medium

Q. Redis Module API의 아키텍처와 동작 원리를 설명하고, 네이티브 Redis 명령과 비교하여 Module 명령의 성능 특성과 제약사항을 분석해주세요. RedisJSON, RedisGraph, RedisBloom 같은 주요 모듈들이 제공하는 기능과 내부적으로 사용하는 자료구조, 그리고 프로덕션 환경에서 Module 도입 시 고려해야 할 운영 리스크와 버전 호환성 이슈도 제시하세요.

Module은 동적 라이브러리로 로드되며, Redis의 단일 스레드 모델에서 실행됩니다.

A. 모범답안

Redis Module API는 C 언어로 작성된 동적 라이브러리를 Redis 프로세스에 로드하여 새로운 명령과 자료구조를 추가할 수 있게 하며, MODULE LOAD 명령으로 런타임에 로드됩니다. Module 명령도 Redis의 단일 스레드 이벤트 루프에서 실행되므로 네이티브 명령과 동일하게 블로킹되며, 복잡한 연산은 성능 저하를 유발할 수 있습니다. RedisJSON은 JSON 문서를 JSONPath로 조작하며 내부적으로 트리 구조를 사용하고, RedisGraph는 그래프 쿼리를 위해 인접 행렬을 최적화한 구조를, RedisBloom은 Bloom Filter와 Cuckoo Filter를 제공합니다. 프로덕션 도입 시 Module 버그가 Redis 프로세스 전체를 크래시시킬 수 있고, Redis 버전 업그레이드 시 Module 호환성 문제가 발생할 수 있으며, 일부 Module은 AOF/RDB 직렬화를 완벽히 지원하지 않을 수 있습니다. 따라서 충분한 테스트, 버전 고정, 백업 전략 수립, 그리고 커뮤니티 활성도와 유지보수 상태를 확인해야 합니다.

핵심 포인트
  • • Module은 동적 라이브러리로 로드되며 단일 스레드에서 실행
  • • RedisJSON, RedisGraph, RedisBloom 등 특화된 자료구조 제공
  • • Module 버그는 프로세스 크래시 유발 가능, 버전 호환성과 백업 전략 필수
답변에 넣으면 좋은 키워드
Redis Module MODULE LOAD RedisJSON RedisGraph RedisBloom 버전 호환성
실무에서는

복잡한 JSON 문서 조작이나 그래프 쿼리가 필요한 경우, 별도 데이터베이스 없이 Redis Module로 통합하여 인프라 복잡도를 줄일 때 사용됩니다.

Follow-up 질문

Redis Module을 직접 개발해야 하는 상황이라면, 어떤 요구사항에서 Module 개발이 정당화되고, 대안적으로 Lua Script나 애플리케이션 레벨 구현과 비교했을 때 어떤 트레이드오프가 있습니까?

10 Redis Protocol
Medium

Q. Redis의 RESP(REdis Serialization Protocol) 프로토콜의 구조와 데이터 타입 인코딩 방식을 설명하고, RESP2와 RESP3의 주요 차이점을 비교해주세요. 클라이언트 라이브러리 구현 관점에서 프로토콜 파싱의 효율성과 에러 처리 메커니즘, 그리고 대용량 응답 처리 시 메모리 관리 전략도 제시하세요.

RESP는 텍스트 기반 프로토콜이며, 각 데이터 타입은 첫 바이트로 구분됩니다.

A. 모범답안

RESP는 텍스트 기반 프로토콜로 Simple String(+), Error(-), Integer(:), Bulk String($), Array(*) 다섯 가지 데이터 타입을 첫 바이트로 구분하며, CRLF로 구분된 라인 단위로 파싱합니다. 예를 들어 Bulk String은 '$길이CRLF데이터CRLF' 형식이며, Array는 중첩 가능합니다. RESP3는 RESP2를 확장하여 Map, Set, Boolean, Double, Null 등 추가 타입을 지원하고, Push 타입으로 서버가 클라이언트에게 비동기 메시지를 보낼 수 있으며, 더 풍부한 메타데이터를 전달할 수 있습니다. 클라이언트 구현 시 스트림 기반 파싱으로 부분 응답을 처리하고, 버퍼 크기를 제한하여 메모리 소진을 방지하며, 파이프라인된 응답의 순서를 유지해야 합니다. 대용량 응답(예: 큰 Bulk String)은 스트리밍 방식으로 읽어 메모리에 한 번에 로드하지 않고, 청크 단위로 처리하거나 디스크에 임시 저장하는 전략을 사용합니다. 에러는 Error 타입으로 명확히 구분되며, 클라이언트는 이를 예외로 변환하여 애플리케이션에 전달합니다.

핵심 포인트
  • • RESP는 텍스트 기반으로 5가지 기본 타입을 첫 바이트로 구분
  • • RESP3는 추가 타입과 Push 메시지 지원으로 기능 확장
  • • 대용량 응답은 스트리밍 방식으로 처리하여 메모리 효율성 확보
답변에 넣으면 좋은 키워드
RESP RESP2 RESP3 프로토콜 파싱 Bulk String 스트리밍
실무에서는

고성능 Redis 클라이언트 라이브러리를 개발하거나, 프로토콜 레벨에서 디버깅이 필요하거나, Redis 프록시를 구현할 때 사용됩니다.

Follow-up 질문

Redis 클라이언트 라이브러리에서 연결 풀(Connection Pool) 관리 전략과, 연결 재사용 시 발생할 수 있는 상태 오염 문제를 어떻게 방지하시겠습니까?

댓글 0

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

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