🛒 Backend Engineering · 3/9 · 약 7분

Backend Engineering 시리즈 전체 보기

예약이 접수되었다는 사실과 지금 배정할 재고가 있다는 사실은 같지 않다. 둘을 한 숫자로 합치면 예약이 재고를 지나치게 오래 점유하거나 현재 주문이 예약 몫을 먼저 가져갈 수 있다.

독립적인 가상 상품 예약 사례를 사용해 미래 수요와 현재 자원의 수명 주기를 나눠 보았다. 예약 등록, 임시 할당, 만료, 확정을 별도 사건으로 두자 과판매를 막아야 할 순간과 사용자에게 설명할 의미가 분리됐다.

#Backend · #Inventory · #Reservation · #DomainModel

이 글에서 다룰 것

1. 예약은 미래 수요이고 할당은 현재 실행이다

가상의 수령 예약에서 며칠 뒤 상품을 원한다는 요청은 운영 계획에 중요한 신호다. 하지만 아직 특정 실물이 확보됐다는 뜻은 아니다. 입고 결과와 예약 자체가 바뀔 수 있기 때문이다.

예약을 즉시 재고 차감으로 바꾸면 변동에 대응하기 어렵다. 반대로 끝까지 단순 메모로 두면 현재 주문과 충돌한다. 그래서 예약 등록과 재고 할당을 다른 사건으로 정의한다.

이 모델의 불변 조건은 다음과 같다.

2. 할당 창이 미래와 현재를 연결한다

수령 시점이 가까워지고 실제 재고를 확인할 수 있을 때 예약을 현재 자원과 연결한다. 이 연결은 영구 소유가 아니라 정해진 시간 동안 유효한 임시 할당이다.

예약 등록 ──→ 대기
                │ 할당 조건 충족
                ↓
          재고 임시 할당
           ↙          ↘
       조건 완료       시간 만료
          ↓               ↓
       이행 확정        할당 해제