ERP-node/docs/BOM_개발_현황.md

10 KiB

BOM 관리 시스템 개발 현황

1. 개요

BOM(Bill of Materials) 관리 시스템은 제품의 구성 부품을 계층적으로 관리하는 기능입니다. V2 컴포넌트 기반으로 구현되어 있으며, 설정 패널을 통해 모든 기능을 동적으로 구성할 수 있습니다.


2. 아키텍처

2.1 전체 구조

[프론트엔드]                           [백엔드]                      [데이터베이스]
v2-bom-tree (트리 뷰)  ──── /api/bom ────── bomService.ts ────── bom, bom_detail
v2-bom-item-editor     ──── /api/table-management ──────────── bom_history, bom_version
V2BomTreeConfigPanel   (설정 패널)

2.2 관련 파일 목록

프론트엔드

파일 설명
frontend/lib/registry/components/v2-bom-tree/BomTreeComponent.tsx BOM 트리/레벨 뷰 메인 컴포넌트
frontend/lib/registry/components/v2-bom-tree/BomVersionModal.tsx 버전 관리 모달
frontend/lib/registry/components/v2-bom-tree/BomHistoryModal.tsx 이력 관리 모달
frontend/lib/registry/components/v2-bom-tree/BomDetailEditModal.tsx BOM 항목 수정 모달
frontend/lib/registry/components/v2-bom-tree/BomTreeRenderer.tsx 트리 렌더러
frontend/lib/registry/components/v2-bom-tree/index.ts 컴포넌트 정의 (v2-bom-tree)
frontend/components/v2/config-panels/V2BomTreeConfigPanel.tsx BOM 트리 설정 패널
frontend/lib/registry/components/v2-bom-item-editor/BomItemEditorComponent.tsx BOM 항목 편집기 (에디터 모드)

백엔드

파일 설명
backend-node/src/routes/bomRoutes.ts BOM API 라우트 정의
backend-node/src/controllers/bomController.ts BOM 컨트롤러 (이력/버전)
backend-node/src/services/bomService.ts BOM 서비스 (비즈니스 로직)

데이터베이스

파일 설명
db/migrations/062_create_bom_history_version_tables.sql 이력/버전 테이블 DDL

3. 데이터베이스 스키마

3.1 bom (BOM 헤더)

컬럼 타입 설명
id VARCHAR (UUID) PK
item_id VARCHAR 완제품 품목 ID (item_info FK)
bom_name VARCHAR BOM 명칭
version VARCHAR 현재 사용중인 버전명
revision VARCHAR 차수
base_qty NUMERIC 기준수량
unit VARCHAR 단위
remark TEXT 비고
company_code VARCHAR 회사 코드 (멀티테넌시)

3.2 bom_detail (BOM 상세 - 자식 품목)

컬럼 타입 설명
id VARCHAR (UUID) PK
bom_id VARCHAR BOM 헤더 FK
parent_detail_id VARCHAR 부모 detail FK (NULL = 1레벨)
child_item_id VARCHAR 자식 품목 ID (item_info FK)
quantity NUMERIC 구성수량 (소요량)
unit VARCHAR 단위
process_type VARCHAR 공정구분 (제조/외주 등)
loss_rate NUMERIC 손실율
level INTEGER 레벨
base_qty NUMERIC 기준수량
revision VARCHAR 차수
remark TEXT 비고
company_code VARCHAR 회사 코드

3.3 bom_history (BOM 이력)

컬럼 타입 설명
id VARCHAR (UUID) PK
bom_id VARCHAR BOM 헤더 FK
revision VARCHAR 차수
version VARCHAR 버전
change_type VARCHAR 변경구분 (등록/수정/추가/삭제)
change_description TEXT 변경내용
changed_by VARCHAR 변경자
changed_date TIMESTAMP 변경일시
company_code VARCHAR 회사 코드

3.4 bom_version (BOM 버전)

컬럼 타입 설명
id VARCHAR (UUID) PK
bom_id VARCHAR BOM 헤더 FK
version_name VARCHAR 버전명 (1.0, 2.0 ...)
revision INTEGER 생성 시점의 차수
status VARCHAR 상태 (developing / active / inactive)
snapshot_data JSONB 스냅샷 (bom 헤더 + bom_detail 전체)
created_by VARCHAR 생성자
created_date TIMESTAMP 생성일시
company_code VARCHAR 회사 코드

4. API 명세

4.1 이력 API

Method Path 설명
GET /api/bom/:bomId/history 이력 목록 조회
POST /api/bom/:bomId/history 이력 등록

Query Params: tableName (설정 패널에서 지정한 이력 테이블명, 기본값: bom_history)

4.2 버전 API

Method Path 설명
GET /api/bom/:bomId/versions 버전 목록 조회
POST /api/bom/:bomId/versions 신규 버전 생성
POST /api/bom/:bomId/versions/:versionId/load 버전 불러오기 (데이터 복원)
POST /api/bom/:bomId/versions/:versionId/activate 버전 사용 확정
DELETE /api/bom/:bomId/versions/:versionId 버전 삭제

Body/Query: tableName, detailTable (설정 패널에서 지정한 테이블명)


5. 버전 관리 구조

5.1 핵심 원리

각 버전은 생성 시점의 BOM 전체 구조(헤더 + 모든 디테일)를 JSONB 스냅샷으로 저장합니다.

버전 1.0 (active)
  └─ snapshot_data: { bom: {...}, details: [{...}, {...}, ...] }

버전 2.0 (developing)
  └─ snapshot_data: { bom: {...}, details: [{...}, {...}, ...] }

버전 3.0 (inactive)
  └─ snapshot_data: { bom: {...}, details: [{...}, {...}, ...] }

5.2 버전 상태 (status)

상태 설명
developing 개발중 - 신규 생성 시 기본 상태
active 사용중 - "사용 확정" 후 운영 상태
inactive 사용중지 - 이전에 active였다가 다른 버전이 확정된 경우

5.3 버전 워크플로우

[현재 BOM 데이터]
      │
      ▼
신규 버전 생성 ───► 버전 N.0 (status: developing)
                      │
                      ├── 불러오기: 해당 스냅샷의 데이터로 현재 BOM을 복원
                      │              (status 변경 없음, BOM 헤더 version 변경 없음)
                      │
                      ├── 사용 확정: status → active, 
                      │              기존 active 버전 → inactive,
                      │              BOM 헤더의 version 필드 갱신
                      │
                      └── 삭제: active 상태가 아닌 경우만 삭제 가능

5.4 불러오기 vs 사용 확정

동작 불러오기 (Load) 사용 확정 (Activate)
BOM 데이터 복원 O (detail 전체 교체) X
BOM 헤더 업데이트 O (base_qty, unit 등) version 필드만
버전 status 변경 X active로 변경
기존 active 비활성화 X O (→ inactive)
BOM 목록 새로고침 O (refreshTable) O (refreshTable)

6. 설정 패널 구성

V2BomTreeConfigPanel.tsx에서 아래 항목을 설정할 수 있습니다:

6.1 기본 탭

설정 항목 설명 기본값
디테일 테이블 BOM 상세 데이터 테이블 bom_detail
외래키 BOM 헤더와의 연결 키 bom_id
부모키 부모-자식 관계 키 parent_detail_id
이력 테이블 BOM 변경 이력 테이블 bom_history
버전 테이블 BOM 버전 관리 테이블 bom_version
이력 기능 표시 이력 버튼 노출 여부 true
버전 기능 표시 버전 버튼 노출 여부 true

6.2 컬럼 탭

  • 소스 테이블 (bom/item_info 등)에서 표시할 컬럼 선택
  • 디테일 테이블에서 표시할 컬럼 선택
  • 컬럼 순서 드래그앤드롭
  • 컬럼별 라벨, 너비, 정렬 설정

7. 뷰 모드

7.1 트리 뷰 (기본)

  • 계층적 들여쓰기로 부모-자식 관계 표현
  • 레벨별 시각 구분:
    • 0레벨 (가상 루트): 파란색 배경 + 파란 좌측 바
    • 1레벨: 흰색 배경 + 초록 좌측 바
    • 2레벨: 연회색 배경 + 주황 좌측 바
    • 3레벨 이상: 진회색 배경 + 보라 좌측 바
  • 펼침/접힘 (정전개/역전개)

7.2 레벨 뷰

  • 평면 테이블 형태로 표시
  • "레벨0", "레벨1", "레벨2" ... 컬럼에 체크마크로 계층 표시
  • 같은 레벨별 배경색 구분 적용

8. 주요 기능 목록

기능 상태 설명
BOM 트리 표시 완료 계층적 트리 뷰 + 레벨 뷰
BOM 항목 편집 완료 더블클릭으로 수정 모달 (0레벨: bom, 하위: bom_detail)
이력 관리 완료 변경 이력 조회/등록 모달
버전 관리 완료 버전 생성/불러오기/사용 확정/삭제
설정 패널 완료 테이블/컬럼/기능 동적 설정
디자인 모드 프리뷰 완료 실제 화면과 일치하는 디자인 모드 표시
컬럼 크기 조절 완료 헤더 드래그로 컬럼 너비 변경
텍스트 말줄임 완료 긴 텍스트 ... 처리
레벨별 시각 구분 완료 배경색 + 좌측 컬러 바
정전개/역전개 완료 전체 펼침/접기 토글
좌우 스크롤 완료 컬럼 크기가 커질 때 수평 스크롤
BOM 목록 자동 새로고침 완료 버전 불러오기/확정 후 좌측 패널 자동 리프레시
BOM 하위 품목 저장 완료 BomItemEditorComponent에서 직접 INSERT/UPDATE/DELETE
차수 (Revision) 자동 증가 미구현 BOM 변경 시 헤더 revision 자동 +1

9. 보안 고려사항

  • SQL 인젝션 방지: safeTableName() 함수로 테이블명 검증 (^[a-zA-Z_][a-zA-Z0-9_]*$)
  • 멀티테넌시: 모든 API에서 company_code 필터링 적용
  • 최고 관리자: company_code = "*" 시 전체 데이터 조회 가능
  • 인증: authenticateToken 미들웨어로 모든 라우트 보호

10. 향후 개선 사항

  • 차수(Revision) 자동 증가 구현 (BOM 헤더 레벨)
  • 버전 비교 기능 (두 버전 간 diff)
  • BOM 복사 기능
  • 이력 자동 등록 (수정/저장 시 자동으로 이력 생성)
  • Excel 내보내기/가져오기
  • BOM 유효성 검증 (순환참조 방지 등)