쇼핑몰 세트상품 SKU를 가상재고로 한 달 운영해봤더니

profile_image
작성자 SKU운영실험가 배시온
댓글 0건 조회 5회

단품은 충분히 남아 있는데 세트상품만 품절되고, 반대로 세트 주문을 받은 뒤 구성품 하나가 없어 출고가 멈춘 적이 있나요? 저도 세트마다 실물 재고를 따로 배정했을 때 같은 문제를 반복해서 겪었습니다. 그래서 한 달 동안 세트 전용 재고를 쌓지 않고, 구성품 SKU의 가용 수량으로 세트 재고를 계산하는 가상재고 방식을 적용해봤습니다.

처음에는 단순히 숫자 하나를 자동 계산하면 끝날 줄 알았습니다. 실제로는 예약 주문, 사은품, 포장 자재, 채널별 안전재고처럼 화면에 잘 드러나지 않는 조건이 정확도를 좌우했습니다. 아래 내용은 복잡한 시스템을 새로 사기 전에 기존 상품 관리 도구와 스프레드시트에서도 시험할 수 있었던 숨은 활용법을 중심으로 구성했습니다.

세트 재고를 별도 창고처럼 다루자 오히려 숫자가 꼬였습니다

실물 세트와 판매용 세트 코드는 구분해야 합니다

기존 운영에서는 샴푸 2개와 트리트먼트 1개를 미리 포장한 뒤 ‘헤어케어 세트’라는 독립 SKU로 입고했습니다. 문제는 낱개 주문이 몰릴 때였습니다. 세트 포장을 뜯으면 단품 재고는 늘어나지만 시스템 속 세트 수량은 그대로여서, 직원이 두 곳의 수량을 동시에 수정해야 했습니다. 수정 시점이 몇 분만 어긋나도 멀티채널 주문이 겹치며 과판매가 발생했습니다.

가상재고로 바꾼 뒤에는 세트 SKU를 판매 화면에서만 존재하는 부모 코드로 두고, 실제 차감은 구성품 SKU에 연결했습니다. 예를 들어 A 상품 2개와 B 상품 1개가 필요한 세트라면 판매 가능 수량은 ‘A 가용재고÷2’와 ‘B 가용재고÷1’ 가운데 작은 값입니다. A가 17개, B가 6개라면 세트는 최대 6개만 판매할 수 있습니다.

  • 부모 SKU: 고객이 주문하는 세트상품 코드로 사용합니다.
  • 자식 SKU: 창고에서 실제 피킹하고 차감하는 단품 코드입니다.
  • 구성 수량: 세트 한 개를 만드는 데 필요한 자식 SKU별 개수입니다.
  • 가용재고: 현재고가 아니라 예약·불량·안전재고를 제외한 수량을 뜻합니다.
숨은 팁: 이미 포장이 끝난 선물세트는 실물 SKU로, 주문 후 조립하는 묶음상품은 가상 SKU로 분리하면 재고 계산과 현장 동선이 동시에 단순해집니다.

현재고 대신 가용재고를 넣었더니 품절 알림이 늦지 않았습니다

판매 가능한 한 개는 장부 속 한 개와 다릅니다

첫 주에는 구성품의 현재고만 불러와 세트 수량을 계산했습니다. 숫자는 그럴듯했지만 결제 대기 주문과 교환용 보유분이 빠져 있었습니다. 현재고 30개 중 미출고 주문이 8개이고 교환 대응용으로 3개를 남겨야 한다면, 계산에 사용할 수량은 19개입니다. 이 차이를 무시하면 세트상품이 단품보다 구성품을 먼저 가져가는 상황이 생깁니다.

상품을 보유하는 것과 실제 판매에 사용할 수 있는 수량은 같은 개념이 아닙니다. 기본 용어가 혼동된다면 재고의 개념과 역할을 먼저 확인해두면 현재고, 가용재고, 안전재고를 구분하기 쉽습니다. 저는 아래 공식을 모든 구성품에 동일하게 적용한 뒤 가장 작은 결과만 세트 채널로 전송했습니다.

  1. 현재고에서 결제 완료 후 미출고된 예약 수량을 뺍니다.
  2. 검수 중인 반품과 파손·유통기한 임박 수량을 제외합니다.
  3. 단품 판매를 보호할 채널 안전재고를 뺍니다.
  4. 남은 수량을 세트별 필요 개수로 나누고 소수점 이하는 버립니다.
  5. 구성품별 계산값 중 최솟값을 세트의 최종 가상재고로 사용합니다.

여기서 잘 알려지지 않은 요령은 안전재고를 모든 채널에 똑같이 적용하지 않는 것입니다. 주문 취소가 즉시 반영되는 자사몰은 2개, 재고 전송이 지연되는 외부 채널은 5개처럼 완충 폭을 달리했습니다. 덕분에 판매 기회를 과하게 막지 않으면서 연동 지연으로 생기는 과판매를 줄일 수 있었습니다.

구성품 하나가 여러 세트에 쓰일 때 우선순위를 숨겨뒀습니다

공용 SKU는 먼저 주문된 상품만 따라가면 부족합니다

가장 까다로운 경우는 동일한 파우치가 여행 세트, 선물 세트, 체험 세트에 모두 들어가는 상황이었습니다. 각각의 세트 수량을 따로 계산하면 파우치 20개를 세 상품이 동시에 20개씩 보유한 것처럼 노출할 수 있습니다. 이를 피하려고 공용 구성품에 배분 비율과 판매 우선순위라는 숨은 필드를 추가했습니다.

예를 들어 마진이 높고 광고 중인 선물 세트에 파우치 가용재고의 50%, 상시 판매하는 여행 세트에 30%, 신규 고객용 체험 세트에 20%를 배정했습니다. 단, 실제 재고가 기준치 아래로 내려가면 체험 세트를 먼저 숨기고 선물 세트는 유지하도록 조건을 걸었습니다. 모든 세트를 조금씩 품절시키는 대신 중요한 상품의 판매 시간을 확보하는 방식입니다.

  • 광고 연결 상품: 캠페인 종료 전까지 우선 배분하되 별도 상한을 둡니다.
  • 정기구독 상품: 다음 결제 예정 수량을 먼저 예약해 고객 이탈을 막습니다.
  • 상시 단품: 고객 문의와 교환에 필요한 최소 수량을 보호합니다.
  • 체험·증정 세트: 부족 시 자동 비노출하는 첫 번째 후보로 지정합니다.

상품 수가 많다면 SKU 행마다 ‘공용 구성품 그룹’을 표시해두는 것도 효과적입니다. 같은 그룹에 속한 세트의 예상 주문량을 합산하면 한 구성품이 몇 군데에서 중복 약속되고 있는지 빠르게 보입니다. 인벤토리 용어 설명처럼 재고를 하나의 운영 자원으로 바라보면, 상품별 숫자보다 전체 배분 관계가 중요하다는 점을 이해하기 쉽습니다.

사은품과 포장재도 SKU로 만들자 출고 중단 원인이 보였습니다

판매하지 않는 물건도 세트를 멈출 수 있습니다

둘째 주에 예상하지 못한 품절이 발생했습니다. 본품은 충분했지만 세트 전용 상자가 떨어져 출고팀이 일반 택배 상자로 대체하고 있었던 것입니다. 상품 관리 화면에는 상자가 등록돼 있지 않아 운영팀은 원인을 알지 못했습니다. 이후 쇼핑백, 리본, 설명서, 샘플까지 비판매 구성품 SKU로 등록했습니다.

모든 소모품을 지나치게 세밀하게 추적하면 입출고 작업이 늘어나는 단점도 있습니다. 그래서 고객 경험이나 법정 표기, 상품 보호에 직접 영향을 주는 자재만 세트 계산에 포함했습니다. 테이프처럼 쉽게 대체할 수 있는 공용 자재는 주 단위 소모량으로 발주하고, 전용 상자처럼 대체가 어려운 자재는 주문 한 건당 한 개씩 자동 차감했습니다.

  • 전용 패키지와 인쇄 설명서는 세트 구성표에 정식으로 연결합니다.
  • 선택형 사은품은 옵션별 자식 SKU로 만들어 실제 선택 수량을 차감합니다.
  • 무작위 증정품은 하나의 공용 그룹으로 묶고 대체 가능 여부를 기록합니다.
  • 샘플 재고가 임계치에 도달하면 세트 전체 품절 대신 증정 문구만 자동 해제합니다.
  • 포장재 입고 단위가 100장이라도 사용 단위는 1장으로 환산해 관리합니다.
운영 팁: ‘없으면 출고가 멈추는가?’라는 질문에 예라고 답할 수 있는 자재만 필수 구성품으로 넣으세요. 나머지는 알림 대상에는 포함하되 세트 판매 수량을 0으로 만드는 조건에서는 제외하는 편이 실용적입니다.

이 방식의 의외의 장점은 원가 추적이었습니다. 무료라고 생각했던 선물 포장에도 상자, 완충재, 카드, 작업 시간이 들어갑니다. 비판매 SKU에 단가를 입력하자 세트별 실질 이익이 보였고, 판매량은 많지만 포장비 때문에 수익이 낮은 조합을 찾아낼 수 있었습니다.

동기화 횟수보다 재계산을 일으키는 사건을 정했습니다

5분 주기 갱신만으로는 주문 순간을 따라잡지 못합니다

처음에는 가상재고를 5분마다 다시 계산하면 충분하다고 생각했습니다. 하지만 인기 세트가 짧은 시간에 몰리면 다음 갱신 전까지 같은 구성품이 여러 채널에서 팔렸습니다. 반대로 주문이 거의 없는 새벽에도 전체 SKU를 계속 계산하니 불필요한 API 호출만 늘었습니다. 해결책은 시간표가 아니라 재고가 달라지는 사건을 기준으로 갱신하는 것이었습니다.

주문 생성, 주문 취소, 출고 확정, 반품 검수 완료, 입고 확정, 구성표 변경이 발생할 때 관련된 세트 SKU만 다시 계산했습니다. 여기에 10~15분 단위 전체 검산을 보조 장치로 두면 누락된 이벤트도 복구할 수 있습니다. 상품 수가 많을수록 모든 재고를 매번 갱신하는 방식보다 공용 구성품에 연결된 세트만 찾아 계산하는 방식이 빠릅니다.

  1. 주문 접수: 결제 직후 구성품을 예약하고 세트 가상재고를 낮춥니다.
  2. 취소 접수: 출고 작업 전이라면 예약 수량을 즉시 반환합니다.
  3. 피킹 실패: 장부 수량을 되돌리지 말고 조사 보류 위치로 이동합니다.
  4. 입고 확정: 검수 완료 수량만 가용재고에 더합니다.
  5. 구성 변경: 이전 주문에는 옛 구성표, 신규 주문에는 새 구성표를 적용합니다.

마지막 항목은 특히 중요했습니다. 운영 중인 세트에 사은품을 하나 추가하면서 과거 주문까지 새 구성으로 바뀌면 피킹 수량이 맞지 않습니다. 상품 생애주기와 구성 변경 이력을 다루는 개념은 PLM 소프트웨어 설명에서도 참고할 수 있습니다. 거창한 시스템이 없더라도 구성표에 적용 시작 시각과 종료 시각 두 칸을 두면 주문 당시의 조합을 보존할 수 있습니다.

세트가 팔리면 단품 판매를 막아야 하느냐고 묻는다면

정답은 차단이 아니라 구성품별 보호선입니다

한 달 운영 후 가장 자주 받은 질문은 “세트 주문이 늘면 단품을 아예 품절 처리해야 하나요?”였습니다. 단품 판매를 통째로 막으면 과판매 위험은 줄지만 검색 유입과 재구매 주문까지 잃을 수 있습니다. 반대로 모든 수량을 열어두면 세트 구성품이 부족해집니다. 실제로 효과가 좋았던 방법은 각 구성품에 단품 보호 수량을 설정하고 상황에 따라 보호선을 움직이는 것이었습니다.

예를 들어 A 상품이 40개 남았고 하루 단품 판매량이 평균 6개라면 이틀치인 12개를 단품용으로 보호할 수 있습니다. 세트 계산에는 나머지 28개만 넣습니다. 다만 입고가 확정돼 있고 공급 지연 가능성이 낮다면 보호 기간을 하루로 줄이고, 연휴 직전이나 공급처 휴무 기간에는 3~4일로 늘립니다. 숫자를 고정값으로 두기보다 다음 입고까지 남은 시간과 최근 판매 속도를 함께 보는 것이 핵심입니다.

  • 재입고가 이틀 이내 확정된 상품은 보호 수량을 낮춰 세트 판매 기회를 넓힙니다.
  • 교환 요청이 잦은 사이즈·색상 SKU는 평균 교환량까지 별도로 남겨둡니다.
  • 세트 할인율이 단품보다 지나치게 높다면 재고보다 가격 정책을 먼저 점검합니다.
  • 구성품이 보호선 아래로 내려가면 세트 전체를 삭제하지 말고 일시 품절로 전환합니다.
  • 입고가 취소되면 광고 상품, 정기배송, 일반 세트 순으로 영향을 확인합니다.

저는 매일 오전에 ‘가상재고 0인데 구성품 현재고는 남은 세트’만 따로 필터링했습니다. 이 목록에는 보호 수량이 과도하거나, 사은품 하나가 부족하거나, 구성표 단위가 잘못 입력된 상품이 모였습니다. 독자님의 쇼핑몰에서도 세트가 품절인데 본품이 남아 있다면 전체 재고부터 늘리지 마세요. 어느 구성품의 어떤 보호선이 판매 가능 수량을 0으로 만들었는지 역산하면 발주 없이 풀 수 있는 병목을 발견할 가능성이 높습니다.

쇼핑몰 세트상품 SKU를 가상재고로 한 달 운영해봤더니

댓글목록

등록된 댓글이 없습니다.