[시스템 설계] 시나브로 Phase 01 - 한정판 굿즈 판매 시나리오

한정판 굿즈 판매 전체 시나리오

Sinabro동시성JPAMySQL

Phase 01. 시나브로 한정판 굿즈 판매 시나리오

1. 서비스 개요

시나브로는 글로벌 1순위 쇼핑몰을 목표로 하는 전자상거래 서비스다.
대규모 트래픽에서도 재고와 결제의 정합성을 유지하고 사용자에게 구매 결과를 정해진 시간 안에 제공해야 한다.

2. 상황

2026년 10월 13일, 치이카와 한정판 굿즈 판매를 시작한다.
판매 가능 수량은 1,000개이며 로그인한 구매자 1명당 최대 1개만 구매할 수 있다.
서로 다른 구매자 100,000명이 10초 동안 구매를 시도한다. 일부 구매자는 응답이 늦어지면 구매 버튼을 다시 누르거나 페이지를 새로고침한다.
상품 페이지의 남은 수량은 1초마다 갱신된다.
화면에 300개가 남아 있다고 표시되더라도 다른 구매자가 먼저 재고를 확보하면 구매에 실패할 수 있다.

3. 실험 조건

항목조건
상품치이카와 한정판 굿즈 1종
초기 재고1,000개
구매자로그인한 서로 다른 사용자 100,000명
최초 구매 요청10초 동안 사용자당 1회, 초당 10,000건
재시도최초 요청과 별도 집계하며 동일 구매 의도로 처리
구매 제한사용자 ID 기준 최대 1개
구매 순서엄격한 선착순은 보장하지 않음
결제사정상 동작하며 유효한 결제를 모두 승인
주문 성공결제 승인·재고 확정·주문 확정이 모두 완료된 상태

첫 실험은 결제 장애를 제외한다.
정상 결제의 지연 조건은 실험 전에 고정하고 기록하며 아래 완료 기한을 충족할 수 있어야 한다.

4. 구매 및 정합성 요구사항

  • 서로 다른 구매자 정확히 1,000명의 주문만 성공해야 한다.
  • 나머지 99,000명의 구매는 최종 실패해야 한다.
  • 동일 구매자가 여러 번 요청해도 성공 주문과 결제는 각각 최대 1건이어야 한다.
  • 초과 판매와 중복 결제는 발생하지 않아야 한다.
  • 가용 재고는 음수가 될 수 없다.
  • 결제·재고·주문 상태는 최종적으로 일치해야 한다.
  • 재시도하거나 재접속해도 기존 구매의 최종 결과를 확인할 수 있어야 한다.
  • 동일 구매의 재시도는 최초 요청의 처리 기한을 연장하지 않는다.

5. 사용자 결과 표시와 시간 제약

클라이언트는 구매 요청 직후 처리 중을 표시한다. 구매 처리가 완료되면 성공 또는 실패 사유가 포함된 실패를 표시한다.

구간최대 시간
서버 요청 수신 → 최종 결과 확정9초
결과 확정 → 클라이언트 표시1초
클라이언트 구매 요청 → 최종 결과 표시10초

세 조건을 모두 충족해야 하며 전체 10초에는 요청 전달과 결과 전달에 걸리는 시간도 포함한다.
화면 표시 시간은 연결이 유지되는 정상 클라이언트를 기준으로 검증한다.

  • 실패 사유는 품절, 구매 제한 초과 등으로 구분한다.
  • 결과는 페이지 새로고침 없이 자동으로 표시한다.
  • 페이지를 닫았더라도 재접속하면 구매 내역에서 결과를 확인할 수 있어야 한다.
  • 동일 구매 결과가 재시도로 인해 중복 표시되지 않아야 한다.
  • 결과 전달 실패가 이미 확정된 주문 결과를 변경해서는 안 된다.
    이 시나리오에서는 화면의 최종 결과 표시를 필수로 한다. 이메일·문자·앱 푸시는 첫 실험 범위에서 제외한다.

6. 남은 수량 조회

  • 상품 페이지의 남은 수량은 1초 주기로 갱신한다.
  • 표시된 수량은 조회 시점의 정보이며 구매를 보장하지 않는다.
  • 실제 구매 가능 여부는 구매 처리 시 권위 있는 재고 저장소에서 판단한다.
  • 품절이 확정된 이후 신규 구매 요청은 빠르게 실패 처리한다.

7. 비용 제약

위 정합성과 시간 제약을 모두 충족하는 구성 중 판매 이벤트 1회당 인프라 비용을 최소화한다.
비교 대상에는 애플리케이션, DB, 캐시, 메시지 브로커, 로드밸런서와 네트워크 비용을 포함한다. 부하 발생기 비용과 외부 결제 수수료는 별도로 기록한다.
설계별 비교에는 동일한 데이터·부하·실행 시간·성능 기준을 사용한다. 클라우드에서는 비용을 로컬에서는 CPU·메모리·저장소 사용량을 기록한다.

8. 검증 기준

확정 주문 수 = 1,000
성공한 서로 다른 구매자 수 = 1,000
최종 실패 구매자 수 = 99,000

결제 승인 수 = 1,000
확정 판매 수량 = 1,000
남은 재고 = 0

초과 판매 = 0
중복 결제 = 0
사용자당 중복 성공 주문 = 0
처리 기한이 지난 미확정 구매 = 0
최종 결과 표시까지 10초를 초과한 구매 = 0

최초 요청과 재시도를 구분해 집계한다.
구매 결과는 사용자 기준으로 검증하고 품절·구매 제한 같은 업무상 실패는 서버 오류·타임아웃과 별도로 측정한다.

9. 설계 과제

100,000명이 10초 동안 구매를 시도하는 환경에서 구매자당 1개 제한과 정확히 1,000건의 주문 성공을 보장하고 각 구매 결과를 요청 후 최대 10초 이내에 표시하는 시스템을 최소 비용으로 설계하고 검증하시오.
결과물에는 구매 흐름, 재고 확보 방식, 중복 요청 처리, 결과 전달 방식, 과부하 대응, 인프라 구성과 비용 비교 근거를 포함한다.
결제 실패·지연·응답 유실과 서버 중단은 후속 장애 시나리오로 다룬다. 해당 시나리오에서는 결제 결과가 불명확한 상태를 시간 초과만으로 실패 처리하지 않으며 결과 확인·취소 조건과 완료 기한을 별도로 정의한다.