부분 실패 케이스 직접 재현 경험 — idempotency key + outbox 패턴 적용으로 설명
졸업 프로젝트에서 간편 결제 기능을 구현하며 정합성 문제를 처음 실감했습니다. 결제 API 호출이 성공한 뒤 DB 업데이트 직전에 서버가 죽는 케이스를 테스트 중에 재현했고, 결제는 됐지만 주문 상태가 미결제로 남는 상황이 생겼습니다. idempotency_key를 결제 요청에 붙여 중복 처리를 막고, 결제 게이트웨이 상태를 주기적으로 조회해 보정하는 로직을 추가했습니다. 또한 payment_events 테이블에 이벤트를 먼저 기록하고 처리를 분리하는 outbox 패턴을 작게 적용해봤습니다. 부분 실패 시나리오를 항상 '결제는 됐지만 주문 확정이 안 됐다면?'이라는 질문을 먼저 던지는 습관이 생겼습니다.
정합성은 행복 경로가 아니라 장애 경로 설계에서 만들어진다는 걸 그때 배웠습니다.