사용자 여정
페르소나가 실제로 가치를 얻기까지의 8개 종단(end-to-end) 여정이다. 각 여정은 JRN-* ID를 소유하고,
스텝마다 스텝별 구현 상태 라벨(DONE/PARTIAL/STUB)을 붙여
"라이브 console에서 지금 작동하는 것"과 "아직 막힌 것"을 정직하게 구분한다. 핵심 4종은
JRN-FACTORY·JRN-COLDSTART·JRN-DRIVER·JRN-NIMACHI이며,
이들이 cold-start 데모·1차 데이터원·수익 쐐기를 결정한다. 페르소나 정의는 personas.html, 잡은 jobs-to-be-done.html,
에픽·스토리는 epics-stories.html를 참조한다. 기술 상세는 중복하지 않고 TRD로 교차링크하며, 모든 SLO/KPI 수치는 진입 단계 설계 목표(달성치 아님)다.
라벨 범례. DONE 라이브 console/server에서 검증된 동작 · PARTIAL 일부만 구현/배선 누락 · STUB scaffold만 존재(미작동) · PLANNED 미착수. 스텝 라벨은 §14 as-built 사실 기준이다.
여정 한눈 매핑
| JRN | 여정 | 주 페르소나 | 관련 EPIC | 관련 JTBD | 여정 상태 |
|---|---|---|---|---|---|
| JRN-COLDSTART | 제휴→온보딩 cold-start | PLATFORM_ADMIN | EPIC-ONBOARDING | JTBD-06 | PARTIAL |
| JRN-FACTORY | ShipmentFactory 0→1 실증 | PLATFORM_ADMIN | EPIC-ONBOARDING | JTBD-07 | DONE |
| JRN-DRIVER | 드라이버 잡 라이프사이클 | DRIVER | EPIC-DRIVER-APP | JTBD-09 · JTBD-10 | STUB |
| JRN-NIMACHI | 荷待ち 측정→규제 리포트→협상 | SHIPPER_ADMIN | EPIC-REGULATORY | JTBD-02 · JTBD-03 | DONE |
| JRN-CONSIGNEE | Inbound 큐→맵→캐리어 비교 | CONSIGNEE_ADMIN | EPIC-CONSIGNEE | JTBD-04 · JTBD-05 | DONE |
| JRN-MONITOR | 맵→예외엔진→큐→LINE 알림 | CARRIER_OPS | EPIC-TRACKING-ENGINE · EPIC-NOTIFY-EXC | JTBD-01 · JTBD-11 | PARTIAL |
| JRN-RECIPIENT | 추적 링크→ETA(위치 비노출)→완료 | 受取人(서브) | EPIC-CONSENT-PRIVACY | JTBD-13 | PARTIAL |
| JRN-INTEGRATE | API키→토큰→REST/웹훅→자사 TMS | 3PL/화주 개발 | EPIC-INTEGRATIONS | JTBD-14 · JTBD-12 | STUB |
JRN-COLDSTART · 제휴→온보딩 cold-start P0 Phase 0/1
페르소나 PLATFORM_ADMIN(LogiNippon 운영) · 맥락 검증된 #1 장벽인 cold-start(네트워크 효과·다단계 하청 데이터 공유 거부, H3 강검증)를 EPIC-ONBOARDING으로 돌파한다. 제휴(GATE-P0)가 미서명이면 이후 전 단계가 하드 블록된다.
-
파트너 자격평가
루브릭(데이터 접근성·캐리어 강제력·규제 노출)으로 대형 화주(
特定第一種荷主 ≥9만t) 또는 대형 운송사를 평가한다. DONE (제휴 모션·정성 평가, GTM은 gtm-pricing.html) -
PoC 서명 — GATE-P0 하드 게이트
데이터 수신·送り状番号 매핑·APPI 동의 책임을 계약으로 명시한다. 미서명 시 Phase 1 전체 보류(PR-01). PARTIAL (계약/사업 의존, 게이트 DoD는 TRD GATE-P0)
-
Admin 탭에서 캐리어·컨사이니·거점 생성
PLATFORM_ADMINAdminPanel에서 운송사·受取人 테넌트·拠点(facility)을 만든다(셀프가입 없음 — ADR-0001). DONE (FR-PROV-001·FR-PROV-002) -
거점 지오펜스 폴리곤 선구축(100~200)
자동 dwell·도착 이벤트의 전제인 거점 폴리곤을 미리 등록한다. DONE (지오펜스 CRUD FR-GEO-CRUD-001)
-
일회용 DRIVER 초대코드 발급
캐리어별로
max_uses 1 · ttl 30d일회용 초대코드를 발급한다(드라이버 셀프등록 핸드셰이크). DONE (콘솔 발급) — 단, 드라이버 앱 측 소비 핸드셰이크는 STUB (FR-AUTH-005) -
드라이버 셀프등록
초대코드로 드라이버가 가입·비밀번호 설정·APPI 동의를 거친다. 앱 scaffold가 STUB이라 JRN-FACTORY가 이 단계를 대체 실증한다. STUB (Flutter 앱, FR-AUTH-001)
가치. 검증된 #1 장벽(cold-start)을 제휴·운영으로 해소한다. 콘솔 측 셋업(캐리어/컨사이니/거점/초대코드)은 라이브로 완성되어 있고, 남은 의존은 제휴 서명(GATE-P0)과 드라이버 앱이다. 관련 리스크는 PR-01.
JRN-FACTORY · ShipmentFactory 0→1 실증 P0 Phase 0/1
페르소나 PLATFORM_ADMIN ·
맥락 실 트럭·실 GPS가 0인 상태에서도 화물 전 생애주기(픽업→주행→도착→대시보드 KPI)를 한 화면(ShipmentFactory.svelte)에서 end-to-end로 실증한다 — cold-start 데모의 linchpin이자 데모 전략의 근간.
-
① 캐리어 + 컨사이니 선택
factory.step.selectShipments / 運送登録(factory) 진입 → 드롭다운에서 캐리어와 受取人 테넌트를 고른다(adminListCarriers/adminListConsignees). DONE -
② 드라이버 + 차량 생성
factory.step.fleet드라이버 생성 시 비밀번호 ≥8자(disabled가드)·위치 공유 APPI 동의 체크(consent_to_location_sharing), 차량은LIGHT/MEDIUM/HEAVY클래스로 등록한다. DONE (adminCreateDriver·adminCreateVehicle) -
③ 멀티스톱 화물 등록
factory.step.shipment목적지 facility·shipper_ref·드라이버·차량 지정 후 N개 정류점(PICKUP/INTERMEDIATE/DROPOFF)을 추가한다. 도메인 invariant 강제: ≥1 PICKUP · ≥1 DROPOFF · 마지막 stop = DROPOFF, lat/lon 범위 검증, 빈 행 skip(milk-run·LTL 반영). DONE (adminCreateShipment) -
④ 위치 시뮬레이션
factory.step.simulate생성된shipment_id에 lat/lon을 입력해adminSimulatePosition으로 ingest 파이프라인에 위치를 흘려보낸다(실 GPS 대체). DONE (ingest FR-INGEST-001) -
맵 / Inbound / 대시보드 KPI 확인
시뮬 위치가 H3 지오펜스 엔진을 거쳐 FleetMap·Inbound 큐·Dashboard(건수·평균 dwell·정시%·ETA MAE)에 반영되는 것을 확인한다(전 과정 실증 완결). DONE (지오펜스 FR-GEO-002·WS FR-DLV-WS-001)
가치. 실 트럭·드라이버 앱 없이 cold-start 데모를 가능하게 한다 — 4스텝(셋업→GPS 시뮬→대시보드)이 라이브로 완성된 유일하게 자급식인 0→1 경로. 드라이버 앱 STUB 갭(PR-02)을 데모 단계에서 우회한다.
JRN-DRIVER · 드라이버 잡 라이프사이클 P0 Phase 1 STUB(최대 갭)
페르소나 DRIVER(Flutter 앱) — 고령(평균 50세 초과) 현장 드라이버, 1차 위치 센서 ·
맥락 스마트폰 GPS가 1차 데이터원이므로 이 여정의 STUB이 제품 최대 갭이다(PR-02). 설계는 핸즈프리·프라이버시·배터리 예산 가시성이다.
-
案件 푸시 수신
FCM/APNs로 배달 지시(案件)를 받는다. PLANNED (앱 푸시 미배선, FR-ACQ-API-001)
- APPI 동의 온보딩(하드 게이트)
-
受託(수락) — 큰 버튼 한 번
최소 탭으로 案件을 수락한다(고령 드라이버 UX). 현재
JobsRepository는 빈 배열,token→null·_refreshTokenUnimplementedError. STUB (FR-ACQ-API-001) -
위치 공유 자동 ON
수락과 동시에 잡 중에만 위치 공유가 켜진다(별도 "공유" 버튼 없음 — 자동화). STUB (FR-ACQ-AUTOSHARE-001)
-
주행 — 배경 GPS(적응 샘플링·오프라인 버퍼)
백그라운드 위치를 적응 샘플링으로 수집하고 터널/오프라인 구간은 버퍼링 후 복구 전송한다. 앱의
TransistorLocationService가 주석 처리되어 미작동. STUB (FR-ACQ-GPS-001·FR-ACQ-OFFLINE-001) -
지오펜스 ENTER/EXIT 서버 자동 도출
거점 도착/출발은 클라이언트 탭이 아니라 서버측 H3 지오펜스 히스테리시스 엔진이 자동 도출한다(드라이버 조작 0). DONE(서버 엔진) — 단, 입력 핑은 앱 STUB에 의존 (FR-GEO-002)
-
完了報告 + 증빙 사진(R2)
배달 완료 보고와 증빙 사진을 R2에 업로드한다(egress 무료). STUB (증빙·l10n 미배선)
-
완료 시 공유 자동 OFF
잡 종료와 동시에 위치 공유가 자동으로 꺼진다(프라이버시 — 잡 외 위치 비수집). STUB (FR-ACQ-AUTOSHARE-001)
가치 & 갭. 핸즈프리(조작 최소)·프라이버시(잡 중에만 공유)·배터리 예산 가시성이 설계 가치다. 그러나 이 여정 전체가 현재 STUB(서버 지오펜스 엔진만 DONE)이며, GPS가 North Star Tracking Rate의 입력원이라 MVP-exit(GATE-P1)의 최우선 차단 요인이다. 案件 API 계약(목록/수락/완료)도 techspec 미기재 미해결 질문(OQ-02). 그 전까지 JRN-FACTORY가 데모를 대신한다.
JRN-NIMACHI · 荷待ち 측정→규제 리포트→납품처 협상 P0 Phase 1 유일 완성 킬러
페르소나 SHIPPER_ADMIN(荷主 컨트롤타워 운영자, 지불 고객) ·
맥락 規制 의무(物流効率化法 荷待ち·荷役 상한 목표 2시간, 2026.4 전면 시행 확인)를 킬러앱으로 — 페인 우선 진입의 수익 쐐기이자 라이브에서 유일하게 end-to-end 완성된 경로다(EPIC-REGULATORY).
- 지오펜스 자동 dwell_minutes 측정
-
Reports(規制)에서 JST 기간 지정(≤92일)
SHIPPER 전용 reports 탭에서 監督官庁 제출 기간을 JST로 고른다(최대 92일 윈도). DONE (FR-RPT-RANGE-001)
-
리포트 생성 — 행수 + report_id + JST + 法定2시간 초과 표시
생성 결과에 행수·
report_id·JST 타임스탬프가 찍히고, 임계 2시간(120분) 초과 건이 표시된다(dwell_minutes 143= 荷待ち 예외). DONE (FR-RPT-NIMACHI-001·RR-NIMACHI-001) -
UTF-8 BOM CSV 다운로드(監督官庁용)
R2에서 UTF-8 BOM CSV를 다운로드한다(egress 무료 — 반복 다운로드 무비용). DONE (RR-CSV-001)
-
납품처 협상
시설별 평균 체류 통계를 납품처 개선 협상의 측정 가능 ROI 근거로 쓴다. DONE(데이터 산출) — 화주 운영 행위 (JTBD-03)
가치. 페인 우선·측정 ROI(예: 3~4h → 1~2h 단축 협상 근거)·유일 완성 킬러 기능·수익 쐐기. "안 하면 행정지도/벌금"인 규제 의무를 자동 산출 도구로 묶어 시장이 외부에서 도입 명분을 만들어 준다.
RR-LEGAL-001 주의. 공식 컬럼셋·인코딩(Shift_JIS vs UTF-8 BOM)이 미확정이다(PR-07). RR-LEGAL-001 서명 전까지 "官庁 제출 가능"으로 광고하지 않는다.
JRN-CONSIGNEE · Inbound 큐→맵→캐리어 비교 대시보드 P0 Phase 1
페르소나 CONSIGNEE_ADMIN / CONSIGNEE_VIEWER(受取人/荷受け拠点 운영자) · 맥락 받는 거점이 자기 도크로 오는 전 캐리어 inbound를 보고 도크 인력을 계획하고 캐리어를 객관 랭킹한다 — 원 리서치에 없던 컨사이니 중심 IA(land-and-expand 보완, EPIC-CONSIGNEE).
-
로그인 → Inbound(到着便)
컨사이니 IA(map/inbound/dashboard)로 진입한다(테넌트 격리 — 타 거점 비노출). DONE (FR-AUTH-004)
- 다캐리어 라이브 큐 확인
-
행 클릭 → 맵
큐 행을 클릭하면 FleetMap에 해당 화물이 포커스된다(never-empty 맵). DONE (FR-DLV-WS-001)
-
Dashboard 캐리어 비교
건수·평균 dwell·정시%·ETA MAE로 캐리어를 객관 비교한다(어느 캐리어를 계속 쓸지 결정). DONE(컨사이니 병렬 뷰) — 화주向 동등 스코어카드는 ABSENT (FR-RPT-ANALYTICS-001)
가치. 라이브 ETA로 도크 인력을 계획하고(JTBD-04) 캐리어를 객관 랭킹한다(JTBD-05). 받는 거점이 inbound 캐리어를 끌어오는 bottom-up 보완으로 land-and-expand를 가능하게 한다. 화주도 동일 비교 대시보드를 받는지는 미해결 질문(OQ-03).
JRN-MONITOR · 맵→예외엔진→큐→LINE 알림 P1 Phase 1
페르소나 CARRIER_OPS / SUPPORT(運送会社 운영·配車) · 맥락 실시간 맵에서 예외를 잡아 우선순위 큐로 처리하고 LINE으로 즉시 알린다(EPIC-TRACKING-ENGINE + EPIC-NOTIFY-EXC).
-
Map — 상태색 트럭 + stop pin(never-empty)
상태(
IN_TRANSIT/DELIVERED/EXCEPTION) 색 트럭과 stop 핀을 본다. 핑이 0이어도 맵은 비지 않는다(/shipments/tracking6초 폴링). DONE (FR-DLV-TRACK-001) -
예외 엔진
지연·dwell 초과·추적 손실·경로 이탈·정차·픽업 등을 canonical_code로 분류한다. PARTIAL (룰 ETA STUB·일부 룰 미완, FR-ENG-EXC-001)
-
심각도/시간순 큐
"지금 처리할 것 vs 모니터링"을 심각도·시간순 큐로 정렬한다(
/shipments/tracking6초 폴링). PARTIAL (큐 표시 DONE·룰ETA/sweep STUB, KPI-EXC-001) -
LINE / 웹훅 알림
일본 B2B 현장 1순위 채널 LINE(이메일·웹훅 병행)로 예외를 즉시 통지한다. STUB (
handleNotifyBatchack-only — 실제 전달 미배선, FR-DLV-NOTIFY-001) -
화물 클릭 → 맵 포커스
알림/큐에서 화물을 클릭하면 맵으로 점프해 처리한다. DONE (FR-DLV-WS-001)
가치. 전화·FAX 대신 예외 중심 운영으로 配車 효율을 높이고 자사 라이브 차량을 본다(JTBD-11). 맵·큐 표시는 DONE이지만 실제 알림 전달·tracking-loss sweep·룰 ETA가 STUB이라 MVP-exit 5개 STUB 해소 대상에 포함된다(GATE-P1).
JRN-RECIPIENT · 추적 링크→ETA(위치 비노출)→완료 알림 P1 Phase 1
페르소나 受取人 최종 수령인(CONSIGNEE_ADMIN/CONSIGNEE_VIEWER의 경량 서브-페르소나, 로그인 없음) ·
맥락 "몇 시에 오는가"만 알면 된다 — 차량 실시간 위치는 個人情報保護法상 비노출(EPIC-CONSENT-PRIVACY).
-
공유 추적 링크 수신(로그인 없음)
로그인 없는 추적 링크 URL을 받는다(self-track 뷰). PARTIAL (비-admin CustomerTrack 존재, FR-DLV-TRACK-001)
- ETA 페이지 — 차량 위치 생략
-
정직한 staleness / tracking_rate 노출
staleness_seconds·tracking_rate·eta_is_estimate를 숨기지 않고 노출한다(스마트폰 GPS 한계 정직). PARTIAL (정직 노출 원칙, KPI-TRACK-001) -
완료 SMS / 메일 알림
배달 완료 시 SMS·메일로 통지한다. STUB (알림 전달 미배선, FR-DLV-NOTIFY-001)
가치. 도착 시각만 정확히 전달해 문의 전화를 줄이되, 차량 위치 비노출로 프라이버시를 지킨다(JTBD-13). 정직 노출이 곧 포지셔닝이다.
JRN-INTEGRATE · API키→토큰→REST/웹훅→자사 TMS P2 Phase 2 STUB
페르소나 3PL/화주 개발팀(PRS-3PL, Phase 2 세분 스코프 — 콘솔 UI 역할 아님) · 맥락 LogiNippon 데이터를 자사 TMS/WMS/ERP에서 소비한다 — ERP 대체가 아니라 overlay(EPIC-INTEGRATIONS, Phase 2).
-
API Key → 토큰 교환
POST /v1/auth/token으로 API Key를 단기 액세스 토큰으로 교환한다(또는 키 직접 사용). 테넌트 스코프 자동 필터. STUB (계약 정의됨·구현 미완) -
REST 폴링 또는 웹훅 등록
GET /v1/shipments/{id}/tracking등 읽기 위주 REST를 폴링하거나POST /v1/webhooks로 이벤트 구독을 등록한다. STUB (웹훅 CRUD 501·POST /v1/shipments500, FR-DLV-WH-001) -
HMAC 서명 웹훅 수신
X-LogiNippon-Signature(HMAC-SHA256,{timestamp}.{body})·Timestamp(±5분 replay 방지)·Event-Id헤더가 붙은 POST를 수신한다. STUB (전달handleNotifyBatchack-only) -
서명 검증 · event id 멱등 · occurred_at 정렬
상수 시간 서명 비교,
id로 at-least-once 중복 무시(멱등),occurred_at기준 정렬(순서 보장 없음 — 오래된 status로 덮어쓰지 않기). STUB (수신자 측 계약, SR-AUTHZ-001) -
자사 TMS 소비(overlay)
검증된 이벤트를 자사 TMS에 반영한다(ERP 대체 아닌 overlay). STUB (JTBD-14)
가치. 화주·3PL이 기존 시스템을 바꾸지 않고 가시성 데이터를 얹어 소비한다(Enterprise 에디션). 전 단계가 Phase 2·STUB이며, rate limit·웹훅 전달은 MVP-exit 이후 과제다.
근거·상호참조
- 마스터 스펙 §7(여정)·§5(에픽)·§14(as-built 사실) —
prd/.build/master-spec.md - 전달 계층(드라이버 앱 플로우·규제 출력·웹훅 시맨틱스·受取人 위치 마스킹) — techspec/05-delivery-layer/delivery.md
- ShipmentFactory 4스텝(캐리어+컨사이니 / 드라이버(비번≥8·APPI 동의)+차량 / 멀티스톱 invariant / 위치 시뮬→ingest) — console/src/components/admin/ShipmentFactory.svelte
- 페르소나·역할 매트릭스 → personas.html · 잡 → jobs-to-be-done.html · 에픽/스토리 → epics-stories.html · 범위/게이트 → scope-nongoals.html · 리스크/미해결 → risks-open-questions.html
- TRD 교차링크: 기능 요구(FR-*) · 규제(RR-LEGAL-001 포함) · KPI · GATE-P0 / GATE-P1
- 신뢰도: 規制 사실(荷待ち 2시간·改正物流法·2024년문제) 확인 · 구현 상태 라벨 §14 기준 · 모든 KPI/SLO 수치 진입 단계 설계 목표(달성치 아님).