똑닥 멤버십과 MongoDB 트랜잭션 충돌 방지 방법
백엔드
똑닥 멤버십과 MongoDB 트랜잭션 충돌 방지 방법
두줄요약
MongoDB 트랜잭션 도입 과정에서 멤버십 결제와 해지 로직이 충돌하며 이중 결제가 발생했습니다. 공통 키 기반 Lock과 모니터링으로 동시 접근을 제어해 문제를 줄였습니다.
문제 상황
- 멤버십 정기 결제와 결제수단 변경, 해지/해지 취소가 같은 데이터에 겹치며 이중 결제와 Write Conflict 발생
- MongoDB 트랜잭션 도입으로 일관성을 확보하려 했지만, 운영 환경에서 동시 접근 충돌이 드러남
원인 분석
- 동일 문서를 여러 트랜잭션이 동시에 수정하려는 구조
- 결제 관련 API와 이벤트가 같은 멤버십 데이터를 중복 업데이트하는 흐름
- 해지, 취소, 즉시 결제 로직이 같은 시점에 맞물린 타이밍 이슈
해결 방법
- 사용자 업데이트 관련 API와 이벤트에 공통 키 기반 Lock 적용
- 멤버십 결제 재시도, 결제수단 변경, 해지 관련 처리의 동시 실행 차단
- 중복 결제 이상을 즉시 감지하는 모니터링 알림 시스템 구축
주의할 점
- 트랜잭션 자체보다 충돌 가능성까지 포함한 설계 필요
- 운영 환경에서는 QA에서 드러나지 않던 동시성 문제 점검 필요
- 동일 리소스 업데이트 경로 전반의 직렬화 전략 검토 필요
