SYSTEM BLUEPRINT

Packiyo 연동 물류 통합 관리 포털
사용자별 화면 설계 및 시나리오

제안서에서 약속한 3대 역제안(하이브리드 동기화 · 고객사별 데이터 금고 · 디자인 무손실 전환)이 실제로 어떤 화면과 기능이 되는지 정의한 설계도입니다.

고객사(화주) 담당자 시나리오

전화하지 않고 스스로 확인하는 고객사 담당자 여정

3PL 운영팀에 전화·엑셀로 묻던 모든 질문을 고객사가 직접 화면에서 해결합니다. 역제안 ①(하이브리드 동기화)이 만들어내는 체감 가치가 이 여정 전체에 깔립니다.

1. 초대 · 로그인

운영사가 보낸 초대 메일로
담당자 계정 생성

2. 물류 현황 확인

출고 대기·배송중·재고 경고를
대시보드 한 장으로

3. 주문 · 배송 추적

주문번호로 송장까지
단계별 추적

4. 재고 경고 수신

안전재고 미만 SKU를
모바일 푸시로 통보

5. 보충 · 반품 요청

포털에서 바로 요청,
운영사에 즉시 전달

고객사(화주) 담당자 | 화면 01

화주 대시보드 — 오늘 내 물류가 어떤 상태인가

portal.3pl-logis.co.kr/dashboard
비컴리빙 물류 현황
ICN-1 강서센터 · 화주코드 BCL-0142
Packiyo 동기화 4초 전 webhook · live
오늘 출고 대기
37
어제 대비 +6
배송 중
128
평균 리드타임 1.8일
안전재고 미만 SKU
4
즉시 확인 필요
반품 접수
9
처리 대기 2건
최근 주문 · 실시간 Packiyo Orders API → 캐시 반영
주문번호 화주 품목 송장번호 상태
PKY-2026-0819-00473 (주)비컴리빙 3 CJ 5729 1183 4402 배송중
PKY-2026-0819-00471 (주)비컴리빙 1 CJ 5729 1183 4398 출고완료
PKY-2026-0819-00468 (주)비컴리빙 7 - 피킹중
PKY-2026-0818-00455 (주)비컴리빙 2 CJ 5729 1180 7712 배송완료
PKY-2026-0818-00449 (주)비컴리빙 5 - 재고부족 보류

[화면 개요 및 목적]

고객사 담당자가 로그인 직후 보는 첫 화면입니다. 출고 대기, 배송 중, 안전재고 미만, 반품 접수 4개 지표와 최근 주문 목록을 한 화면에 담아, 전화로 묻던 질문이 화면에서 끝나게 만듭니다.

[핵심 기능 로직]

화면은 Packiyo를 직접 호출하지 않고 캐시에서 즉시 응답합니다. Packiyo 웹훅으로 주문·재고 변경을 먼저 받아 캐시에 반영하고, 상단에 '동기화 4초 전'을 표기해 데이터 신선도를 사용자에게 명시합니다. 제안서 역제안 ①의 직접적인 결과 화면이며, 데모 Step 3에서 실제로 작동하는 모습을 보실 수 있습니다.

  • Packiyo Webhook → Redis Cache (TTL 60s)
  • Next.js Server Component + Streaming SSR
고객사(화주) 담당자 | 화면 02

주문 상세 · 배송 추적 — 지금 어디까지 갔는가

portal.3pl-logis.co.kr/orders/PKY-2026-0819-00473
주문 상세
배송중
PKY-2026-0819-00473
수취인 김민서 · 010-****-4471
서울 강서구 마곡중앙로 00, 1203호
요청사항: 부재 시 문 앞
품목 3건
무선 바디케어 브러시 (블랙)
SKU-BT-1024-BLK
×2
실리콘 클렌징 패드 (화이트)
SKU-BT-2031-WHT
×1
홈케어 스타터 세트
SKU-BT-3007-SET
×1
Packiyo 원본 상태 shipped / 08.19 17:22
배송 추적
CJ 5729 1183 4402
주문 접수
08.19 09:12
피킹 완료
08.19 11:40
패킹 · 송장 발행
08.19 13:05
집화 (CJ대한통운)
08.19 17:22
배송 중 · 서울 강서 HUB
08.20 06:41
배송 완료
예정 08.20 18:00
배송 완료 시 담당자 3명에게 알림 발송

[화면 개요 및 목적]

왼쪽에 주문·수취인·품목, 오른쪽에 집화부터 배송완료까지의 타임라인을 배치했습니다. '내 주문 어디 있어요?'라는 문의를 화면 하나로 대체하는 것이 목적입니다.

[핵심 기능 로직]

Packiyo의 원본 상태(shipped)와 택배사 추적 정보를 하나의 타임라인으로 합쳐 보여줍니다. 현재 단계는 키컬러로 강조하고 이후 단계는 회색으로 남겨 진행률이 즉시 읽히게 했습니다. 배송 완료 시점에 담당자 알림이 자동 발송됩니다.

  • Packiyo Shipments API + 택배사 추적 병합
  • Event-driven Notification (Email / Push)
고객사(화주) 담당자 | 화면 03

모바일 재고 경고 — 사무실 밖에서 받는 알림

비컴리빙 · ICN-1 강서센터
안전재고 경고 4건
무선 바디케어 브러시
SKU-BT-1024-BLK
12 / 안전 50 24%
실리콘 클렌징 패드
SKU-BT-2031-WHT
34 / 안전 60 56%
홈케어 스타터 세트
SKU-BT-3007-SET
8 / 안전 40 20%
미스트 디퓨저 (핑크)
SKU-BT-1188-PNK
41 / 안전 50 82%
보충 요청서 만들기
푸시 알림 (수신 화면)
물류 포털 · 지금
SKU-BT-3007-SET 재고 8개
안전재고 40개 미만입니다. 현재 출고 대기 5건이 보류될 수 있습니다.
알림 기준 설정
안전재고 대비30% 미만
알림 채널앱 푸시 · 이메일
발송 시각매일 09:00
왜 모바일인가
재고 경고는 사무실이 아니라 이동 중에 확인됩니다. 조회 전용 화면만 모바일로 분리해 개발 범위를 늘리지 않습니다.

[화면 개요 및 목적]

재고 경고는 책상 앞이 아니라 이동 중에 확인됩니다. 조회 전용 기능만 모바일로 분리해 개발 범위를 늘리지 않으면서 실사용 가치를 확보했습니다.

[핵심 기능 로직]

재고 변경 웹훅을 받을 때마다 SKU별 안전재고 대비 비율을 계산하고, 설정한 임계치(기본 30%) 미만이면 푸시와 이메일을 발송합니다. 화면에서 바로 보충 요청서를 만들어 운영사에 전달할 수 있습니다.

  • Inventory Webhook → Threshold Evaluator
  • Web Push (PWA) + Email Fallback
3PL 운영자 시나리오

고객 응대에서 예외 처리로 이동하는 운영자 여정

단순 조회 문의가 포털로 넘어간 뒤, 운영자는 동기화 예외와 반품 같은 진짜 판단이 필요한 일에 집중합니다.

1. 동기화 관제

웹훅 수신과 보정 결과를
한눈에 확인

2. 예외 확인

누락·재시도 건만
선별해 처리

3. 반품 검수

재입고·재포장·폐기를
화면에서 확정

4. 고객사 초대

화주사와 담당자를
조직 단위로 등록

5. 리포트 공유

월간 물류 리포트를
고객사에 자동 발송

3PL 운영자 | 화면 01

동기화 관제 콘솔 — 지금 Packiyo와 몇 초 차이인가

ops.3pl-logis.co.kr/sync
Packiyo 동기화 관제
Webhook 정상Polling 5분 주기 last reconcile 09:40:31
오늘 웹훅 수신
4,182
실패 0건
API 호출 절감
92%
직접 호출 대비
캐시 히트율
97.4%
Redis · TTL 60s
최대 동기화 지연
6초
임계 30초
이벤트 수신 로그
09:41:22 webhook order.shipped PKY-2026-0819-00473 반영
09:41:05 webhook inventory.updated SKU-BT-1024-BLK 반영
09:40:58 webhook order.created PKY-2026-0819-00474 반영
09:40:31 polling orders.reconcile 누락 2건 보정 복구
09:39:47 webhook return.received RMA-2026-0812 반영
09:38:12 webhook order.updated PKY-2026-0818-00449 재시도 1회
시간대별 API 호출량
06시09시12시15시18시21시
피크 시간에도 Packiyo 한도의 18%만 사용합니다. 화주가 늘어도 호출량은 화주 수가 아니라 변경 건수에 비례합니다.

[화면 개요 및 목적]

운영자가 매일 아침 여는 화면입니다. 웹훅 수신 로그, API 호출 절감률, 캐시 히트율, 최대 동기화 지연을 한 화면에 모아 시스템이 정상인지 5초 안에 판단하게 합니다.

[핵심 기능 로직]

웹훅으로 받은 이벤트는 즉시 캐시에 반영하고, 웹훅이 누락된 구간은 5분 주기 폴링 잡이 비교·보정합니다. 로그에는 webhook과 polling을 구분 표기해 어떤 경로로 데이터가 들어왔는지 추적 가능합니다. 제안서 역제안 ①의 심장부이며, 데모 Step 2에서 이 과정이 그대로 재현됩니다.

  • Webhook Receiver + Polling Reconciler (BullMQ)
  • Redis Cache Metrics + Sync Latency Gauge
3PL 운영자 | 화면 02

반품(RMA) 검수 처리 — 재입고인가 폐기인가

ops.3pl-logis.co.kr/returns
반품 처리 대기 9건
전체 9검수중 3폐기 2
RMA-2026-0819-0031접수
그레이스뷰티 · 미개봉 반품
RMA-2026-0819-0029검수중
(주)비컴리빙 · 오배송
RMA-2026-0818-0027폐기 대기
노드스포츠 · 파손
RMA-2026-0818-0024재입고 완료
그레이스뷰티 · 단순변심
RMA-2026-0819-0031
원주문 PKY-2026-0815-00318 · 그레이스뷰티
접수 · 검수 대기
반품 품목
에센스 앰플 30ml (2호)
SKU-GB-4412-02
×2
모이스처 크림 50ml
SKU-GB-4390-01
×1
검수 결과 입력
재입고
재포장
폐기
처리 확정 시 Packiyo Returns API로 즉시 반영되고
화주 포털 재고에 자동 반영됩니다.
처리 확정

[화면 개요 및 목적]

왼쪽 반품 대기 목록에서 건을 선택하면 오른쪽에 원주문·품목·검수 선택지가 펼쳐집니다. 반품은 판단이 필요한 업무이므로 조회가 아닌 처리 중심으로 레이아웃을 구성했습니다.

[핵심 기능 로직]

검수 결과(재입고 / 재포장 / 폐기)를 확정하면 Packiyo Returns API로 즉시 반영되고, 재입고인 경우 재고 수량이 화주 포털에 자동으로 반영됩니다. 처리 이력은 감사 로그에 남아 분쟁 시 근거가 됩니다.

  • Packiyo Returns API (양방향 쓰기)
  • Audit Log with Actor & Timestamp
3PL 운영자 | 화면 03

고객사 · 담당자 권한 관리 — 누가 무엇을 볼 수 있는가

ops.3pl-logis.co.kr/tenants
고객사 · 담당자 관리
화주 3개사 · 담당자 4명
+ 고객사 초대
담당자 목록
이름 계정 소속 화주 권한 상태
김수연 sy.kim@becomeliving.co.kr (주)비컴리빙 관리자 활성
박도현 dh.park@becomeliving.co.kr (주)비컴리빙 조회 전용 활성
이하늘 hn.lee@graceview.kr 그레이스뷰티 관리자 초대 발송
정민재 mj.jung@nordsports.kr 노드스포츠 조회 전용 활성
담당자는 소속 화주 코드에 묶입니다. 계정이 아무리 늘어도 볼 수 있는 데이터 범위는 화주 단위로 고정됩니다.
권한 매트릭스
관리자조회
주문 조회
배송 추적
재고 조회
반품 접수
담당자 초대
타 화주 데이터
타 화주 데이터는 권한 항목 자체가 없습니다.
관리자 권한으로도 켤 수 없도록 DB 정책에서 차단합니다.

[화면 개요 및 목적]

화주사를 조직 단위로 등록하고, 그 아래 담당자를 초대합니다. 권한 매트릭스에서 '타 화주 데이터' 항목 자체가 존재하지 않는다는 점을 시각적으로 보여주는 것이 이 화면의 핵심 메시지입니다.

[핵심 기능 로직]

모든 계정은 화주 코드에 종속됩니다. 관리자 권한이라 해도 소속 화주 범위를 벗어난 데이터는 조회 대상 자체가 되지 않으며, 이 규칙은 화면 로직이 아니라 데이터베이스 정책으로 강제됩니다. 제안서 역제안 ②를 사용자 화면 관점에서 증명하는 슬라이드입니다.

  • Data Aggregation & Visualization
  • Organization-scoped Invitation & 2FA
시스템 관리자 시나리오

사고가 나기 전에 확인하는 관리자 여정

격리·한도·배포. 이 포털이 고객사에게 보여지는 영업 자산인 만큼, 사고 이후가 아니라 사고 이전에 확인하는 화면들로 구성했습니다.

1. 격리 감사

화주 간 데이터 차단이
유효한지 정기 검증

2. 한도 감시

Packiyo API 사용률과
응답 지연 추적

3. 임계 대응

한도 임박 시 캐시·폴링
주기 자동 조정

4. 배포 관리

테스트 통과 후에만
운영 배포 진행

5. 런북 이관

장애 대응 절차를
문서로 인수인계

시스템 관리자 | 화면 01

데이터 격리 감사 콘솔 — 정말 막혀 있는가

admin.3pl-logis.co.kr/security/isolation
데이터 격리 감사 콘솔
last audit 2026-08-20 04:00 KST
격리 테스트
24 / 24
전건 차단
RLS 정책
11
테이블 전체 적용
교차 접근 시도
3
최근 30일 · 전부 차단
노출 사고
0
누적
격리 테스트 케이스 결과
TC-01 화주 A 계정으로 화주 B 주문 직접 조회 BLOCKED
TC-07 URL 주문번호 변조 (PKY→타사 주문) BLOCKED
TC-12 API 토큰 재사용 후 tenant_id 위조 BLOCKED
TC-18 조회 조건 누락 쿼리 강제 실행 BLOCKED
TC-23 관리자 권한 계정의 타사 재고 접근 BLOCKED
적용 중인 RLS 정책
CREATE POLICY tenant_isolation
  ON orders
  USING (tenant_id = current_tenant());
조회 조건을 코드에서 빠뜨려도 데이터베이스가 타사 행을 반환하지 않습니다. 사람이 실수해도 뚫리지 않는 지점에 방어선을 둡니다.

[화면 개요 및 목적]

24개 격리 테스트 케이스의 실행 결과를 상시 노출합니다. '막았습니다'라는 말 대신 '이렇게 막혔습니다'를 숫자로 보여주는 화면입니다.

[핵심 기능 로직]

PostgreSQL Row Level Security 정책이 11개 테이블 전체에 적용되어 있으며, URL 변조·토큰 위조·조회 조건 누락 등 실제 공격 시나리오를 자동 테스트로 매일 재검증합니다. 코드가 아닌 DB가 방어선이므로 개발자 실수와 무관하게 차단됩니다.

  • PostgreSQL Row Level Security (11 tables)
  • Automated Isolation Test Suite (24 cases)
시스템 관리자 | 화면 02

Packiyo API 상태 · 레이트리밋 관제

admin.3pl-logis.co.kr/integrations/packiyo
Packiyo API · 캐시 상태
All Systems Normal
레이트리밋 사용률 18% / 60,000 req·day
캐시 미적용 시 예상 사용률 228% · 한도 초과
엔드포인트별 호출 · 응답
Endpoint 24h 호출 p95
GET /orders 1,284 182ms
GET /inventory 946 141ms
GET /shipments 722 198ms
POST /returns 88 312ms
GET /products 402 127ms
캐시 히트율 추이
D-4D-3D-2D-1오늘 97.4%
임계치(사용률 60% / 지연 30초) 초과 시 Sentry 알림과 함께 폴링 주기를 자동으로 늘려 한도 초과를 막습니다.

[화면 개요 및 목적]

Packiyo 한도 대비 실제 사용률, 엔드포인트별 호출량과 p95 응답, 캐시 히트율 추이를 함께 보여줍니다. 캐시를 걷어냈을 때의 예상 사용률(228%)을 나란히 표기해 이 설계가 왜 필요한지 화면 자체가 설명합니다.

[핵심 기능 로직]

사용률 60% 또는 동기화 지연 30초를 넘으면 Sentry 알림과 함께 캐시 TTL을 늘리고 폴링 주기를 자동으로 완화해 한도 초과를 사전에 차단합니다. 화주가 늘어도 호출량은 화주 수가 아니라 변경 건수에 비례합니다.

  • Rate Limit Guard + Adaptive Polling Interval
  • Sentry Alerting + Cache Hit Metrics
시스템 관리자 | 화면 03

배포 파이프라인 · 운영 런북 인수인계

admin.3pl-logis.co.kr/ops/release
배포 파이프라인 · 운영 런북
release v1.0.0 · 2026-09-18
STEP 1
빌드
1m 12s
STEP 2
테스트 (격리 24)
2m 04s
STEP 3
마이그레이션
18s
STEP 4
스테이징 배포
46s
STEP 5
운영 배포
진행 중
장애 대응 런북 (인수인계 산출물)
Packiyo 웹훅 미수신
폴링 보정 잡 수동 실행 → 누락 구간 재동기화
API 한도 임박 (60%)
캐시 TTL 60s → 180s 상향, 폴링 주기 5분 → 15분
화주 계정 잠금
관리자 콘솔에서 초대 재발송, 2단계 인증 재등록
재고 불일치 신고
해당 화주 전체 리싱크 실행 후 감사 로그 확인
계약 종료 후에도 담당자 한 명이 대응 가능하도록, 모든 절차를 명령어 단위로 문서화해 전달합니다.
환경 변수 · 키 관리
PACKIYO_API_KEY=pk_live_••••••••4f2a
PACKIYO_WEBHOOK_SECRET=whs_••••••••91c7
DATABASE_URL=postgres://••••/portal
REDIS_URL=redis://••••:6379
SYNC_POLL_INTERVAL=300
API 키 로테이션 주기 90일
롤백 소요 1분 이내 (이전 이미지)

[화면 개요 및 목적]

격리 테스트 24건을 통과해야만 운영 배포가 진행되도록 파이프라인에 게이트를 걸었습니다. 오른쪽에는 환경 변수 명세와 키 로테이션 주기를 마스킹 상태로 노출합니다.

[핵심 기능 로직]

5백만원 규모 프로젝트의 진짜 리스크는 개발이 아니라 인수인계입니다. 장애 유형별 대응 절차를 명령어 단위 런북으로 만들어 전달하고, 롤백은 이전 이미지로 1분 내 복구되도록 구성합니다.

  • GitHub Actions + Isolation Test Gate
  • Issue Tracking & Status Management