시스템 디자인
데이터 시스템 / 분산 저장소 / Key-Value Store
학습 로드맵

분산 Key-Value Store 설계

키 하나로 읽고 쓰는 단순한 API를, 노드·네트워크가 계속 실패하는 환경에서도 확장합니다. 핵심은 파티셔닝, 복제, 정족수, 충돌 해결의 책임 경계를 분명하게 두는 것입니다.

개념 이해면접 답변운영 관점진도 저장
30초 핵심 요약

같은 키에 두 쓰기가 동시에 성공하면 정족수 교집합만으로 최신 값을 고를 수 없습니다. 이 설계는 N=3·W=2·R=2를 기본으로 쓰되 충돌한 형제 버전을 보존하고, 업무 서비스의 병합과 사본 수리까지를 완료 조건으로 둡니다.

데이터 세트 (설계 가정)100억 키 · 약 10TB
복제 후 저장량 (계산 결과)N=3 → 약 30TB
정족수 예시 (설계 가정)N=3 · W=2 · R=2
DESIGN DECISION · 설계 판단

동시 쓰기가 갈라졌을 때 어느 값을 정본으로 둘 것인가?

예시 데이터 세트 약 10TB 계산 결과
예시 피크 QPS 읽기 50만 · 쓰기 20만 설계 가정
예시 복제 계수 N = 3 설계 가정
최종 선택

조절 가능한 Quorum + 형제 버전 보존 + 의미 기반 병합

N=3·W=2·R=2를 기본으로 쓰되, 동시에 생긴 버전은 시각으로 덮어쓰지 않습니다. 형제 버전을 업무 서비스가 병합하고 read repair와 anti-entropy로 세 사본을 수렴시킵니다.

선택 이유

  • 장애 구간에도 쓰기를 이어가면서 어떤 값이 갈라졌는지 숨기지 않습니다.
  • 장바구니·사용자 설정처럼 도메인 의미가 있는 병합을 저장소의 임의 타임스탬프보다 우선합니다.
  • 형제 버전 수, hinted handoff 체류, Merkle 차이를 복구 완료 지표로 사용할 수 있습니다.
포기한 대안

물리 시각 기반 last-write-wins

구현은 단순하지만 네트워크 단절과 클록 오차가 겹치면 사용자가 방금 쓴 값을 조용히 잃습니다. 충돌을 숨기기보다 버전 문맥을 보존합니다.

감수한 단점

  • 클라이언트나 업무 서비스가 형제 버전 병합 규칙을 가져야 합니다.
  • 충돌을 허용할 수 없는 잔액·재고 키는 리더나 합의 기반 조건부 쓰기로 분리해야 합니다.
  • Hinted Handoff와 anti-entropy가 오래 밀리면 일시 충돌이 장기 불일치로 바뀝니다.
01 · REQUIREMENTS

무엇을 보장해야 하는가?

# 요구사항

관계형 질의가 아닌 키 기반 접근을 전제로 하되, 용량·처리량·장애 빈도는 계속 증가한다고 가정합니다.

F1단순한 API

put(key, value)get(key)에 버전 컨텍스트를 함께 전달합니다.

F2수평 확장

노드 증감 때 전체 데이터를 옮기지 않고 일부 키만 재배치합니다.

F3장애 허용

일부 사본·경로가 실패해도 선택한 정족수만 만족하면 응답합니다.

F4충돌 가시화

동시 쓰기를 숨기지 않고 버전·병합 책임을 명시합니다.

02 · HIGH-LEVEL DESIGN

코디네이터와 세 복제본

# 아키텍처

요청을 받은 코디네이터가 일관된 해싱 링에서 담당 복제본을 계산하고, 쓰기에는 W개의 ACK, 읽기에는 R개의 버전을 모읍니다.

복제·정족수 읽기/쓰기 흐름 SVG DIAGRAM · N=3, W=2, R=2는 설계 가정
클라이언트, 코디네이터, 세 복제본과 읽기 수리 경로클라이언트 요청을 코디네이터가 세 복제본에 병렬 전송하고 쓰기와 읽기 정족수를 모은 뒤 오래된 복제본을 읽기 수리하는 흐름이다.Clientput / get + versionCoordinatorhash ring · quorumReplica A · ACKReplica B · ACKReplica C · async repairN=3 · write W=2read R=2 · version mergehinted handoff / read repair병렬 전송오래된 사본을 발견하면 읽기 수리 경로로 보정
교집합의 한계 · W + R > N은 읽기·쓰기 사본의 교집합을 만들지만, 동시 쓰기 순서·버전 비교·실패 감지가 부정확하면 선형 일관성이 자동으로 생기지 않습니다.
03 · READ / WRITE FLOW

읽기와 쓰기는 어떻게 끝나는가?

# 처리 흐름
1키 배치 계산

일관된 해싱과 가상 노드로 담당 N개 복제본을 찾습니다.

2병렬 쓰기

W개 ACK를 받으면 성공 응답하고 나머지는 힌트로 보관합니다.

3병렬 읽기

R개 버전을 비교해 최신 값 또는 충돌 버전 집합을 반환합니다.

4사본 수리

읽기 수리와 Merkle Tree 안티 엔트로피로 장기 불일치를 줄입니다.

04 · TRADEOFFS

정족수와 충돌 해결의 선택

# 트레이드오프

정족수는 숫자 하나가 아니라 가용성·지연·충돌 책임을 함께 바꾸는 정책입니다.

선택
강점
주의점
적용 예
N=3, W=2, R=2
읽기·쓰기 사본 교집합
느린 사본 2개면 요청 실패
일반 데이터
W=1
낮은 쓰기 지연
읽기 시 충돌·오래된 사본 가능성 증가
가용성 우선
서버 병합
클라이언트 단순
도메인 의미를 모르면 잘못 병합
카운터·집합
클라이언트 병합
업무 의미 반영
SDK·UX 복잡도 증가
장바구니 등
05 · FAILURE MODES

장애 시나리오와 대응

# 장애 대응
!노드 장애

복제본 하나가 응답하지 않아도 요청은 계속 들어옵니다.

대응 · hinted handoff로 임시 사본을 보관하고 복귀 후 전달합니다.
네트워크 분단

양쪽에서 쓰기가 허용되면 버전이 갈라질 수 있습니다.

대응 · 벡터 클록·병합 정책으로 충돌을 명시적으로 반환·해결합니다.
핫 파티션

특정 키 범위에 QPS가 집중되어 한 노드만 느려집니다.

대응 · 가상 노드, 키 분할, 캐시와 파티션별 편차 관측을 사용합니다.
시계 역행

물리 타임스탬프만으로는 오래된 값을 최신으로 오판할 수 있습니다.

대응 · 논리 버전 우선, 클록 스큐 알림, 잘못된 덮어쓰기 추적을 적용합니다.
06 · OPERATIONS

보안·관측·비용

# 운영
영역
확인할 것
판단 기준
주의점
보안·삭제
전송/저장 암호화, 삭제 전파
힌트 사본까지 삭제 완료
복제본 하나만 지워서는 불충분
관측
p99, 정족수 미충족, 분기 수
파티션별 QPS·Merkle 차이
W/R을 낮추기 전 원인부터 분석
비용
복제 N, 수리 주기, 핫 키
원본 10TB × N=3 = 30TB
모두 설계 가정 기반 예시
출처
Dynamo 논문·Cassandra 문서
검토일 2026-08-29
제품별 기본값으로 일반화하지 않음
면접 모드 · 추가 질문05:00
“N=3에서 W=1, R=1을 선택하면 어떤 장애와 일관성 문제가 생기며, 고객 장바구니와 결제 잔액에 같은 정책을 적용할 수 있을까요?”
요구사항부터 분리W/R 트레이드오프충돌 책임 위치
답변 구조 보기 4단계
  1. 규모·가용성 우선순위로 CAP 지점을 먼저 선언한다.
  2. 파티셔닝(일관된 해싱) → 복제(N) → 정족수(W,R) 순으로 설계를 쌓는다.
  3. 충돌 시나리오를 직접 만들어 해결 책임 위치를 설명한다.
  4. 장애 감지(가십)와 사본 수리(Merkle)로 운영 관점을 마무리한다. 이번 선택: 장바구니처럼 병합 가능한 데이터는 가용한 쓰기와 형제 버전을 허용한다. 깨지는 신호: 형제 버전과 hinted handoff 체류가 늘면 실패 감지·복제 배치를 먼저 확인한다. 다음 검증: 단절 중 동시 쓰기, 복구 뒤 병합, anti-entropy 완료까지를 장애 주입으로 재현한다.
INTERVIEW ↔ PRACTICE · 면접과 실무의 차이

같은 키의 두 쓰기를 보존하고 세 사본을 다시 수렴시키기

INTERVIEW · 면접

정족수 숫자보다 동시 쓰기와 병합 책임을 먼저 설명합니다.

  • 네트워크 단절 중 같은 키에 생긴 두 버전을 예로 듭니다.
  • W+R>N의 교집합과 선형 일관성 보장의 차이를 설명합니다.
  • 병합 불가능한 키는 리더·조건부 쓰기로 분리합니다.
PRACTICE · 실무

형제 버전 생성부터 anti-entropy 완료까지 장애 주입으로 검증합니다.

  • 형제 버전 수와 hinted handoff 체류 시간을 함께 관측합니다.
  • 병합 뒤 세 사본의 버전 해시와 Merkle 결과를 대사합니다.
  • 클록 오차에서 last-write-wins가 값을 잃는지 회귀 시험합니다.
NEXT CASE STUDY채팅 시스템 설계
EDITORIAL NOTES

작성·검토·참고 자료

콘텐츠 원칙
이 문서는 독립적으로 재작성한 한국어 학습 자료입니다. 사실과 학습용 설계 가정을 구분합니다.
작성·기술 검수
프로젝트 운영자가 직접 작성·기술 검토했습니다. 주제별 공식·1차 자료와 명시적인 설계 가정을 확인하며, 독립적인 제3자 검수가 아닙니다. 경력 범위와 검수 원칙 보기
최종 검토
예상 학습 시간
22분

참고 자료

사실 오류·출처 정정은 문의·정정 페이지로 알려 주세요.