Read Repair의 정의
분산 데이터베이스는 하나의 데이터를 여러 노드에 복제해서 저장한다. 그런데 네트워크 지연이나 일시적인 장애로 인해 특정 노드에만 데이터 반영이 늦어지면, 노드 간 데이터가 서로 다른 상태가 될 수 있다. 이를 ‘복제본 불일치’라고 부른다. Read Repair는 클라이언트가 데이터를 읽는 시점에 이 불일치를 감지하고 자동으로 최신 값으로 맞춰주는 복구 메커니즘이다. 즉, 읽기(Read) 작업이 발생할 때마다 곁다리로 복구(Repair)까지 수행하는 방식이다. Cassandra, DynamoDB 같은 분산 스토리지 시스템에서 널리 사용된다.
동작 원리와 예시
Read Repair의 동작 과정은 비교적 단순하다.
- 클라이언트가 데이터를 요청하면 여러 복제 노드에 동시에 값을 조회한다.
- 각 노드가 반환한 값과 타임스탬프(버전 정보)를 비교한다.
- 가장 최신 값을 클라이언트에게 응답으로 돌려준다.
- 오래된 값을 가진 노드에는 최신 값을 다시 써서 동기화한다.
비유하자면 세 명의 친구에게 동시에 ‘오늘 몇 시에 모이기로 했지?’라고 물었을 때, 두 명은 ‘7시’라고 답하고 한 명은 ‘6시’라고 답했다면, 다수의 답변인 ‘7시’를 정답으로 채택하고 ‘6시’라고 답한 친구에게 ‘아니야, 7시야’라고 알려주는 것과 같다. 이렇게 읽기 요청 한 번으로 정답 확인과 오류 정정이 동시에 이루어진다.
실무에서 왜 쓰는가
분산 시스템에서는 모든 노드가 항상 100% 동기화된 상태를 유지하기가 매우 어렵다. 강한 일관성을 강제하면 쓰기 성능이 크게 떨어지기 때문에, 대부분의 시스템은 최종적 일관성(Eventual Consistency) 모델을 채택한다. Read Repair는 이 최종적 일관성을 현실적으로 달성하는 핵심 수단이다. 별도의 배치 작업 없이도 읽기 요청이 누적되면서 자연스럽게 데이터가 정합해지기 때문에, 운영 부담이 적고 시스템 자원도 효율적으로 쓸 수 있다. 다만 읽기 시점에 복구 로직이 추가되므로 응답 속도에 약간의 오버헤드가 생길 수 있어, 실무에서는 read_repair_chance와 같은 설정값으로 복구 빈도를 조절하며 성능과 일관성 사이의 균형을 맞춘다.