물류·재고·매출을 연결하는 이커머스 운영 도구
창고와 판매 채널에 흩어진 정보를 모아 재고·매출·광고 성과를 확인하는 업무 도구 개발 경험입니다.

매출표 두 개를 합쳤는데 재고가 두 배가 된다면
이커머스 운영 도구를 만들며 다룬 것은 여러 창고의 재고, 판매 채널별 매출, 주문·출고 현황, 광고 성과입니다. 숫자를 한 화면에 놓는 것보다 먼저 해결해야 할 일이 있습니다. 무엇을 같은 상품으로 볼지, 어느 기간을 합칠지, 비어 있는 값은 어떻게 보여줄지 정하는 일입니다.
이 글에서는 가상 상품 SKU-A 하나를 끝까지 따라갑니다. 판매표 두 개와 재고표 하나로 시작해, 합계와 예외가 함께 보이는 작은 보고서를 만드는 실습입니다. 고객사의 이름·원본 자료·화면을 사용하지 않고 개발 경험의 핵심을 새 예제로 구성했습니다.
1. 상품 이름보다 연결 기준을 먼저 만듭니다
SKU는 상품을 구분하는 코드입니다. 이 실습에서는 같은 상품이면 판매 채널과 창고가 달라도 같은 SKU를 쓰기로 합니다. 실제 자료의 코드가 다르다면 “채널 코드 → 내부 SKU” 연결표를 먼저 만들어야 합니다. 이름이 비슷하다는 이유만으로 합치면 묶음 상품과 단품이 섞일 수 있습니다.
아래 매출은 모두 2026-09-07~09-13, 원화, 취소 반영 후 상품 매출이라는 가정입니다. 배송비·수수료·광고비는 제외했습니다. 기간과 금액 정의가 다른 파일은 먼저 기준을 맞춰야 합니다.
| 채널 | SKU | 표시 이름 | 판매 수량 | 상품 매출(원) |
|---|---|---|---|---|
| A | SKU-A | 파란 머그 | 3 | 30,000 |
| A | SKU-B | 작은 접시 | 2 | 16,000 |
| B | SKU-A | 블루 머그컵 | 2 | 20,000 |
| B | 없음 | 선물 세트 | 1 | 25,000 |
SKU-A의 매출은 50,000원, 판매 수량은 5개입니다. 코드가 없는 선물 세트는 25,000원을 버리거나 다른 상품에 붙이지 않고 연결 안 됨 목록에 남깁니다. 확정된 상품별 매출은 66,000원이고, 미연결 25,000원을 더하면 원본 합계 91,000원과 맞아야 합니다.
2. 재고는 재고표에서 한 번만 합칩니다
다음은 9월 14일 오전 9시 기준 가상 창고 스냅샷입니다. 실습에서는 총재고를 출고 가능·보류·만료의 합으로 정의합니다. “임박”은 출고 가능 수량 중 유통기한이 30일 이내인 부분입니다. 이 기준은 회사마다 다를 수 있으니 실제 적용 때는 운영 기준을 확인해야 합니다.
| 창고 | SKU | 총재고 | 출고 가능 | 보류 | 만료 | 임박(출고 가능 중) |
|---|---|---|---|---|---|---|
| 동쪽 | SKU-A | 12 | 10 | 2 | 0 | 3 |
| 서쪽 | SKU-A | 8 | 7 | 0 | 1 | 0 |
판매표의 SKU-A 두 행에 재고표 두 행을 곧바로 연결하면 네 행이 생깁니다. 그 상태에서 합계를 내면 매출과 재고가 반복되어 숫자가 부풀 수 있습니다. 매출을 SKU별로 먼저 집계하고, 재고도 SKU별로 먼저 집계한 뒤 연결합니다.
기대하는 결과는 다음과 같습니다. 임박 3개는 출고 가능 17개에 이미 포함돼 있으므로 다시 더하지 않습니다.
| SKU | 판매 수량 | 매출(원) | 총재고 | 출고 가능 | 임박 | 확인할 점 |
|---|---|---|---|---|---|---|
| SKU-A | 5 | 50,000 | 20 | 17 | 3 | 보류 2, 만료 1 |
| SKU-B | 2 | 16,000 | 자료 없음 | 자료 없음 | 자료 없음 | 재고 자료 확인 |
SKU-B의 재고 자료가 없다는 것은 재고가 0개라는 뜻이 아닙니다. 0으로 바꾸면 운영자가 품절로 판단할 수 있습니다. 값이 없는 이유를 같이 보여주는 편이 낫습니다.
3. 숫자 옆에 시각과 기간을 붙입니다
매출은 일주일 동안 발생한 흐름이고, 재고는 특정 시점의 수량입니다. 이 둘을 연결한 화면에는 “매출 9/7~9/13”과 “재고 9/14 09:00 기준”이 각각 필요합니다. 수집 시각과 데이터 기준 시각도 다를 수 있습니다. 오전 10시에 받은 파일이 어제 밤 재고일 수도 있기 때문입니다.
실제 개발에서는 직접 연동한 자료와 저장된 표를 집계한 자료가 섞이는 상황을 다뤘습니다. 그래서 자료를 가져오지 못했을 때 이전 값을 보여주더라도 마지막 성공 시각과 갱신 실패 상태를 드러내야 합니다. 숫자만 남기면 정상 갱신된 값으로 오해하기 쉽습니다.
광고 성과를 붙일 때도 별도 영역으로 둡니다. 광고 도구의 전환 매출을 채널 상품 매출에 더하면 같은 주문을 두 번 셀 수 있습니다. 첫 실습에서는 광고까지 연결하지 말고, 원본 합계와 상품별 집계가 맞는지부터 확인해 보세요.
Claude Code·Codex로 작은 보고서 만들기
위 가상 매출표와 재고표를 각각 sales.csv, stock.csv로 만들고
로컬에서 읽는 상품별 보고서를 만들어줘. 외부 서비스는 연결하지 마.
매출과 재고를 각각 SKU별로 집계한 다음 연결해.
SKU 없는 매출은 unmatched 목록으로 분리하고 원본 합계 대조에 포함해.
재고 없는 SKU는 null과 '자료 없음'으로 표시해. 0으로 채우지 마.
임박 수량은 출고 가능의 부분집합이므로 합산하지 마.
화면에 매출 기간과 재고 기준 시각을 따로 보여줘.
기대 결과: SKU-A 매출 50000, 판매 5, 총재고 20, 출고 가능 17, 임박 3.
전체 매출 91000 = 연결된 66000 + 미연결 25000인지 검증해줘.
CSV를 바꾼 뒤 다시 실행하는 방법도 알려줘.
처음 결과가 맞더라도 한 줄을 바꿔 다시 확인합니다. 예를 들어 동쪽 창고의 출고 가능을 9로 줄이고 보류를 3으로 늘리면 총재고는 20 그대로, 출고 가능은 16이 되어야 합니다. 총재고까지 달라지면 계산식이나 연결 기준을 다시 봅니다.
화면을 예쁘게 만들기 전에 통과할 네 가지
- 같은 파일을 다시 읽어도 매출이 누적되지 않습니다. 이 실습의 파일은 전체 스냅샷으로 취급합니다.
- 미연결 행을 화면에서 찾을 수 있고, 원본 합계 91,000원을 설명할 수 있습니다.
- 재고 자료 없음과 실제 수량 0이 다른 상태로 표시됩니다.
- 파일 읽기에 실패하면 “이번 데이터 없음”을 알리고, 이전 값을 최신 값으로 바꾸지 않습니다.
여기까지 만들면 “여러 파일을 합치는 프로그램”에서 “틀린 합계를 알아차릴 수 있는 업무 도구”로 한 단계 나아갑니다. 실제 시스템에 적용할 때는 상품 연결과 기간 정의부터 담당자와 맞추세요. 발주나 예산 변경은 그 숫자를 바탕으로 사람이 판단할 다음 업무입니다.
이 사례의 바탕 · 물류·재고·주문·채널 매출·광고 보고를 연결한 고객사 도구 개발 경험입니다. 본문의 숫자와 계산 규칙은 공개 실습용 가상 자료이며, 실제 고객사의 지표가 아닙니다.



