세계적인 전자상거래 플랫폼 쇼피파이(Shopify)가 결제 과정에서 발생하는 재고 중복 판매를 방지하기 위한 핵심 예약 시스템을 기존의 인메모리 데이터베이스(Redis)에서 관계형 데이터베이스(MySQL)로 성공적으로 교체했습니다. 이 전환은 2025년 블랙 프라이데이와 같은 대규모 트래픽 상황에서도 분당 510만 달러에 달하는 판매액을 안정적으로 처리하고, 재고의 정확성을 보장하기 위한 중요한 조치입니다.
쇼피파이는 MySQL 8의 `SKIP LOCKED` 기능을 활용해 다른 트랜잭션이 잠근 행을 건너뛰고 사용 가능한 재고를 즉시 반환하도록 설계했습니다. 특히, 재고 1개당 1행을 할당하는 독특한 구조를 채택하고, 품목 및 위치별 가용 행 풀을 최대 1,000개로 제한하여 잠금 경합과 테이블 크기를 효율적으로 관리했습니다. 풀이 고갈될 경우 재고 원장에서 즉시 보충하는 메커니즘을 도입해 극심한 플래시 세일 상황에서도 재고 부족으로 인한 판매 기회 손실을 막았습니다. 또한, `READ COMMITTED` 격리 수준과 일관된 잠금 순서, `UNION ALL` 배치를 통해 교착 상태와 데이터베이스 왕복 횟수를 최소화했습니다.
초기에는 예상치 못한 데이터베이스 연결 점유 시간으로 인해 처리량 한계에 부딪혔으나, SQL 태그와 ProxySQL 추적을 통해 예약 시스템 외의 다른 결제 프로세스가 연결을 불필요하게 오래 점유하고 있음을 발견했습니다. 이를 최적화하여 기본 데이터베이스 읽기의 50%와 트랜잭션의 33%를 제거함으로써 전체 시스템의 처리량을 크게 개선했습니다. 쇼피파이는 섀도 모드(Shadow Mode)와 킬 스위치(Kill Switch)를 활용한 점진적 전환 방식을 통해 위험을 최소화하며 성공적으로 시스템을 배포했습니다. 이러한 사례는 MySQL 8과 같은 최신 관계형 데이터베이스 기능이 대규모 동시성 문제를 해결하는 데 충분히 강력하며, 기존 기술 스택에 대한 재평가가 필요함을 시사합니다.