Files
sam-docs/plans/bom-v2-universal-architecture-plan.md
김보곤 f83fa1821c docs: [sam] 슈퍼 솔루션 비전 + BOM V2 전 업종 맵 추가
- SAM 슈퍼 솔루션 비전 문서 (623만 사업체 범용 경영 플랫폼)
  - 모듈형 적응 아키텍처 (Core + Industry Modules)
  - 업종 프리셋 → 모듈 자동 활성화
  - 4단계 시장 진입 로드맵 (제조→서비스→소상공인→플랫폼)
  - 수익 모델 (Free/Starter/Business/Enterprise)
- BOM V2 부록: 전 업종 BOM 적용 맵
  - 20개 카테고리, 150+ 세부 업종의 BOM 유형 분류
  - ERP 사각지대 TOP 10 (외식 75만, 소매 40만 등)
  - 사업체 수 기반 시장 규모 분석
2026-03-22 20:18:20 +09:00

50 KiB
Raw Blame History

BOM V2 범용 멀티테넌트 아키텍처 설계

작성일: 2026-03-22 상태: 설계 중 담당: R&D실 목표: 어떤 업종/회사도 수용 가능한 확장형 BOM 시스템


1. V1 현황 진단

1.1 현재 구조 (3중 병렬)

V1 BOM 시스템
├── Product BOM (product_components)  ← 레거시, 폐기 진행 중
├── Design BOM (bom_templates)        ← 수식 산출용 (활성)
└── Item BOM (items.bom JSON)         ← 현재 표준
시스템 저장 방식 계층 버전 상태
Product BOM 관계형 (product_components) N-Level 없음 폐기 중
Design BOM 관계형 (bom_template_items) 1-Level 모델 버전 수식 전용
Item BOM JSON (items.bom) 1-Level* 없음 표준

*Item BOM은 저장이 1-Level이지만, 자식의 BOM을 재귀 탐색하여 트리를 구성한다.

1.2 V1 한계점

분류 한계 영향
구조 BOM이 JSON 평탄 저장 → 다단계 재귀 탐색 필요 성능 저하, 순환 참조 위험
구조 3개 BOM 시스템 병렬 → 데이터 일관성 유지 어려움 유지보수 비용
버전 BOM 버전/리비전 없음 (덮어쓰기) 변경 이력 추적 불가
유형 item_type 5종 고정 (FG/PT/SM/RM/CS) 반제품(WIP), 팬텀 등 미지원
수식 산출 수식이 경동기업 제품에 하드코딩 다른 업종 적용 불가
공정 BOM-공정(Routing) 연동 없음 공정별 자재 투입 관리 불가
대체 대체품목(Substitute) 미지원 자재 부족 시 대응 불가
유효 BOM 유효기간(Effectivity) 없음 설계 변경 시점 관리 불가
수율 수율/로스율이 Design BOM에만 존재 Item BOM에서 로스 관리 불가
원가 BOM 기반 원가 계산 구조 없음 표준원가 산출 불가
승인 BOM 승인 워크플로우 없음 무검증 BOM 변경 가능
비교 BOM 간 diff/비교 기능 제한적 설계 변경 영향 분석 어려움

1.3 V1에서 유지할 것

항목 이유
items 통합 테이블 Products+Materials 단일화 완료, 역행 불필요
tenant_id + BelongsToTenant 멀티테넌시 기반 확립
options JSON 정책 확장성 확보
BomTemplate 수식 엔진 파라미터 기반 산출 유지
Category 계층 분류 기존 카테고리 시스템 활용

2. V2 설계 원칙

2.1 핵심 원칙

P1. 전 업종 수용   — 제조/유통/건설/서비스/금융/구독 전부 지원
P2. 테넌트별 자율  — BOM 깊이, 유형, 수식, 단위를 테넌트가 정의
P3. 단일 BOM 엔진 — 3중 병렬 → 1개 통합 BOM 테이블
P4. 버전 필수      — 모든 BOM 변경은 리비전으로 관리
P5. 하위 호환      — V1 JSON BOM 데이터 무손실 마이그레이션
P6. 물리+비물리    — 자재뿐 아니라 노동/서비스/라이선스/구독도 구성요소

2.2 지원 대상 업종 (KSIC 22개 업종 전수 대응)

BOM = "상품이나 서비스를 구성하는 모든 요소의 구조화된 명세"로 확장 정의

A. 제조업 (KSIC C)

업종 BOM 특성 V2 대응 BOM 유형 깊이
블라인드/스크린 (현재) 수식 기반, 가변 사이즈 수식 엔진 유지 FORMULA 3~5
기계/금속 부품 다단계 조립, 가공 공정 N-Level + Routing STANDARD 4~7
전자/반도체 대체품목, ECN, 팬텀 Substitute + Effectivity STANDARD+ENGINEERING 7~12
식품/음료/화장품 배합비, 수율, 전성분 Formula BOM + Co-product FORMULA 2~5
의류/섬유 사이즈/컬러 변형 Variant BOM (매트릭스) CONFIGURABLE 2~3
자동차/부품 EBOM→MBOM→SBOM 전환 3단계 BOM 라이프사이클 CONFIGURABLE 7~12
조선/중공업 블록 단위, 3D 연계 프로젝트 BOM + 블록 분해 PROJECT 8~15
제약/의료기기 GMP, 로트 추적, 유효기한 Formula + 추적성 FORMULA 3~8

B. 비제조업 — 서비스/유통/금융

업종 BOM = 구성요소 V2 대응 BOM 유형 깊이
유통/이커머스 묶음 세트, 사은품, 포장 Kit/Bundle BOM STANDARD 2~3
건설/인테리어 자재+인력+장비+외주 (BOQ) Project BOM + 4요소 혼합 PROJECT 4~6
IT/SaaS 기능모듈, 인프라, 라이선스 Subscription BOM + 티어 SUBSCRIPTION 2~4
보험/금융 주계약+특약+담보 Configurable BOM + 요율 CONFIGURABLE 2~4
물류/운송 차량+인력+연료+운임 Service BOM + 수식 운임 SERVICE 2~3
교육/이러닝 강의+교재+플랫폼+부가 Subscription BOM SUBSCRIPTION 2~4
호텔/관광/여행 숙박+식사+교통+관광 Configurable + 동적 요금 CONFIGURABLE 2~3
광고/마케팅 인력+미디어비+제작비 Project BOM + 외주 PROJECT 3~4
법률/회계/컨설팅 인력공수+실비+외주 Service BOM (타임차지) SERVICE 2~3
인력파견/아웃소싱 인력+4대보험+수수료 Service BOM + 등급단가 SERVICE 2~3
렌탈/리스/구독 제품원가+소모품+금융비 Subscription + 정기교체 SUBSCRIPTION 2~4
부동산/건물관리 인력+소모품+법정점검 Service BOM + SLA SERVICE 2~4
에너지/플랜트 EPC 통합 (설계+조달+시공) Project BOM + O&M PROJECT 4~6
인쇄/출판/미디어 용지+잉크+공정+인력 Project BOM + 부수 단가 PROJECT 3~4

3. V2 데이터 모델

3.1 핵심 테이블 설계

V2 BOM 테이블 구조

items (기존 유지 + 확장)
  ├── item_type 확장: FG, SA, PT, WIP, PH, SM, RM, CS, BP, SV, LB, EQ, LC, TB, PK
  └── bom 컬럼: 제거 (관계형으로 이관)

bom_headers (신규 — BOM 헤더/버전)
  ├── item_id → items
  ├── revision (REV.01, REV.02 ...)
  ├── status (DRAFT → PENDING → APPROVED → ACTIVE → OBSOLETE)
  ├── effective_from / effective_to
  └── bom_type (STANDARD | ENGINEERING | CONFIGURABLE | FORMULA | PROJECT | SERVICE | SUBSCRIPTION)

bom_lines (신규 — BOM 라인/구성품)
  ├── bom_header_id → bom_headers
  ├── child_item_id → items
  ├── quantity + quantity_formula
  ├── waste_rate (로스율)
  ├── operation_id → operations (공정 연결)
  ├── effective_from / effective_to (라인별 유효기간)
  └── options JSON (확장 속성)

bom_substitutes (신규 — 대체품목)
  ├── bom_line_id → bom_lines
  ├── substitute_item_id → items
  ├── priority (대체 우선순위)
  └── conversion_factor (환산 계수)

operations (신규 — 공정/라우팅)
  ├── item_id → items
  ├── sequence (공정 순서)
  ├── process_id → processes (공정 마스터)
  ├── setup_time, run_time, wait_time
  └── work_center_id (작업장)

3.2 ERD 관계

items ─────────────────────────────────────────────────
  │ (1:N)                                              │
  ▼                                                    │
bom_headers ──────────────────────────                 │
  │ (1:N)                            │                 │
  ▼                                  │                 │
bom_lines ─── (N:1) ──→ items ◄─────┘                │
  │ (1:N)        │                                     │
  ▼              │ (N:1)                               │
bom_substitutes  ▼                                     │
                operations ─── (N:1) ──→ processes     │
                  │                                    │
                  └── (N:1) ──→ work_centers           │
                                                       │
bom_templates (기존 유지)                               │
  └── 수식 산출 → bom_headers 자동 생성 ───────────────┘

3.3 items.item_type 확장 (5→15종)

물리적 품목 (Physical)

코드 한글 설명 V1 V2 대표 업종
FG 완제품 판매 가능한 최종 제품 O O 전 업종
SA 반조립품 중간 조립품 (재고 관리됨) - 신규 전자, 자동차, 가구
PT 부품 구성 부품 O O 전 업종
WIP 재공품 가공 중인 중간 산출물 - 신규 제조업 전반
PH 팬텀 가상 그룹 (재고 없음, BOM 전개 시 투과) - 신규 전자, 조선
SM 부자재 보조 자재 O O 전 업종
RM 원자재 주요 원료 O O 제조업, 건설, 식품
CS 소모품 일회성 소모 자재 O O 전 업종
BP 부산물 생산 시 발생하는 부산물 - 신규 식품, 화학, 제약

비물리적 품목 (Non-Physical) — 서비스/유통/금융 업종 핵심

코드 한글 설명 V1 V2 대표 업종
SV 서비스 외주 가공, 검사비, 용역 - 신규 전 업종
LB 노동 인력 공수 (M/M, M/D, 시간) - 신규 건설, IT, 컨설팅, 광고
EQ 장비 장비/설비 임대, 감가상각 할당 - 신규 건설, 물류, 인쇄
LC 라이선스 SW 라이선스, 저작권, 특허 - 신규 IT, 미디어, 교육
TB 시간제 시간/기간 기반 항목 (숙박, 구독) - 신규 호텔, 렌탈, 교육
PK 패키지 복합 상품 패키지 (보험 특약, 여행 패키지) - 신규 보험, 여행, 유통

테넌트별로 사용할 유형을 선택한다. 블라인드 업체는 FG/PT/SM/RM/CS만, IT SaaS는 FG/PK/LC/TB/SV를 활성화.

3.4 bom_headers 상세

CREATE TABLE bom_headers (
    id              BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id       BIGINT UNSIGNED NOT NULL,
    item_id         BIGINT UNSIGNED NOT NULL,          -- 부모 품목
    revision        VARCHAR(20) NOT NULL DEFAULT 'REV.01',
    bom_type        VARCHAR(20) NOT NULL DEFAULT 'STANDARD',
    -- STANDARD:      고정 자재 구성 (제조, 유통 세트)
    -- ENGINEERING:   설계용 (비생산, 승인 후 STANDARD 전환)
    -- CONFIGURABLE:  옵션 조합 (보험 특약, 호텔 패키지, 차량 옵션)
    -- FORMULA:       배합/수식 (식품, 화장품, 블라인드 수식 산출)
    -- PROJECT:       수주형 1회성 (건설 BOQ, 광고 캠페인, SI 프로젝트)
    -- SERVICE:       노동/시간 중심 (컨설팅, 물류, FM, 인력파견)
    -- SUBSCRIPTION:  구독/반복 과금 (SaaS, 렌탈, 교육, 멤버십)
    status          VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
    -- DRAFT → PENDING → APPROVED → ACTIVE → OBSOLETE
    effective_from  DATE NULL,                          -- 유효 시작
    effective_to    DATE NULL,                          -- 유효 종료
    base_qty        DECIMAL(18,6) NOT NULL DEFAULT 1,  -- 기준 수량
    base_unit       VARCHAR(20) NULL,                   -- 기준 단위
    description     TEXT NULL,
    approved_by     BIGINT UNSIGNED NULL,               -- 승인자
    approved_at     DATETIME NULL,
    source_template_id BIGINT UNSIGNED NULL,            -- Design BOM 연결
    options         JSON NULL,                          -- 확장 속성
    created_by      BIGINT UNSIGNED NULL,
    updated_by      BIGINT UNSIGNED NULL,
    created_at      TIMESTAMP NULL,
    updated_at      TIMESTAMP NULL,
    deleted_at      TIMESTAMP NULL,

    UNIQUE KEY uq_bom_tenant_item_rev (tenant_id, item_id, revision, deleted_at),
    INDEX idx_bom_tenant_item (tenant_id, item_id),
    INDEX idx_bom_tenant_status (tenant_id, status),
    INDEX idx_bom_effective (tenant_id, effective_from, effective_to)
);

3.5 bom_lines 상세

CREATE TABLE bom_lines (
    id              BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id       BIGINT UNSIGNED NOT NULL,
    bom_header_id   BIGINT UNSIGNED NOT NULL,
    child_item_id   BIGINT UNSIGNED NOT NULL,           -- 자식 품목
    quantity        DECIMAL(18,6) NOT NULL DEFAULT 1,   -- 소요량
    quantity_formula VARCHAR(500) NULL,                  -- 수식 (예: "W1 * H1 / 1000000")
    unit            VARCHAR(20) NULL,
    waste_rate      DECIMAL(9,6) NOT NULL DEFAULT 0,    -- 로스율 (0.05 = 5%)
    category        VARCHAR(100) NULL,                  -- 카테고리 그룹명
    operation_id    BIGINT UNSIGNED NULL,                -- 공정 연결
    effective_from  DATE NULL,                          -- 라인별 유효 시작
    effective_to    DATE NULL,                          -- 라인별 유효 종료
    is_phantom      TINYINT(1) NOT NULL DEFAULT 0,      -- 팬텀 여부 (BOM 전개 시 투과)
    is_optional     TINYINT(1) NOT NULL DEFAULT 0,      -- 옵션 여부 (CONFIGURABLE BOM)
    option_group    VARCHAR(100) NULL,                  -- 옵션 그룹명 (같은 그룹 내 택1)
    supply_type     VARCHAR(20) DEFAULT 'STOCK',        -- STOCK | PURCHASE | SUBCONTRACT
    -- 비물리적 항목용 필드 (서비스/노동/구독)
    duration_value  DECIMAL(10,2) NULL,                 -- 기간 값 (숙박 2박, 구독 12개월)
    duration_unit   VARCHAR(20) NULL,                   -- 기간 단위 (DAY|MONTH|YEAR|HOUR)
    billing_cycle   VARCHAR(20) NULL,                   -- 과금 주기 (MONTHLY|YEARLY|ONCE)
    grade_level     VARCHAR(50) NULL,                   -- 인력 등급 (시니어/주니어, 파트너/어소)
    unit_price      DECIMAL(18,4) NULL,                 -- 단가 (시간당, 월당, 건당)
    sort_order      INT NOT NULL DEFAULT 0,
    notes           VARCHAR(500) NULL,
    options         JSON NULL,                          -- 확장 속성
    created_by      BIGINT UNSIGNED NULL,
    updated_by      BIGINT UNSIGNED NULL,
    created_at      TIMESTAMP NULL,
    updated_at      TIMESTAMP NULL,
    deleted_at      TIMESTAMP NULL,

    INDEX idx_bl_tenant_header (tenant_id, bom_header_id),
    INDEX idx_bl_child (child_item_id),
    INDEX idx_bl_operation (operation_id),
    INDEX idx_bl_effective (effective_from, effective_to)
);

3.6 bom_substitutes 상세

CREATE TABLE bom_substitutes (
    id                  BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id           BIGINT UNSIGNED NOT NULL,
    bom_line_id         BIGINT UNSIGNED NOT NULL,
    substitute_item_id  BIGINT UNSIGNED NOT NULL,       -- 대체 품목
    priority            INT NOT NULL DEFAULT 1,         -- 대체 우선순위 (1=최우선)
    conversion_factor   DECIMAL(12,6) NOT NULL DEFAULT 1, -- 환산 계수
    effective_from      DATE NULL,
    effective_to        DATE NULL,
    notes               VARCHAR(255) NULL,
    options             JSON NULL,
    created_at          TIMESTAMP NULL,
    updated_at          TIMESTAMP NULL,

    INDEX idx_bs_tenant_line (tenant_id, bom_line_id),
    UNIQUE KEY uq_bs_line_sub (bom_line_id, substitute_item_id)
);

4. BOM 유형별 동작

4.1 STANDARD BOM (표준 BOM)

가장 일반적인 형태. 고정 수량 기반.

FG-001 (스크린 제품) [REV.02, ACTIVE, 2026-01-01~]
├── [주자재] RM-001 스크린 원단     x10.65 m²  (로스 5%)
├── [모터]   PT-001 모터 150K       x1 EA
├── [제어기] PT-002 제어기 노출형    x1 EA
├── [절곡품] WIP-001 케이스 500*380  x3.22 m    → 공정: 절곡
├── [절곡품] WIP-002 마구리 505*385  x1 EA      → 공정: 절곡
├── [부자재] SM-001 감기샤프트       x1 EA
├── [검사비] SV-001 검사비           x1 EA
└── [대체] PT-001 → PT-001-B 모터 200K (priority=1, factor=1.0)

4.2 FORMULA BOM (수식 BOM)

파라미터 입력 → 수식 평가 → 수량 자동 계산. 기존 Design BOM의 발전형.

FG-KSS02 (스크린 SUS 측면형) [FORMULA]
├── 파라미터: W0=3000, H0=3000, QTY=1, MP=single
├── 변수계산: W1=W0+140, H1=H0+350, M=W1*H1/1e6, K=M*2+(W0/1000)*14.17
│
├── RM-슬랫     qty_formula="M"           → 10.65 m²
├── PT-모터     qty_formula="1"           → 1 EA
├── WIP-케이스  qty_formula="W1/1000"     → 3.14 m
├── SM-샤프트   qty_formula="CEIL(H1/2000)" → 2 EA
└── SV-검사     qty_formula="1"           → 1 EA

수식 평가 후 결과를 STANDARD BOM으로 스냅샷 저장 가능 (V1의 "BOM 저장" 기능 유지).

4.3 CONFIGURABLE BOM (구성형 BOM)

옵션 조합에 따라 구성이 달라지는 BOM. 가구/의류/맞춤 제품에 적합.

FG-DESK (사무용 책상) [CONFIGURABLE]
├── [공통] PT-프레임     x1 EA      — 항상 포함
├── [공통] SM-나사세트    x1 SET     — 항상 포함
│
├── [옵션: 상판 재질]
│   ├── 원목 → RM-원목상판 x1 EA
│   ├── MDF  → RM-MDF상판  x1 EA
│   └── 유리 → RM-유리상판 x1 EA + SM-흡착패드 x4 EA
│
└── [옵션: 다리 높이]
    ├── 표준(720mm) → PT-다리-720 x4 EA
    └── 높은(900mm) → PT-다리-900 x4 EA

4.4 ENGINEERING BOM (설계 BOM)

생산 투입 전 설계 단계 BOM. 승인 후 STANDARD로 전환.

ENGINEERING BOM (설계팀)
  │ 검토 → 승인
  ▼
STANDARD BOM (생산팀)
  │ ECN (설계 변경)
  ▼
새 REVISION 생성 (REV.02)

4.5 PROJECT BOM (프로젝트 BOM)

수주형 1회성 프로젝트. 건설 BOQ, SI 프로젝트, 광고 캠페인 등.

PRJ-APT (아파트 신축 프로젝트) [PROJECT]
├── [공종: 토목기초]
│   ├── RM-철근     x120 톤      → 조달: 구매
│   ├── RM-레미콘   x800 m³      → 조달: 구매
│   ├── LB-철근공   x40 M/D      → grade: 기능공
│   └── EQ-크레인   x30 일       → duration: 30 DAY
├── [공종: 골조]
│   ├── RM-철근     x350 톤
│   ├── LB-형틀목공  x80 M/D
│   └── EQ-타워크레인 x90 일
├── [공종: 전기설비]
│   ├── PT-배전반   x3 SET
│   └── LB-전기공   x60 M/D      → grade: 특급기능공
└── [외주]
    └── SV-소방설비  x1 식        → supply: SUBCONTRACT

4.6 SERVICE BOM (서비스 BOM)

노동/시간 중심. 컨설팅, 물류, 시설관리, 인력파견 등.

SV-CONSULTING (경영 컨설팅 프로젝트) [SERVICE]
├── [인력]
│   ├── LB-프로젝트리더  x3 M/M   → grade: 파트너, unit_price: 2000만/월
│   ├── LB-시니어컨설턴트 x6 M/M   → grade: 시니어, unit_price: 1200만/월
│   └── LB-주니어컨설턴트 x12 M/M  → grade: 주니어, unit_price: 700만/월
├── [도구/솔루션]
│   ├── LC-분석SW라이선스  x3 개월  → billing: MONTHLY
│   └── LC-설문플랫폼     x1 개월
├── [실비]
│   ├── CS-출장교통비      x20 건
│   └── CS-인쇄비          x500 부
└── [산출물]
    ├── SV-현황진단보고서   x1 건
    └── SV-전략보고서       x1 건

SV-LOGISTICS (화물운송) [SERVICE]
├── EQ-5톤냉장탑차    x1 대
├── LB-운전기사       x8 시간    → grade: 1종대형
├── RM-경유           qty_formula="거리km * 0.12"  → 수식: 거리 비례
├── SV-상하차인력     x2 인·시간  → optional: true
└── PK-화물보험       x1 건      → optional: true, 화물가액 비례

4.7 SUBSCRIPTION BOM (구독 BOM)

기간/과금 기반 반복 서비스. SaaS, 렌탈, 교육, 멤버십 등.

PK-SAAS-ENT (ERP SaaS Enterprise 플랜) [SUBSCRIPTION]
├── [기능 모듈] — billing: MONTHLY
│   ├── LC-재무회계모듈     x1     → 포함
│   ├── LC-생산관리모듈     x1     → 포함
│   ├── LC-인사급여모듈     x1     → 포함
│   └── LC-구매물류모듈     x1     → 포함
├── [인프라]
│   ├── TB-vCPU            x8 코어  → billing: MONTHLY
│   ├── TB-메모리           x32 GB
│   └── TB-스토리지         x500 GB
├── [라이선스]
│   ├── LC-사용자계정       x50 User → billing: MONTHLY
│   └── LC-동시접속         x20 Session
└── [옵션 부가서비스] — optional: true
    ├── SV-전담CS지원       x10 시간/월 → option_group: "support"
    ├── SV-데이터백업       x1 일1회    → option_group: "backup"
    └── SV-교육             x2 회/연    → option_group: "training"

PK-RENTAL (정수기 렌탈) [SUBSCRIPTION]
├── FG-정수기본체     x1 EA      → 감가상각: 60개월
├── [정기 교체 소모품] — duration_unit: MONTH
│   ├── PT-세디먼트필터  x1 EA   → 교체주기: 6개월
│   ├── PT-카본필터      x1 EA   → 교체주기: 6개월
│   └── PT-UF멤브레인   x1 EA    → 교체주기: 12개월
├── LB-위생점검인력    x1 회/월   → billing: MONTHLY
└── SV-금융비용        x1 식      → unit_price: 취득가 × 조달금리 / 계약개월

5. BOM 버전 관리

5.1 리비전 워크플로우

REV.01 (DRAFT)
  │ 편집 완료
  ▼
REV.01 (PENDING)        ← 승인 요청
  │ 승인자 확인
  ▼
REV.01 (APPROVED)       ← 승인 완료
  │ 유효기간 도래
  ▼
REV.01 (ACTIVE)         ← 생산에 사용
  │ 설계 변경 발생
  ▼
REV.01 (OBSOLETE)       ← 비활성화
REV.02 (DRAFT) 생성     ← 새 리비전

5.2 유효기간 관리

REV.01  ────────[2025-01-01 ~ 2026-06-30]────────
REV.02                    [2026-07-01 ~ ]──────────────
                                       ↑
                              설계 변경 적용일
  • 특정 날짜에 유효한 BOM 조회: WHERE effective_from <= ? AND (effective_to IS NULL OR effective_to >= ?)
  • 라인별 유효기간: 부품 단종/교체 시 개별 라인 종료

5.3 BOM 비교 (Diff)

{
  "comparison": "REV.01 vs REV.02",
  "added": [
    { "item": "PT-003 신규부품", "qty": 2 }
  ],
  "removed": [
    { "item": "PT-002 구부품", "qty": 1 }
  ],
  "changed": [
    { "item": "RM-001 원단", "qty_before": 10.0, "qty_after": 10.65, "reason": "로스율 반영" }
  ]
}

6. 팬텀(Phantom) 품목

6.1 개념

팬텀 품목은 재고로 관리하지 않는 가상 그룹이다. BOM 전개(Explosion) 시 팬텀은 "투과"되어 하위 구성품이 직접 상위로 올라간다.

6.2 V1 → V2 매핑

V1의 item_type: CAT (카테고리 그룹)가 V2의 팬텀에 해당한다.

V1 (가상 CAT 노드):
FG-001
  ├── [CAT] 주자재 (가상 — DB에 없음, 코드로 생성)
  │   └── RM-001 스크린 원단
  └── [CAT] 모터 (가상)
      └── PT-001 모터

V2 (팬텀 품목):
FG-001
  ├── PH-주자재 (팬텀 — items 테이블에 실체 있음)
  │   └── RM-001 스크린 원단
  └── PH-모터 (팬텀)
      └── PT-001 모터

BOM 전개 결과 (MRP):
FG-001 → RM-001, PT-001 (팬텀 투과)

6.3 팬텀 활용

용도 설명
그룹화 V1의 카테고리 그룹을 구조화
중간조립 생략 재고 불필요한 중간 단계
공통 부품군 여러 FG에서 공유하는 부품 묶음

7. 공정-BOM 연동 (Routing)

7.1 공정 마스터

CREATE TABLE processes (
    id          BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id   BIGINT UNSIGNED NOT NULL,
    code        VARCHAR(50) NOT NULL,
    name        VARCHAR(255) NOT NULL,
    type        VARCHAR(50) NULL,   -- FABRICATION | ASSEMBLY | INSPECTION | SUBCONTRACT
    options     JSON NULL,
    is_active   BOOLEAN DEFAULT TRUE,
    created_at  TIMESTAMP NULL,
    updated_at  TIMESTAMP NULL,
    deleted_at  TIMESTAMP NULL,

    UNIQUE KEY uq_process_tenant_code (tenant_id, code, deleted_at)
);

7.2 공정 라우팅

CREATE TABLE operations (
    id              BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id       BIGINT UNSIGNED NOT NULL,
    item_id         BIGINT UNSIGNED NOT NULL,       -- 대상 품목
    bom_header_id   BIGINT UNSIGNED NULL,           -- BOM과 연결 (선택)
    sequence        INT NOT NULL,                   -- 공정 순서 (10, 20, 30...)
    process_id      BIGINT UNSIGNED NOT NULL,       -- 공정 마스터
    work_center_id  BIGINT UNSIGNED NULL,           -- 작업장/설비
    setup_time      DECIMAL(10,2) DEFAULT 0,        -- 준비 시간 (분)
    run_time        DECIMAL(10,2) DEFAULT 0,        -- 가동 시간 (분/단위)
    wait_time       DECIMAL(10,2) DEFAULT 0,        -- 대기 시간 (분)
    description     VARCHAR(500) NULL,
    options         JSON NULL,
    created_at      TIMESTAMP NULL,
    updated_at      TIMESTAMP NULL,
    deleted_at      TIMESTAMP NULL,

    INDEX idx_op_tenant_item (tenant_id, item_id),
    INDEX idx_op_sequence (item_id, sequence)
);

7.3 공정별 자재 투입

FG-001 스크린 제품
  공정 10: 원단 재단  → RM-001 원단 (이 공정에서 투입)
  공정 20: 절곡 가공  → WIP-001 케이스, WIP-002 마구리
  공정 30: 조립       → PT-001 모터, PT-002 제어기, SM-001 샤프트
  공정 40: 검사       → SV-001 검사비
  공정 50: 포장       → SM-002 포장재

bom_lines.operation_id로 각 자재가 어느 공정에서 투입되는지 연결한다.


8. 테넌트별 BOM 설정

8.1 테넌트 BOM 설정 (tenant_bom_settings)

CREATE TABLE tenant_bom_settings (
    id              BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id       BIGINT UNSIGNED NOT NULL UNIQUE,
    -- 활성화할 품목 유형
    enabled_item_types  JSON NOT NULL DEFAULT '["FG","PT","SM","RM","CS"]',
    -- 활성화할 BOM 유형
    enabled_bom_types   JSON NOT NULL DEFAULT '["STANDARD"]',
    -- BOM 최대 깊이
    max_bom_depth       INT NOT NULL DEFAULT 10,
    -- 승인 워크플로우 사용 여부
    require_approval    BOOLEAN NOT NULL DEFAULT FALSE,
    -- 유효기간 관리 사용 여부
    use_effectivity     BOOLEAN NOT NULL DEFAULT FALSE,
    -- 대체품목 사용 여부
    use_substitutes     BOOLEAN NOT NULL DEFAULT FALSE,
    -- 공정(Routing) 연동 여부
    use_routing         BOOLEAN NOT NULL DEFAULT FALSE,
    -- 로스율 관리 여부
    use_waste_rate      BOOLEAN NOT NULL DEFAULT FALSE,
    -- 팬텀 품목 사용 여부
    use_phantom         BOOLEAN NOT NULL DEFAULT FALSE,
    -- 수식 BOM 사용 여부
    use_formula_bom     BOOLEAN NOT NULL DEFAULT FALSE,
    -- 비물리적 항목 (서비스/노동/구독) 사용 여부
    use_labor_items     BOOLEAN NOT NULL DEFAULT FALSE,
    -- 구독/과금 주기 관리 여부
    use_billing_cycle   BOOLEAN NOT NULL DEFAULT FALSE,
    -- 옵션 BOM (CONFIGURABLE) 사용 여부
    use_option_groups   BOOLEAN NOT NULL DEFAULT FALSE,
    -- 카테고리 그룹 표시 방식
    category_display    VARCHAR(20) DEFAULT 'FOLDER',  -- FOLDER | FLAT | NONE
    -- 커스텀 BOM 라인 필드 (테넌트별 확장)
    custom_line_fields  JSON NULL,
    options             JSON NULL,
    created_at          TIMESTAMP NULL,
    updated_at          TIMESTAMP NULL
);

8.2 업종별 프리셋 (12 카테고리, KSIC 22개 업종 커버)

프리셋 ID 대상 업종 KSIC BOM 유형 품목 유형
mfg_discrete 기계/금속/전자 제조 C25~C28 STANDARD, ENGINEERING FG,SA,PT,PH,WIP,SM,RM,CS
mfg_formula 식품/화학/화장품/제약 C10~C21 FORMULA, STANDARD FG,PT,RM,CS,BP,SV
mfg_custom 블라인드/가구/의류 C13~C32 FORMULA, CONFIGURABLE FG,PT,WIP,SM,RM,CS,SV
mfg_heavy 자동차/조선/중공업 C30,C281 STANDARD, CONFIGURABLE, ENGINEERING FG,SA,PT,PH,WIP,SM,RM,CS,SV
construction 건설/인테리어/에너지 F41~42, D35 PROJECT, CONFIGURABLE FG,PT,SM,RM,CS,LB,EQ,SV
distribution 유통/도소매/이커머스 G45~47 STANDARD FG,PT,SM,CS,PK
it_saas IT/SaaS/솔루션 J58~63 SUBSCRIPTION, PROJECT FG,PK,LC,TB,LB,SV
finance_insurance 보험/금융 K64~66 CONFIGURABLE, SUBSCRIPTION FG,PK,SV,TB
professional 법률/회계/컨설팅/광고 M69~71 SERVICE, PROJECT SV,LB,LC,CS,EQ
logistics 물류/운송/인력파견 H49~52, N78 SERVICE SV,LB,EQ,CS,PK
hospitality 호텔/관광/교육 I55, N79, P85 CONFIGURABLE, SUBSCRIPTION FG,PK,SV,TB,LB
rental 렌탈/리스/구독 N77, K64 SUBSCRIPTION FG,PT,CS,SV,TB,LB

프리셋 상세 (JSON)

{
  "mfg_discrete": {
    "label": "이산/조립 제조 (기계, 전자, 금속)",
    "enabled_item_types": ["FG","SA","PT","PH","WIP","SM","RM","CS"],
    "enabled_bom_types": ["STANDARD","ENGINEERING"],
    "max_bom_depth": 15,
    "require_approval": true,
    "use_effectivity": true,
    "use_substitutes": true,
    "use_phantom": true,
    "use_routing": true,
    "use_waste_rate": true,
    "category_display": "FOLDER"
  },
  "mfg_formula": {
    "label": "배합/공정 제조 (식품, 화학, 화장품, 제약)",
    "enabled_item_types": ["FG","PT","RM","CS","BP","SV"],
    "enabled_bom_types": ["FORMULA","STANDARD"],
    "max_bom_depth": 5,
    "use_formula_bom": true,
    "use_waste_rate": true,
    "use_routing": true,
    "category_display": "FLAT"
  },
  "mfg_custom": {
    "label": "주문 제작 (블라인드, 가구, 의류)",
    "enabled_item_types": ["FG","PT","WIP","SM","RM","CS","SV"],
    "enabled_bom_types": ["FORMULA","CONFIGURABLE","STANDARD"],
    "max_bom_depth": 5,
    "use_formula_bom": true,
    "use_waste_rate": true,
    "use_routing": true,
    "category_display": "FOLDER"
  },
  "construction": {
    "label": "건설/인테리어/에너지 (BOQ+WBS)",
    "enabled_item_types": ["FG","PT","SM","RM","CS","LB","EQ","SV"],
    "enabled_bom_types": ["PROJECT","CONFIGURABLE"],
    "max_bom_depth": 6,
    "use_routing": true,
    "category_display": "FOLDER"
  },
  "distribution": {
    "label": "유통/도소매 (세트/번들)",
    "enabled_item_types": ["FG","PT","SM","CS","PK"],
    "enabled_bom_types": ["STANDARD"],
    "max_bom_depth": 3,
    "category_display": "FLAT"
  },
  "it_saas": {
    "label": "IT/SaaS/솔루션 (구독+프로젝트)",
    "enabled_item_types": ["FG","PK","LC","TB","LB","SV"],
    "enabled_bom_types": ["SUBSCRIPTION","PROJECT"],
    "max_bom_depth": 4,
    "category_display": "FOLDER"
  },
  "finance_insurance": {
    "label": "보험/금융 (주계약+특약)",
    "enabled_item_types": ["FG","PK","SV","TB"],
    "enabled_bom_types": ["CONFIGURABLE","SUBSCRIPTION"],
    "max_bom_depth": 4,
    "category_display": "FOLDER"
  },
  "professional": {
    "label": "전문 서비스 (법률, 회계, 컨설팅, 광고)",
    "enabled_item_types": ["SV","LB","LC","CS","EQ"],
    "enabled_bom_types": ["SERVICE","PROJECT"],
    "max_bom_depth": 4,
    "category_display": "FLAT"
  },
  "logistics": {
    "label": "물류/운송/인력파견",
    "enabled_item_types": ["SV","LB","EQ","CS","PK"],
    "enabled_bom_types": ["SERVICE"],
    "max_bom_depth": 3,
    "use_formula_bom": true,
    "category_display": "FLAT"
  },
  "hospitality": {
    "label": "호텔/관광/교육/여행",
    "enabled_item_types": ["FG","PK","SV","TB","LB"],
    "enabled_bom_types": ["CONFIGURABLE","SUBSCRIPTION"],
    "max_bom_depth": 3,
    "category_display": "FOLDER"
  },
  "rental": {
    "label": "렌탈/리스/구독 서비스",
    "enabled_item_types": ["FG","PT","CS","SV","TB","LB"],
    "enabled_bom_types": ["SUBSCRIPTION"],
    "max_bom_depth": 4,
    "category_display": "FOLDER"
  }
}

9. API 설계

9.1 엔드포인트 구조

/api/v2/items/{itemId}/bom/
  ├── GET    /                     BOM 헤더 목록 (리비전 이력)
  ├── POST   /                     BOM 헤더 생성 (새 리비전)
  ├── GET    /{bomId}              BOM 상세 (헤더 + 라인)
  ├── PUT    /{bomId}              BOM 헤더 수정
  ├── DELETE /{bomId}              BOM 삭제 (DRAFT만)
  │
  ├── GET    /{bomId}/lines        BOM 라인 목록
  ├── POST   /{bomId}/lines        라인 추가
  ├── PUT    /{bomId}/lines/bulk   라인 일괄 업서트
  ├── PUT    /{bomId}/lines/{id}   라인 수정
  ├── DELETE /{bomId}/lines/{id}   라인 삭제
  │
  ├── GET    /{bomId}/tree         BOM 트리 (재귀, 팬텀 투과 옵션)
  ├── GET    /{bomId}/flat         BOM 전개 (Explosion, 평탄화)
  ├── GET    /{bomId}/where-used   역전개 (이 품목을 사용하는 BOM)
  │
  ├── POST   /{bomId}/approve      승인 요청
  ├── POST   /{bomId}/activate     활성화
  ├── POST   /{bomId}/obsolete     비활성화
  ├── POST   /{bomId}/clone        복제 (새 리비전)
  ├── GET    /{bomId}/diff/{otherId} BOM 비교
  │
  ├── GET    /{bomId}/substitutes  대체품목 목록
  ├── POST   /{bomId}/lines/{id}/substitutes  대체품목 추가
  │
  └── POST   /{bomId}/calculate    수식 BOM 계산 (FORMULA 타입)

/api/v2/bom/
  ├── GET    /settings             테넌트 BOM 설정 조회
  ├── PUT    /settings             테넌트 BOM 설정 변경
  ├── GET    /search               BOM 검색 (품목코드, 구성품 등)
  └── POST   /mass-replace         품목 일괄 대체 (ECN)

9.2 BOM 트리 응답 (V2)

{
  "bom_header": {
    "id": 1,
    "item_id": 100,
    "revision": "REV.02",
    "status": "ACTIVE",
    "bom_type": "STANDARD",
    "effective_from": "2026-07-01",
    "base_qty": 1
  },
  "tree": {
    "id": 100,
    "code": "FG-KSS02",
    "name": "KSS02 스크린 SUS 측면형",
    "item_type": "FG",
    "depth": 0,
    "children": [
      {
        "bom_line_id": 10,
        "id": 0,
        "name": "주자재",
        "item_type": "PH",
        "is_phantom": true,
        "depth": 1,
        "children": [
          {
            "bom_line_id": 11,
            "id": 201,
            "code": "RM-슬랫-방화",
            "name": "스크린 실리카",
            "item_type": "RM",
            "quantity": 10.65,
            "unit": "m²",
            "waste_rate": 0.05,
            "effective_quantity": 11.18,
            "operation": { "sequence": 10, "name": "원단 재단" },
            "substitutes": [
              { "item_code": "RM-슬랫-일반", "priority": 1, "factor": 1.0 }
            ],
            "depth": 2,
            "children": []
          }
        ]
      }
    ]
  },
  "summary": {
    "total_items": 17,
    "total_groups": 6,
    "max_depth": 3,
    "has_substitutes": true,
    "has_formulas": false
  }
}

10. V1 → V2 마이그레이션

10.1 마이그레이션 전략

Phase 1: 테이블 생성 (V2 테이블 추가, V1 유지)
  │
Phase 2: 데이터 이관 (items.bom JSON → bom_headers + bom_lines)
  │
Phase 3: API 전환 (V1 API 유지 + V2 API 추가)
  │
Phase 4: 프론트엔드 전환 (MNG/React V2 UI)
  │
Phase 5: V1 폐기 (items.bom 컬럼 제거, V1 API 제거)

10.2 데이터 이관 스크립트

// items.bom JSON → bom_headers + bom_lines 변환
foreach (Item::whereNotNull('bom')->cursor() as $item) {
    $header = BomHeader::create([
        'tenant_id'  => $item->tenant_id,
        'item_id'    => $item->id,
        'revision'   => 'REV.01',
        'bom_type'   => 'STANDARD',
        'status'     => 'ACTIVE',
        'base_qty'   => 1,
    ]);

    foreach ($item->bom as $i => $bomLine) {
        BomLine::create([
            'tenant_id'     => $item->tenant_id,
            'bom_header_id' => $header->id,
            'child_item_id' => $bomLine['child_item_id'],
            'quantity'      => $bomLine['quantity'] ?? 1,
            'unit'          => $bomLine['unit'] ?? null,
            'category'      => $bomLine['category'] ?? null,
            'sort_order'    => $i,
        ]);
    }
}

10.3 하위 호환

V1 API V2 대응 전환 방식
GET /v1/items/{id}/bom/tree GET /v2/items/{id}/bom/{activeId}/tree V1 래퍼 → V2 호출
POST /v1/items/{id}/save-bom POST /v2/items/{id}/bom + lines V1 래퍼 유지
POST /v1/quotes/calculate/bom POST /v2/items/{id}/bom/{id}/calculate V1 래퍼 유지

11. 구현 로드맵

Phase 1: 기반 구축 (2~3주)

  • bom_headers, bom_lines, bom_substitutes 마이그레이션 생성
  • tenant_bom_settings 테이블 및 프리셋
  • BomHeader, BomLine, BomSubstitute 모델 생성
  • BomService 핵심 CRUD (생성, 조회, 수정, 삭제)
  • V1 items.bom → V2 데이터 이관 스크립트
  • V2 BOM API 기본 엔드포인트

Phase 2: 핵심 기능 (2~3주)

  • BOM 트리 빌더 (재귀, 팬텀 투과, 깊이 제한)
  • BOM 전개 (Explosion) — 평탄화 조회
  • 역전개 (Where-Used) — 이 부품을 사용하는 상위 BOM
  • BOM 버전 관리 (리비전 생성, 복제)
  • BOM 비교 (Diff)
  • items.item_type 확장 (SA, WIP, PH, BP, SV)

Phase 3: 확장 기능 (3~4주)

  • 수식 BOM (FORMULA) — Design BOM 연동 개선
  • 대체품목 관리
  • 유효기간(Effectivity) 관리
  • 공정(Routing) 테이블 및 BOM-공정 연동
  • BOM 승인 워크플로우
  • 원가 계산 연동 (BOM 기반 표준원가)

Phase 4: UI 및 통합 (2~3주)

  • MNG BOM 관리 UI 전환 (V2 API)
  • React BOM 트리 뷰어 V2 연동
  • 테넌트 BOM 설정 관리 화면
  • V1 API 래퍼 → V2 전환 완료
  • V1 items.bom 컬럼 제거

12. 업종별 시나리오 검증 (12개)

A. 제조업군

12.1 블라인드/스크린 (현재 고객, mfg_custom)

프리셋: mfg_custom
BOM 유형: FORMULA + STANDARD
검증: ✓ 수식 산출 → BOM 저장, ✓ WIP 절곡품 트리, ✓ 카테고리 FOLDER, ✓ V1 100% 호환

12.2 전자부품 (mfg_discrete)

프리셋: mfg_discrete
BOM 유형: STANDARD + ENGINEERING
검증: ✓ 15단계 BOM, ✓ 팬텀 투과, ✓ ECN 일괄 대체, ✓ 유효기간, ✓ 승인 워크플로우

12.3 식품/화장품 (mfg_formula)

프리셋: mfg_formula
BOM 유형: FORMULA
검증: ✓ 배합비(%) 수식, ✓ 수율/로스, ✓ 부산물(BP), ✓ 전성분 목록 추출

12.4 건설/인테리어 (construction)

프리셋: construction
BOM 유형: PROJECT
검증: ✓ 공종별 자재+노동(LB)+장비(EQ)+외주(SV) 4요소
      ✓ 단위 다양성 (m³, 톤, M/D, 식)
      ✓ 공정표 연동, ✓ 설계 변경 리비전

B. 서비스/유통군

12.5 유통/이커머스 (distribution)

프리셋: distribution
BOM 유형: STANDARD
검증: ✓ 3종 세트 → 단품 재고 차감, ✓ 사은품/포장재 포함, ✓ 시즌 구성 변경

12.6 IT SaaS (it_saas)

프리셋: it_saas
BOM 유형: SUBSCRIPTION
검증: ✓ 기능모듈(LC) + 인프라(TB) + 사용자수(LC) 구성
      ✓ 월/연 과금 주기(billing_cycle)
      ✓ 티어 업그레이드 (옵션 추가)
      ✓ 프로젝트형 SI는 PROJECT로 분리

12.7 보험/금융 (finance_insurance)

프리셋: finance_insurance
BOM 유형: CONFIGURABLE + SUBSCRIPTION
검증: ✓ 주계약(FG) + 필수특약(PK) + 선택특약(PK, optional)
      ✓ option_group: "암담보", "뇌혈관" (택1)
      ✓ 갱신형: billing_cycle=YEARLY, duration=10 YEAR
      ✓ 나이/성별 요율 → options JSON으로 단가 테이블 연결

12.8 법률/컨설팅 (professional)

프리셋: professional
BOM 유형: SERVICE
검증: ✓ 인력(LB) grade별 시간단가 (파트너 50만/h, 어소 15만/h)
      ✓ 공수 M/M 환산 (1M/M = 160h)
      ✓ 실비(CS) + 외주(SV) + 라이선스(LC) 혼합
      ✓ 타임차지 vs. 고정가 구분 (bom_type으로)

12.9 물류/운송 (logistics)

프리셋: logistics
BOM 유형: SERVICE
검증: ✓ 차량(EQ) + 기사(LB) + 연료(RM, qty_formula) 구성
      ✓ 운임 수식: "거리km * 중량톤 * 기본단가 * 할증계수"
      ✓ 옵션: 상하차 인력, 포장, 보험 (is_optional)

12.10 호텔/여행 (hospitality)

프리셋: hospitality
BOM 유형: CONFIGURABLE
검증: ✓ 숙박(TB, 2박) + 조식(SV, 2회) + 부대시설(SV) 구성
      ✓ 옵션: 스파, 레이트체크아웃 (option_group)
      ✓ 여행 패키지: 항공(SV)+숙박(TB)+가이드(LB)+입장(SV) 구성
      ✓ 성수기 단가 계수 → options JSON

12.11 렌탈/구독 (rental)

프리셋: rental
BOM 유형: SUBSCRIPTION
검증: ✓ 본체(FG) + 소모품(PT, 교체주기) + 점검인력(LB) 구성
      ✓ 정기 교체: duration_value=6, duration_unit=MONTH
      ✓ 감가상각: 제품원가 ÷ 계약개월 = 월 원가
      ✓ 해지 시 잔존가치 계산

12.12 교육/이러닝 (hospitality)

프리셋: hospitality
BOM 유형: SUBSCRIPTION
검증: ✓ 강의콘텐츠(LC, 120강) + 교재(FG) + 플랫폼(TB) 구성
      ✓ 구독기간: duration=6 MONTH, billing=MONTHLY
      ✓ 옵션: 라이브Q&A(SV), AI분석(SV), 첨삭(LB)
      ✓ 접근 권한 제어 (단원별 잠금/해제)

부록 A. 대한민국 전 업종 BOM 적용 맵 (623만 사업체)

KSIC 기준 20개 카테고리, 150+ 세부 업종의 BOM 적용 패턴

A.1 BOM 적용 유형 분류

모든 업종의 상품/서비스 구성요소를 7가지 BOM 유형으로 분류할 수 있다:

BOM 유형 핵심 질문 대표 업종 사업체 규모
STANDARD "이 제품은 항상 이 부품으로 구성된다" 제조, 유통 세트 ~70만
FORMULA "배합비/수식으로 수량이 결정된다" 식품, 화학, 블라인드 ~15만
CONFIGURABLE "고객 옵션에 따라 구성이 달라진다" 보험, 호텔, 자동차 ~30만
PROJECT "이 프로젝트에만 해당하는 1회성 구성이다" 건설, SI, 광고, 이벤트 ~35만
SERVICE "인력 공수 + 실비로 구성된다" 컨설팅, 물류, 생활서비스 ~100만
SUBSCRIPTION "정기적으로 반복 과금되는 구성이다" SaaS, 렌탈, 교육, 멤버십 ~30만
NONE "BOM 불필요 — POS/CRM/예약만 필요" 편의점, 주차장, 중개업 ~340만

A.2 카테고리별 BOM 적용 상세

제조업 (63만 사업체) — BOM 필수

세부 업종 사업체 수 BOM 유형 프리셋
금속가공/기계부품 ~8만 STANDARD mfg_discrete
섬유/의류/봉제 ~6만 CONFIGURABLE (컬러/사이즈) mfg_custom
식품/음료 제조 ~5만 FORMULA mfg_formula
전자/전기부품 ~4만 STANDARD+ENGINEERING mfg_discrete
화학/플라스틱 ~3만 FORMULA mfg_formula
가구/목재 ~2만 CONFIGURABLE mfg_custom
인쇄/출판 ~1만 PROJECT construction
의약/의료기기 ~5천 FORMULA+STANDARD mfg_formula
블라인드/스크린 ~수백 FORMULA mfg_custom

식음료/외식 (75만+ 사업체) — 레시피 BOM

세부 업종 사업체 수 BOM 유형 핵심 가치
일반음식점 ~55만 FORMULA (레시피) 식재료 원가율 자동
카페/커피숍 ~10만 FORMULA (레시피) 음료별 원가 추적
배달 전문점 ~10만 FORMULA (레시피) 배달채널 통합+원가
베이커리/제과 ~1만 FORMULA (배합) 일일 생산계획
위탁급식 ~3천 FORMULA (레시피×인분) 영양+원가 자동화

건설/부동산 (26만 사업체) — 프로젝트 BOM

세부 업종 사업체 수 BOM 유형 핵심 가치
전문건설업 ~15만 PROJECT 현장별 원가 추적
공인중개사 ~11만 NONE (CRM) 매물 CRM
인테리어 ~6만 PROJECT+CONFIGURABLE 견적→시공 자동화
종합건설업 ~5만 PROJECT BOQ+WBS 통합

유통/소매 (152만 사업체) — 세트 BOM 또는 불필요

세부 업종 사업체 수 BOM 유형 핵심 가치
전문소매 (의류, 가전) ~30만 NONE (재고관리) 멀티채널 재고
편의점/슈퍼 ~14만 NONE (POS) 자동발주
도매업 ~10만 NONE (B2B 수발주) 외상관리
온라인쇼핑몰 ~5만 STANDARD (번들) 마켓 통합
약국 ~2.5만 NONE (처방) 안전재고

생활서비스 (20만+ 사업체) — 서비스 BOM / 시술 BOM

세부 업종 사업체 수 BOM 유형 핵심 가치
미용실/헤어샵 ~9만 SERVICE (시술BOM) 시술별 재료 원가
자동차 정비 ~4만 SERVICE (부품BOM) 차량별 정비 이력
세탁소 ~4만 NONE (접수관리) 전산화 0%→디지털
네일/속눈썹/왁싱 ~2만 SERVICE (시술BOM) 소재료 원가
청소대행 ~3천 SERVICE 인력 스케줄링

의료/건강 (12만+ 사업체) — 시술/처방 BOM

세부 업종 사업체 수 BOM 유형 핵심 가치
의원/클리닉 ~7만 SERVICE (시술BOM) 시술별 원가+수익
약국 ~2.5만 FORMULA (조제) 안전재고 자동발주
치과 ~1.7만 SERVICE (치료BOM) 치료 단계 관리
한의원 ~1.3만 FORMULA (탕약BOM) 처방 원가 자동화
헬스장/PT ~1만 SUBSCRIPTION 회원 라이프사이클
필라테스/요가 ~1만 SUBSCRIPTION 강사별 수익 정산
동물병원 ~5,259 FORMULA (처방BOM) 진료+약품 통합

교육/학원 (15만+ 사업체) — 구독 BOM

세부 업종 사업체 수 BOM 유형 핵심 가치
입시/보습학원 ~9만 SUBSCRIPTION 원생 이탈 예측
음악/미술/체육 학원 ~3만 SUBSCRIPTION 강사별 수익
어린이집/유치원 ~4만 NONE (원아관리) 보조금 연동
독서실/스터디카페 ~5천 SUBSCRIPTION 좌석별 수익
코딩/AI 교육 ~5천 SUBSCRIPTION 학습 이력

운송/물류 (40만+ 사업체) — 서비스 BOM

세부 업종 사업체 수 BOM 유형 핵심 가치
개별화물/용달 ~10만 SERVICE 기사별 정산
택배/배송 ~5만(업체) SERVICE 건별 수익성
퀵서비스 ~1만 SERVICE 실시간 배차
이사업체 ~5천 SERVICE (BOM) 건별 손익
보세창고/3PL ~2천 STANDARD WMS 통합

IT/디지털 (45만+ 사업체) — 프로젝트/구독 BOM

세부 업종 사업체 수 BOM 유형 핵심 가치
IT 프리랜서/1인 ~41만 SERVICE 1인 ERP
SW 개발사 ~2.4만 PROJECT 프로젝트 수익성
웹에이전시 ~2만 PROJECT 작업물 납기+원가
SaaS/구독 서비스 ~5천 SUBSCRIPTION 구독 수익 관리

이벤트/관혼상제 (2만+ 사업체) — 행사 BOM

세부 업종 사업체 수 BOM 유형 핵심 가치
웨딩업체 ~5천 PROJECT (행사BOM) 건별 원가+수익
꽃집/화환 ~5천 STANDARD (꽃BOM) 시즌 수요 예측
이벤트기획 ~3천 PROJECT 행사 원가 관리
케이터링 ~2천 FORMULA+PROJECT 식재료×인분
장례식장/상조 ~1천+ STANDARD (패키지) 장례 패키지 관리

환경/방역 (6만+ 사업체) — 서비스 BOM

세부 업종 사업체 수 BOM 유형 핵심 가치
폐기물 수집·운반 ~5만 SERVICE 노선별 수익성
방역업 ~3천 SERVICE (약품BOM) 계약 자동 갱신
환경 컨설팅 ~2천 SERVICE 측정 데이터 관리

기타 Long Tail (50만+ 사업체)

세부 업종 사업체 수 BOM 유형 핵심 가치
철물점/자재점 ~2만 NONE (재고) 소상공인 재고
안경원 ~1만 SERVICE (처방) 처방 이력
사진관/스튜디오 ~8천 PROJECT 촬영 일정
공유오피스 ~168사 SUBSCRIPTION 좌석 가동률
농업법인/스마트팜 ~10만 FORMULA (재배BOM) 작기별 원가
축산업 ~수만 FORMULA (사료BOM) 개체 이력
수출입 기업 ~31만 기존BOM+무역 환율 손익
프랜차이즈 가맹점 ~30만 본부 BOM 따름 본사 연동

A.3 ERP 사각지대 TOP 10 (SAM 우선 공략 대상)

순위 업종 사업체 수 현재 관리 방식 SAM 진입 가치
1 음식점/카페 ~75만 POS만, 원가 추적 없음 레시피BOM → 원가율 자동
2 소규모 소매 ~40만 POS만, 재무 단절 POS+ERP 통합
3 미용/뷰티 ~12만 예약앱만, 재고/회계 없음 예약+재고+회원 통합
4 학원/교육 ~12만 수강료 앱만 원생 CRM+수업+회계
5 건설 소기업 ~21만 엑셀+카톡 공사별 원가 자동화
6 화물/물류 ~40만 배차+정산 수기 배차+정산 통합
7 IT 프리랜서 ~41만 없음 1인 ERP 라이트
8 세탁/수선/수리 ~5만 전산화 0% 접수+이력 디지털화
9 동물병원 ~5,259 진료+재고 분리 진료+약품 통합
10 농업법인/스마트팜 ~10만 엑셀, IoT 미연동 재배이력+출하 통합

관련 문서

문서 경로
품목 정책 rules/item-policy.md
견적 시스템 features/quotes/README.md
제품/품목/설계 DB system/database/products.md
BOM 아이템 매핑 dev/dev_plans/bom-item-mapping-plan.md
BOM 트리 3단계 changes/20260318_item-management-bom-tree.md
재공품 생산 정책 rules/wip-production-policy.md
options JSON 정책 standards/options-column-policy.md
SAM 슈퍼 솔루션 비전 projects/sam-super-solution-vision.md

최종 업데이트: 2026-03-22