Back office · Roadmap

쇼핑몰 백오피스 개발 로드맵

자사몰과 물품 목록까지 나왔습니다. 남은 것은 주문이 들어온 뒤를 처리하는 화면들 — 입금 확인 · 회차 취합 · 발주 · 검수 · 배송 · 재고 · 정산입니다. 여섯 단계로 쪼개 순서를 정했고, 각 단계는 그 단계만으로 하루 업무가 돌아가는 지점에서 끊었습니다.

순서의 원칙 — 손해가 나는 곳부터. 기능 수가 아니라 지금 돈이 새는 지점을 먼저 막습니다. 입금 확인이 1번인 이유가 그것입니다. 화면이 예뻐지는 일은 뒤로 미룹니다.

SECTION 01 · STATUS지금까지 된 것

기반은 다 깔렸습니다. DB·서버·인증·물품 목록·자사몰이 붙어 있고, 백오피스 화면만 남았습니다.

DONE

20개 표

1차 13 + 2차 5(사진·재고·실사·대여·정산) + 4차 1(히어로) + 5차 1(설정)

DONE

247개 품목

16 라인 · 33 카테고리. 관리자에서 DB 에 바로 저장

DONE

45건 주문

7가지 상태에 흩뿌린 더미. 입금·발주·검수·배송까지 딸려 있음

DONE

9개 화면

물품 목록·상세 · 주문·입금 · 취합·발주·검수 · 배송·인도 · 재고·대여 · 히어로 · 정산

DONE

P1~P6 전부

남은 것은 자사몰 주문 수신(O-6)과 품목 추가·복제(D-4)

기반상태내용
데이터베이스완료 edm Open Database(MySQL 9) · 표 18개 · 서버 대행 API
앱 서버완료 Node · 정적 서빙 + /api/* · 열람 제한 · 게이트 헤더 인증
권한완료 Role 판별 · app_user 역할 · 저장은 admin·hq 만
물품 목록완료 247개 · 검색·필터·정렬 · 인라인 수정 · DB 저장 · 변경 이력
자사몰완료 6 라인 · 장바구니 · 비회원 주문서 생성 (제출 API 는 P2)
더미 데이터완료 학원 5 · 학생 24 · 업체 5 · 주문 45 · 취합 48 · 발주 44 · 검수 35 · 배송 17 · 재고 이동 59 · 대여 6 · 정산 8일

PHASE 1물품 상세 — 설명 · 사진 · 매입가 · 비고

목록에서 고칠 수 없는 것들을 담는 화면입니다. 매입가가 여기 들어와야 정산이 성립하므로 P6 보다 먼저 와야 합니다.

ID기능내용상태
D-1상세 조회·수정 이름·규격·단위·판매가·보증금·안전재고·상태에 더해 상세 설명·매입가·주 매입처·내부 비고 완료
D-2사진 업로드 여러 장 등록·순서 변경·대표 지정. 파일은 볼륨에, 경로만 DB(item_image) 완료
D-3마진 즉시 계산 판매가와 매입가로 마진·마진율을 화면에서 바로 보여준다 — 값을 잘못 넣으면 눈에 띈다 완료
D-4품목 추가·복제 새 품목 등록. 비슷한 품목은 복제해서 이름만 바꾼다 완료

사진은 DB 에 넣지 않습니다. 조회 1000행 상한이 있고 용량이 커지면 백업이 무거워집니다. 파일은 앱 볼륨에 두고 경로만 남깁니다. 검수 사진(P3)도 같은 방식입니다.

PHASE 2주문 · 입금 확인

가장 먼저 손해가 나는 지점입니다. 주문은 시트에, 입금은 통장에 있어 사람이 눈으로 대조하는 동안 미입금 발송과 입금 후 누락 발송이 생깁니다.

ID기능내용상태
O-1입금 대기 목록 미입금 주문을 배송 시작일 임박 순으로. 본사의 하루 시작점 완료
O-2입금 확인 처리 입금자명·금액·입금일 입력 → 주문이 확정으로. 금액이 다르면 차액을 표시하고 막는다 완료
O-3주문 목록·상세 상태·기간·학원·검색 필터. 주문 1건의 품목·입금·배송·변경 이력을 한 화면에 완료
O-4상태 전이 접수 → 확정 → 취합 → 발주 → 입고 → 인도. 한 문장으로 바꿔 중복 처리 방지 완료
O-5주문 등록·취소 담당자 대리 입력. 취소는 사유 필수, 발주 후 취소는 손실로 기록 완료
O-6자사몰 주문 수신 공개 API 로 들어온 주문을 같은 검증을 거쳐 저장. 출처(web/manual) 구분 완료

입금 확인 = 주문 확정입니다. 취합(P3)은 확정분만 집계합니다 — 미입금 주문이 발주 수량에 섞이면 손해가 그대로 발생합니다.

PHASE 3회차 취합 · 발주 · 검수

손으로 하던 합산을 시스템이 대신합니다. 여기서 수량이 틀리면 그대로 손해입니다.

ID기능내용상태
B-1회차 취합표 마감 시각이 지나면 학원 × 품목 격자로 합산. 이 표가 발주서의 원본 완료
B-2발주 기록업체별 수량·매입가·결제 금액·수단 완료
B-3취합 후 변경 잠금 취합표가 생기면 수량 수정 불가. 취소만 되고 손실로 기록 완료
B-4입고 검수 도착 수량 + 사진. 발주와 다르면 차이·사유 필수. 휴대폰 3 터치 완료
B-5발주서 내보내기업체에 보낼 내역을 텍스트로 (현지 업체는 채팅으로 받는다) 완료

PHASE 4배송 · 인도

현장에서 휴대폰으로 처리하는 구간입니다. 화면 수와 터치 수가 요구사항의 일부입니다.

ID기능내용상태
V-1오늘 할 일 오늘 검수·배송·인도 대상을 한 화면에. 현지 담당자의 첫 화면 완료
V-2인도 처리 학생별 인도 체크. 과일은 도착 후 3시간 초과 시 경고 완료
V-3지연 기록예정일 대비 지연 일수·사유 → 배송 지연률의 원천 완료
V-4학원별 보관 현황인도 대기 물품이 어느 학원에 얼마나 있는지 완료

PHASE 5재고 · 대여

가용 재고 한 숫자는 이미 쓰고 있습니다(없는 물건을 팔면 안 되니까). 여기서는 원장과 실사를 붙였습니다. 원장이 진실이고 재고 수량은 그 결과입니다 — 입출고를 넣으면 자사몰 품절 판단에 바로 반영됩니다.

ID기능내용상태
S-1입출고 원장 구매 입고·판매 출고·대여 출고·반납·폐기를 한 줄씩. 현재 수량은 여기서 도출 완료
S-2안전 재고 미달기준치 이하 품목을 발주 대상으로 자동 표시 완료
S-3주간 실사수요일 실물 수량 입력 → 장부 대비 차이와 조정 사유 완료
S-4대여대장 · 보증금대여·반납·환불 상태와 미반납 목록 완료
S-5귀국 전 미반납 경고 귀국 예정일 기준 사전 경고. 귀국 후에는 회수가 사실상 불가 완료

PHASE 6정산

P1 의 매입가와 P2~P4 의 기록이 다 있어야 성립합니다. 그래서 마지막이었습니다. 매출은 인도 완료 기준이고 입금은 "현금 유입"으로 따로 봅니다 — 입금이 먼저 들어오므로 섞으면 아직 주지 않은 물건이 매출로 잡힙니다.

ID기능내용상태
T-1일별 집계인도 완료 기준 매출·원가·기여마진. 보증금은 예수금으로 분리 완료
T-2월 손익월 고정비 대비 기여마진과 월 순부담 완료
T-3일 마감마감하면 그 날짜는 수정 불가. 소급 변경을 막는다 완료
T-4시트 내보내기기존 구글시트 보고를 병행 — 없으면 담당자가 두 번 입력한다 완료

SECTION 02 · SCHEDULE일정

한 단계를 끝까지 쓸 수 있는 상태로 만든 뒤 다음으로 갑니다. 반쯤 된 화면 여섯 개보다 끝난 화면 두 개가 낫습니다.

단계범위 기간끝났다고 보는 조건막히면
P1물품 상세 · 사진 · 매입가2일 247개 전부에 매입가가 들어가고 마진이 화면에 보인다 실제 매입가가 없으면 추정치로 시작
P2주문 · 입금 확인3일 본사가 입금 대기 화면만 보고 하루를 마감할 수 있다 계좌 명세 형식을 모르면 수동 입력으로
P3취합 · 발주 · 검수3일 현지가 취합표로 발주하고 검수 사진을 남긴다 마감 시각이 확정 안 되면 품목별 기본값으로
P4배송 · 인도2일 현지가 휴대폰으로 오늘 할 일만 보고 움직인다 학원별 보관 장소가 없으면 학원 단위로
P5재고 · 대여3일 수요일 실사가 화면에서 끝나고 미반납이 자동으로 뜬다 -
P6정산2일 월말에 시트를 손으로 만들지 않는다 P1 매입가가 비면 원가가 안 나온다

합계 15 영업일입니다. 액션 플랜의 5주 일정과는 별개로 돌아가며, 10/6 오픈은 주문서와 시트로 열립니다 — 이 로드맵이 늦어도 오픈은 늦어지지 않습니다.

순서를 바꿀 수 있는 곳과 없는 곳. P1 은 P6 보다 먼저여야 하고(매입가), P2 는 P3 보다 먼저여야 합니다(확정분만 취합). P4·P5 는 서로 순서를 바꿔도 됩니다.

SECTION 03 · DATA데이터와 더미

화면을 만들기 전에 데이터를 먼저 넣었습니다. 빈 화면으로는 무엇이 불편한지 알 수 없습니다.

더미담는 것쓰는 단계
item247품목 · 판매가 · 보증금 · 안전재고 · 매입가 · 설명 · 비고P1
item_image-사진 경로 · 대표 지정 · 순서P1
school / student5 / 24학원·보관 장소 / 학생·귀국 예정일P2
orders / order_item45 / 84주문 헤더·상태 / 품목·수량·금액P2
payment34입금자명·금액·차액 (불일치 7건 포함)P2
batch / purchase48 / 44회차 합산 / 업체별 발주·매입가P3
inspection35도착 수량·차이·사유·사진 (차이 6건 포함)P3
delivery17예정일·도착·인도·지연 (지연 5건 포함)P4
stock_move / stock_audit59 / 10입출고 원장 / 실사 차이 (차이 4건)P5
rental6대여·반납·보증금 (미반납 4건)P5
settlement8일일별 매출·원가·마진·예수금P6
audit_log누적누가 언제 무엇을 바꿨는지전체
app_user4관리자 1 · 본사 1 · 현지 2전체

더미는 일부러 깨진 데이터를 섞었습니다 — 입금 금액 불일치 7건, 검수 수량 차이 6건, 배송 지연 5건, 실사 차이 4건, 미반납 대여 4건. 정상 데이터만으로는 화면이 그 상황을 보여주는지 확인할 수 없습니다.

node server/seed-dummy.mjs --apply 로 넣고 --wipe 로 지웁니다. 난수 씨앗이 고정돼 다시 돌려도 같은 데이터가 나옵니다. 기준일은 2026-10-20 으로 못박아, 날짜가 흐른다고 화면이 달라지지 않습니다.