ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION423 / 1500
분산 시스템난이도 중하5분 답변 목표 · 보강본

분할된 두 지역에서 카운터를 증가시키고 나중에 합치려 합니다. 값을 그냥 더하면 왜 중복될 수 있나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

서로의 합계를 반복해서 더하면 이미 반영한 증가를 다시 셀 수 있습니다. CRDT는 정해진 상태·병합 규칙을 사용해 중복·재정렬 병합에도 수렴하도록 만드는 자료형 계열입니다.

동작 원리와 전제

G-counter는 참여자별 누적 증가값을 유지하고 병합할 때 성분별 최댓값을 취한 뒤 합산할 수 있습니다. 같은 상태를 두 번 받아도 최댓값이 같아 중복 가산하지 않습니다. 감소가 필요하면 증가·감소 두 부분을 가진 PN-counter 같은 다른 모델을 검토합니다.

선택과 실패 처리

참여자 ID 재사용·상태 유실·메타데이터 크기와 정리 조건을 관리합니다. CRDT가 모든 업무 제약을 만족시키는 것은 아니며 잔액이 음수가 되면 안 되는 전역 조건은 단순 카운터 병합으로 보장되지 않습니다.

구체적인 사례와 검증

A의 성분이 5, B의 성분이 3인 상태를 두 번 병합해도 각 성분 최댓값은 그대로여서 합계 8을 유지합니다. 전체 합계 8을 다시 더하는 방식과 차이가 있습니다. 하지만 A가 재시작하며 자기 성분을 0으로 잃거나 같은 ID를 다른 노드가 재사용하면 증가 기록이 사라지거나 충돌할 수 있습니다. 참여자 식별과 내구 상태를 보존해야 합니다. 감소를 두 카운터로 표현해도 잔액 하한 같은 전역 제약은 자동 생기지 않습니다. 수렴 가능한 통계와 강한 조건부 변경이 필요한 계정 상태를 구분하고, 메타데이터 정리의 안전 조건을 별도 설계하겠습니다.

분할·중복·역순·재시작을 시험해 같은 이벤트 집합 이후 수렴하는지 확인합니다. 보여 주는 값은 동기화 전 잠정일 수 있습니다. 충돌 없는 병합이라는 말은 비즈니스적으로 모든 동시 변경이 올바르다는 뜻이 아니라 명시된 수렴 규칙의 보장입니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: 서로의 합계를 반복해서 더하면 이미 반영한 증가를 다시 셀 수 있습니다.
  • 선택 조건: 참여자 ID 재사용·상태 유실·메타데이터 크기와 정리 조건을 관리합니다.
  • 검증 기준: 분할·중복·역순·재시작을 시험해 같은 이벤트 집합 이후 수렴하는지 확인합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • CRDT로 수렴하면 모든 재고·잔액 불변식도 자동 보장된다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 네트워크 분할 중 어느 읽기·쓰기를 성공시키고 어떤 불일치를 허용할지 어떻게 정하나요?
  • 논리 번호의 선후와 실제 인과·동시 변경을 어떤 비교로 구분하나요?
  • 완료된 쓰기 이후의 읽기와 동시에 겹친 읽기는 어떤 관찰 결과가 허용되나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기