불변조건
무엇을 지키고, 어디서 강제하는가
검증 가능한 불변조건 여섯 개를 세우고, 동일 지갑 경합의 원인을 추론이 아니라 측정으로 확정한 기록.
외부 불확실성
응답이 사라졌을 때
타임아웃을 실패로 확정하지 않는 UNKNOWN 상태와, 실험 27종이 문서와 테스트 밖에서 찾아낸 결함 12건.
이중 쓰기와 원장
DB, 메시지, 기관 기록을 맞추기
Transactional Outbox와 멱등 소비자, 기관에 물어보지 못한 날을 구분하는 대사, 세 층에서 강제하는 이중부기 원장, 그리고 브로커·느린 외부기관·만료되는 분산락 앞에서 어떤 장치가 무엇을 막는지 직접 만들어 본 실험.
- 5ParityPay로 검증하는 결제 정합성 5 - DB 커밋과 Kafka 발행 사이: Transactional Outbox와 at-least-once 소비자 Kafka · Transactional Outbox · Idempotency
- 6ParityPay로 검증하는 결제 정합성 6 - 대사: "기관에 물어보지 못했다"와 "기관에 기록이 없다"는 다른 상태다 Reconciliation · Ledger · Consistency
- 7ParityPay로 검증하는 결제 정합성 7 - 애플리케이션 코드를 믿지 않는 원장: 이중부기를 계정 체계, DB 제약, 속성 테스트로 강제하기 Ledger · Double Entry · PostgreSQL
- 8ParityPay로 검증하는 결제 정합성 8 - Kafka에서 중복·유실·순서 역전을 직접 만들어 보기: 멱등 소비자와 Outbox가 막는 것과 못 막는 것 Kafka · Transactional Outbox · Idempotency
- 9ParityPay로 검증하는 결제 정합성 9 - 느린 기관 앞에서 결제 서버를 지키기: 타임아웃, 재시도, 차단기, 리미터, 벌크헤드가 각각 무엇을 막는가 Resilience · Circuit Breaker · Bulkhead
- 10ParityPay로 검증하는 결제 정합성 10 - 락 lease가 트랜잭션보다 먼저 끝나면 정말 정합성이 깨지는가: SETNX 락, Watchdog, fencing token, 그리고 락 없는 구조의 실측 Distributed Lock · Redis · Fencing Token