백엔드
레거시 결제 원장을 확장 가능한 시스템으로
두줄요약
20년 된 결제 원장을 MySQL 기반 신규 구조로 전환한 사례를 다뤘습니다. 무중단 마이그레이션과 장애 복구 경험을 통해 확장성과 회복 탄력성을 높였습니다.
문제 상황
- 20년 이상 운영된 레거시 결제 원장의 구조적 한계와 누적된 복잡성
- 결제수단별로 다른 테이블 구조, 도메인 간 강한 결합, 결제 확장 제약
- 수억 건 규모 데이터 이관과 운영 중 장애 대응이 필요한 전환 과제
구조와 흐름
- MySQL 기반 신규 원장을 독립 구축하고 approve 공통 테이블 중심으로 재설계
- 취소 데이터는 INSERT-only로 관리해 불변성, 히스토리 추적, 데드락 완화 확보
- Kafka 이벤트, 도메인 분리, 결제와 승인 개념 분리로 결합도 감소와 복합결제 지원
해결 방법
- 기존 원장 우선 저장 후 신규 원장 비동기 적재로 무중단 전환
- RO DB 검증 배치와 멱등성·재적재 체계로 누락 데이터 보정
- 별도 마이그레이션 서버, Bulk Insert, 로컬 캐시, 네트워크 대역폭 조정으로 대규모 이관 수행
주의할 점
- 데이터 증가 시 쿼리 옵티마이저의 실행 계획 변화와 풀스캔 가능성
- 멀티 원장, 외부 원천사, MSA 타임아웃 불일치로 인한 정합성 이슈
- Outbox, 재발송, 로그 복구, 멱등키 같은 운영 복구 장치 필요
적용해볼 점
- 신규 테이블 설계 시 운영 데이터 규모까지 포함한 쿼리 검증
- 비동기 마이그레이션과 정합성 보정 배치의 병행
- 장애 복구 가능한 구조와 멱등성 중심 이벤트 설계