노트

최종 일관성

Eventual Consistency

백엔드#db#architecture · 연결된 개념 18개

쉽게 말하면

최종 일관성은 한 번에 묶을 수 없는 저장소끼리의 약속이에요. 본사가 가격표를 바꾸면 지점들이 차례로 따라 바꿔서, 잠깐은 달라 보여도 더 바뀌지 않으면 결국 모두 같아지죠.

비유가 깨지는 곳 '결국 같아진다'는 저절로 되는 게 아니에요. 누락·순서 꼬임·중복이 생기니 재시도·버전 비교·멱등 처리·주기적 재동기화로 틈을 메워요. 재고·결제 판단은 복사본 대신 원본을 조회해요.

최종 일관성(eventual consistency)은 "지금 당장은 저장소마다 값이 다를 수 있지만, 새 변경이 멈추면 결국 같아진다"는 보장이다. 원본 DB와 검색 색인·캐시·다른 서비스처럼 물리적으로 분리된 저장소를 한 트랜잭션으로 묶을 수 없을 때 받아들이는 일관성 모델(consistency model)이다.

상품명 수정 → ① DB 반영(즉시) → ② 검색 색인 갱신(수백 ms~수 초 뒤)
              ①과 ② 사이: DB엔 새 이름, 검색엔 옛 이름

BASE

분산 시스템과 NoSQL 쪽에서 ACID의 대비로 쓰는 말이다. Basically Available(기본적으로 가용), Soft state(상태가 바뀌는 중일 수 있음), Eventual consistency. 강한 일관성(strong consistency) 일부를 내주고 가용성과 확장성을 얻는다.

틈을 메우는 방법

문제증상대응
누락DB는 바뀌었는데 복사본은 그대로재시도, 트랜잭셔널 아웃박스 패턴, CDC (변경 데이터 캡처)
순서 꼬임"수정"이 "삭제"보다 늦게 도착버전·타임스탬프 비교 후 오래된 것 무시
중복같은 이벤트가 두 번멱등성 처리
드리프트조금씩 어긋남이 쌓임주기적 전체 재동기화(재색인)

마지막의 주기적 전체 재동기화는 거의 모든 검색 시스템이 안전망으로 둔다.

설계 질문

  1. 얼마나 늦어도 되나? 검색 결과가 1초 늦는 건 괜찮다. 재고·결제처럼 즉시성이 필요한 판단은 복사본이 아니라 원본을 조회한다
  2. 틀리면 얼마나 치명적인가? "재고 0인데 검색에 보임"은 주문 단계에서 원본을 다시 확인하도록 설계한다

읽기 복제본의 복제 지연(replication lag)도 같은 성격이다. 여러 사람이 동시에 편집하는 협업 도구는 CRDT처럼 충돌 없이 수렴하는 자료구조로 이 문제를 푼다. 확장할수록 마주치는 선택은 사용자 수에 따른 규모 확장에서 볼 수 있다.

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 데이터 무결성

    데이터 무결성(data integrity)은 저장된 데이터가 정확하고 일관되며 믿을 수 있는 상태로 유지되는 것이다. 재고가 100개로 보이는데 실제로 50개라면 무결성이 깨진 것이다. 관계형 DB는 이를 제약 조건(constraint)으로 강제한다.

  • 결합도

    한 요소를 바꿀 때 다른 요소도 바꿔야 하는 관계. 결합도는 언제나 "어떤 변경에 대해" 결합되어 있는지를 함께 말해야 의미가 있다. 같은 두 모듈도 어떤 변경에는 묶여 있고 어떤 변경에는 독립적일 수 있다.

  • 심플 디자인

    켄트 벡이 XP(Extreme Programming)에서 제시한 단순한 설계의 네 가지 규칙. 우선순위 순으로 ① 모든 테스트를 통과하고 ② 의도를 드러내고 ③ 중복이 없고 ④ 요소가 가장 적다. 마틴 파울러가 이렇게 정리한 형태가 널리 쓰인다.

  • 구조와 동작, 옵션의 가치

    켄트 벡이 정리 시점을 판단하려고 꺼내는 경제학 틀. 소프트웨어는 두 가지 가치를 만든다. 오늘 하는 일(동작)과, 내일 새로 할 수 있게 되는 일(옵션)이다. 구조는 동작을 바꾸지 않지만 옵션을 만든다.

  • 예외 삼키기

    예외를 잡아 놓고 아무 처리 없이 흘려보내는 안티패턴(Anti-pattern). 빈 catch뿐 아니라 debug 레벨로만 찍고 정상인 척 진행하는 것도 마찬가지다.

보기 옵션