사용자 여정

01-users/journeys.html · LogiNippon · PRD · 2026-06-13 · 신뢰도 라벨 확인/추정/설계

페르소나가 실제로 가치를 얻기까지의 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-startPLATFORM_ADMINEPIC-ONBOARDINGJTBD-06PARTIAL
JRN-FACTORYShipmentFactory 0→1 실증PLATFORM_ADMINEPIC-ONBOARDINGJTBD-07DONE
JRN-DRIVER드라이버 잡 라이프사이클DRIVEREPIC-DRIVER-APPJTBD-09 · JTBD-10STUB
JRN-NIMACHI荷待ち 측정→규제 리포트→협상SHIPPER_ADMINEPIC-REGULATORYJTBD-02 · JTBD-03DONE
JRN-CONSIGNEEInbound 큐→맵→캐리어 비교CONSIGNEE_ADMINEPIC-CONSIGNEEJTBD-04 · JTBD-05DONE
JRN-MONITOR맵→예외엔진→큐→LINE 알림CARRIER_OPSEPIC-TRACKING-ENGINE · EPIC-NOTIFY-EXCJTBD-01 · JTBD-11PARTIAL
JRN-RECIPIENT추적 링크→ETA(위치 비노출)→완료受取人(서브)EPIC-CONSENT-PRIVACYJTBD-13PARTIAL
JRN-INTEGRATEAPI키→토큰→REST/웹훅→자사 TMS3PL/화주 개발EPIC-INTEGRATIONSJTBD-14 · JTBD-12STUB

JRN-COLDSTART · 제휴→온보딩 cold-start P0 Phase 0/1

페르소나 PLATFORM_ADMIN(LogiNippon 운영) · 맥락 검증된 #1 장벽인 cold-start(네트워크 효과·다단계 하청 데이터 공유 거부, H3 강검증)를 EPIC-ONBOARDING으로 돌파한다. 제휴(GATE-P0)가 미서명이면 이후 전 단계가 하드 블록된다.

  1. 파트너 자격평가
    루브릭(데이터 접근성·캐리어 강제력·규제 노출)으로 대형 화주(特定第一種荷主 ≥9만t) 또는 대형 운송사를 평가한다. DONE (제휴 모션·정성 평가, GTM은 gtm-pricing.html)
  2. PoC 서명 — GATE-P0 하드 게이트
    데이터 수신·送り状番号 매핑·APPI 동의 책임을 계약으로 명시한다. 미서명 시 Phase 1 전체 보류(PR-01). PARTIAL (계약/사업 의존, 게이트 DoD는 TRD GATE-P0)
  3. Admin 탭에서 캐리어·컨사이니·거점 생성
    PLATFORM_ADMIN AdminPanel에서 운송사·受取人 테넌트·拠点(facility)을 만든다(셀프가입 없음 — ADR-0001). DONE (FR-PROV-001·FR-PROV-002)
  4. 거점 지오펜스 폴리곤 선구축(100~200)
    자동 dwell·도착 이벤트의 전제인 거점 폴리곤을 미리 등록한다. DONE (지오펜스 CRUD FR-GEO-CRUD-001)
  5. 일회용 DRIVER 초대코드 발급
    캐리어별로 max_uses 1 · ttl 30d 일회용 초대코드를 발급한다(드라이버 셀프등록 핸드셰이크). DONE (콘솔 발급) — 단, 드라이버 앱 측 소비 핸드셰이크는 STUB (FR-AUTH-005)
  6. 드라이버 셀프등록
    초대코드로 드라이버가 가입·비밀번호 설정·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이자 데모 전략의 근간.

  1. ① 캐리어 + 컨사이니 선택 factory.step.select
    Shipments / 運送登録(factory) 진입 → 드롭다운에서 캐리어와 受取人 테넌트를 고른다(adminListCarriers/adminListConsignees). DONE
  2. ② 드라이버 + 차량 생성 factory.step.fleet
    드라이버 생성 시 비밀번호 ≥8자(disabled 가드)·위치 공유 APPI 동의 체크(consent_to_location_sharing), 차량은 LIGHT/MEDIUM/HEAVY 클래스로 등록한다. DONE (adminCreateDriver·adminCreateVehicle)
  3. ③ 멀티스톱 화물 등록 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)
  4. ④ 위치 시뮬레이션 factory.step.simulate
    생성된 shipment_id에 lat/lon을 입력해 adminSimulatePosition으로 ingest 파이프라인에 위치를 흘려보낸다(실 GPS 대체). DONE (ingest FR-INGEST-001)
  5. 맵 / 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). 설계는 핸즈프리·프라이버시·배터리 예산 가시성이다.

  1. 案件 푸시 수신
    FCM/APNs로 배달 지시(案件)를 받는다. PLANNED (앱 푸시 미배선, FR-ACQ-API-001)
  2. APPI 동의 온보딩(하드 게이트)
    위치 수집·이용 목적 고지 후 동의해야 잡 수신·공유가 열린다. 현재 앱은 hasConsent→false 고정. STUB (FR-ACQ-CONSENT-001)
  3. 受託(수락) — 큰 버튼 한 번
    최소 탭으로 案件을 수락한다(고령 드라이버 UX). 현재 JobsRepository는 빈 배열, token→null·_refreshToken UnimplementedError. STUB (FR-ACQ-API-001)
  4. 위치 공유 자동 ON
    수락과 동시에 잡 중에만 위치 공유가 켜진다(별도 "공유" 버튼 없음 — 자동화). STUB (FR-ACQ-AUTOSHARE-001)
  5. 주행 — 배경 GPS(적응 샘플링·오프라인 버퍼)
    백그라운드 위치를 적응 샘플링으로 수집하고 터널/오프라인 구간은 버퍼링 후 복구 전송한다. 앱의 TransistorLocationService주석 처리되어 미작동. STUB (FR-ACQ-GPS-001·FR-ACQ-OFFLINE-001)
  6. 지오펜스 ENTER/EXIT 서버 자동 도출
    거점 도착/출발은 클라이언트 탭이 아니라 서버측 H3 지오펜스 히스테리시스 엔진이 자동 도출한다(드라이버 조작 0). DONE(서버 엔진) — 단, 입력 핑은 앱 STUB에 의존 (FR-GEO-002)
  7. 完了報告 + 증빙 사진(R2)
    배달 완료 보고와 증빙 사진을 R2에 업로드한다(egress 무료). STUB (증빙·l10n 미배선)
  8. 완료 시 공유 자동 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).

  1. 지오펜스 자동 dwell_minutes 측정
    거점 enter/exit 히스테리시스로 stop.dwell_minutes를 자동 산출한다(수기 0). DONE (FR-GEO-003·KPI-DWELL-001)
  2. Reports(規制)에서 JST 기간 지정(≤92일)
    SHIPPER 전용 reports 탭에서 監督官庁 제출 기간을 JST로 고른다(최대 92일 윈도). DONE (FR-RPT-RANGE-001)
  3. 리포트 생성 — 행수 + report_id + JST + 法定2시간 초과 표시
    생성 결과에 행수·report_id·JST 타임스탬프가 찍히고, 임계 2시간(120분) 초과 건이 표시된다(dwell_minutes 143 = 荷待ち 예외). DONE (FR-RPT-NIMACHI-001·RR-NIMACHI-001)
  4. UTF-8 BOM CSV 다운로드(監督官庁용)
    R2에서 UTF-8 BOM CSV를 다운로드한다(egress 무료 — 반복 다운로드 무비용). DONE (RR-CSV-001)
  5. 납품처 협상
    시설별 평균 체류 통계를 납품처 개선 협상의 측정 가능 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).

  1. 로그인 → Inbound(到着便)
    컨사이니 IA(map/inbound/dashboard)로 진입한다(테넌트 격리 — 타 거점 비노출). DONE (FR-AUTH-004)
  2. 다캐리어 라이브 큐 확인
    화물·캐리어·거점·상태·ETA(+추정 플래그 eta_is_estimate)를 하나의 InboundView 큐에서 본다. DONE (FR-GEO-003·KPI-ETA-001)
  3. 행 클릭 → 맵
    큐 행을 클릭하면 FleetMap에 해당 화물이 포커스된다(never-empty 맵). DONE (FR-DLV-WS-001)
  4. 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).

  1. Map — 상태색 트럭 + stop pin(never-empty)
    상태(IN_TRANSIT/DELIVERED/EXCEPTION) 색 트럭과 stop 핀을 본다. 핑이 0이어도 맵은 비지 않는다(/shipments/tracking 6초 폴링). DONE (FR-DLV-TRACK-001)
  2. 예외 엔진
    지연·dwell 초과·추적 손실·경로 이탈·정차·픽업 등을 canonical_code로 분류한다. PARTIAL (룰 ETA STUB·일부 룰 미완, FR-ENG-EXC-001)
  3. 심각도/시간순 큐
    "지금 처리할 것 vs 모니터링"을 심각도·시간순 큐로 정렬한다(/shipments/tracking 6초 폴링). PARTIAL (큐 표시 DONE·룰ETA/sweep STUB, KPI-EXC-001)
  4. LINE / 웹훅 알림
    일본 B2B 현장 1순위 채널 LINE(이메일·웹훅 병행)로 예외를 즉시 통지한다. STUB (handleNotifyBatch ack-only — 실제 전달 미배선, FR-DLV-NOTIFY-001)
  5. 화물 클릭 → 맵 포커스
    알림/큐에서 화물을 클릭하면 맵으로 점프해 처리한다. 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).

  1. 공유 추적 링크 수신(로그인 없음)
    로그인 없는 추적 링크 URL을 받는다(self-track 뷰). PARTIAL (비-admin CustomerTrack 존재, FR-DLV-TRACK-001)
  2. ETA 페이지 — 차량 위치 생략
    受取人 스코프에서는 tracking 응답의 position생략되고 ETA만 노출된다(個人情報保護法). PARTIAL (마스킹 설계, SR-AUTHZ-001)
  3. 정직한 staleness / tracking_rate 노출
    staleness_seconds·tracking_rate·eta_is_estimate를 숨기지 않고 노출한다(스마트폰 GPS 한계 정직). PARTIAL (정직 노출 원칙, KPI-TRACK-001)
  4. 완료 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).

  1. API Key → 토큰 교환
    POST /v1/auth/token으로 API Key를 단기 액세스 토큰으로 교환한다(또는 키 직접 사용). 테넌트 스코프 자동 필터. STUB (계약 정의됨·구현 미완)
  2. REST 폴링 또는 웹훅 등록
    GET /v1/shipments/{id}/tracking 등 읽기 위주 REST를 폴링하거나 POST /v1/webhooks로 이벤트 구독을 등록한다. STUB (웹훅 CRUD 501·POST /v1/shipments 500, FR-DLV-WH-001)
  3. HMAC 서명 웹훅 수신
    X-LogiNippon-Signature(HMAC-SHA256, {timestamp}.{body}Timestamp(±5분 replay 방지)·Event-Id 헤더가 붙은 POST를 수신한다. STUB (전달 handleNotifyBatch ack-only)
  4. 서명 검증 · event id 멱등 · occurred_at 정렬
    상수 시간 서명 비교, id로 at-least-once 중복 무시(멱등), occurred_at 기준 정렬(순서 보장 없음 — 오래된 status로 덮어쓰지 않기). STUB (수신자 측 계약, SR-AUTHZ-001)
  5. 자사 TMS 소비(overlay)
    검증된 이벤트를 자사 TMS에 반영한다(ERP 대체 아닌 overlay). STUB (JTBD-14)

가치. 화주·3PL이 기존 시스템을 바꾸지 않고 가시성 데이터를 얹어 소비한다(Enterprise 에디션). 전 단계가 Phase 2·STUB이며, rate limit·웹훅 전달은 MVP-exit 이후 과제다.

근거·상호참조