- DB 연결: 로컬/Docker 환경 오버라이딩 설정 (.env) - 테넌트 위젯: redirect 버그 수정 (TenantSelectorWidget) - 통계 위젯: 사용자/제품/자재/주문 카드 추가 (StatsOverviewWidget) - 리소스 한국어화: Product, Material 모델 레이블 추가 - 대시보드: 위젯 등록 및 캐시 최적화 🤖 Generated with [Claude Code](https://claude.ai/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
250 lines
7.7 KiB
Markdown
250 lines
7.7 KiB
Markdown
# KSS01 매개변수 기반 BOM 시스템 데이터베이스 스키마
|
|
|
|
## 개요
|
|
|
|
KSS01 모델을 위한 매개변수 기반 BOM 시스템의 데이터베이스 스키마입니다.
|
|
기존 SAM 프로젝트의 models, model_versions, bom_templates, bom_template_items 구조를 확장하여
|
|
동적 매개변수 입력과 공식 기반 BOM 생성을 지원합니다.
|
|
|
|
## 테이블 구조
|
|
|
|
### 1. bom_template_groups
|
|
BOM 아이템들의 그룹핑을 지원하는 테이블입니다.
|
|
|
|
**주요 기능:**
|
|
- 계층적 그룹 구조 지원 (parent_group_id를 통한 self-referencing)
|
|
- 본체, 절곡물, 가이드레일 등의 논리적 그룹핑
|
|
- 표시 순서 관리
|
|
|
|
**핵심 컬럼:**
|
|
- `group_name`: 그룹명 (본체, 절곡물, 가이드레일 등)
|
|
- `parent_group_id`: 상위 그룹 ID (계층 구조)
|
|
- `display_order`: 표시 순서
|
|
|
|
### 2. model_parameters
|
|
모델별 입력 매개변수 정의를 관리하는 테이블입니다.
|
|
|
|
**주요 기능:**
|
|
- 매개변수 타입별 유효성 검사 (INTEGER, DECIMAL, STRING, BOOLEAN)
|
|
- 숫자형 매개변수의 범위 제한 (min_value, max_value)
|
|
- 선택형 매개변수의 허용값 정의 (allowed_values JSON)
|
|
- 단위 및 설명 관리
|
|
|
|
**핵심 컬럼:**
|
|
- `parameter_name`: 매개변수명 (W0, H0, screen_type 등)
|
|
- `parameter_type`: 매개변수 타입
|
|
- `allowed_values`: 허용값 목록 (JSON)
|
|
- `min_value/max_value`: 숫자형 범위 제한
|
|
|
|
**JSON 구조 예시:**
|
|
```json
|
|
{
|
|
"allowed_values": ["SCREEN", "STEEL", "ALUMINUM"]
|
|
}
|
|
```
|
|
|
|
### 3. model_formulas
|
|
매개변수를 기반으로 한 계산 공식 정의를 관리하는 테이블입니다.
|
|
|
|
**주요 기능:**
|
|
- 수학적 공식 표현식 저장
|
|
- 계산 순서 관리 (의존성 해결)
|
|
- 결과 타입 및 소수점 자릿수 제어
|
|
- 의존 변수 추적
|
|
|
|
**핵심 컬럼:**
|
|
- `formula_name`: 공식명 (W1, H1, area, weight 등)
|
|
- `formula_expression`: 공식 표현식 ("W0 + 100", "W0 * H0 / 1000000")
|
|
- `calculation_order`: 계산 순서
|
|
- `dependencies`: 의존 변수 목록 (JSON)
|
|
|
|
**공식 예시:**
|
|
```
|
|
W1 = W0 + 100
|
|
H1 = H0 + 50
|
|
area = W1 * H1 / 1000000
|
|
weight = area * thickness * density
|
|
```
|
|
|
|
### 4. bom_condition_rules
|
|
조건부 BOM 구성 규칙을 관리하는 테이블입니다.
|
|
|
|
**주요 기능:**
|
|
- 조건식 기반 제품 포함/제외
|
|
- 수량 계산 공식 적용
|
|
- 우선순위 기반 규칙 실행
|
|
- 그룹 또는 개별 제품 대상 지정
|
|
|
|
**핵심 컬럼:**
|
|
- `condition_expression`: 조건 표현식 ("screen_type == 'SCREEN'")
|
|
- `action_type`: 액션 타입 (INCLUDE_PRODUCT, EXCLUDE_PRODUCT, SET_QUANTITY)
|
|
- `quantity_formula`: 수량 계산 공식
|
|
- `priority`: 실행 우선순위
|
|
|
|
**조건 규칙 예시:**
|
|
```
|
|
IF screen_type == "SCREEN" THEN INCLUDE_PRODUCT 실리카겔
|
|
IF W0 > 1000 THEN SET_QUANTITY 가이드레일 = ceiling(W0/1000)
|
|
```
|
|
|
|
### 5. product_parameters
|
|
실제 제품별 매개변수 값을 저장하는 테이블입니다.
|
|
|
|
**주요 기능:**
|
|
- 견적/주문별 매개변수 값 저장
|
|
- 상태 관리 (DRAFT, CALCULATED, APPROVED)
|
|
- 제품 코드 연결
|
|
- 버전 관리 지원
|
|
|
|
**핵심 컬럼:**
|
|
- `parameter_values`: 매개변수 값들 (JSON)
|
|
- `status`: 상태 관리
|
|
- `product_code`: 제품 코드 참조
|
|
|
|
**JSON 구조 예시:**
|
|
```json
|
|
{
|
|
"W0": 1200,
|
|
"H0": 800,
|
|
"screen_type": "SCREEN",
|
|
"power_source": "AC220V",
|
|
"installation_type": "WALL_MOUNT"
|
|
}
|
|
```
|
|
|
|
### 6. product_calculated_values
|
|
매개변수 기반 계산 결과를 저장하는 테이블입니다.
|
|
|
|
**주요 기능:**
|
|
- 공식 계산 결과 캐싱
|
|
- BOM 스냅샷 저장
|
|
- 계산 유효성 관리
|
|
- 비용/중량 집계
|
|
|
|
**핵심 컬럼:**
|
|
- `calculated_values`: 계산된 값들 (JSON)
|
|
- `bom_snapshot`: BOM 결과 스냅샷 (JSON)
|
|
- `is_valid`: 계산 유효성
|
|
- `total_cost/total_weight`: 집계 정보
|
|
|
|
**JSON 구조 예시:**
|
|
```json
|
|
{
|
|
"calculated_values": {
|
|
"W1": 1300,
|
|
"H1": 850,
|
|
"area": 1.105,
|
|
"weight": 45.2
|
|
},
|
|
"bom_snapshot": [
|
|
{
|
|
"product_id": 1001,
|
|
"product_name": "스크린 프레임",
|
|
"quantity": 1,
|
|
"group_name": "본체"
|
|
},
|
|
{
|
|
"product_id": 2001,
|
|
"product_name": "가이드레일",
|
|
"quantity": 2,
|
|
"group_name": "가이드"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## 기존 테이블 수정사항
|
|
|
|
### bom_template_items 테이블 확장
|
|
- `group_id`: BOM 그룹 연결
|
|
- `is_conditional`: 조건부 아이템 여부
|
|
- `condition_expression`: 조건 표현식
|
|
- `quantity_formula`: 수량 계산 공식
|
|
|
|
### products 테이블 확장
|
|
- `is_parametric`: 매개변수 기반 제품 여부
|
|
- `base_model_id`: 기반 모델 연결
|
|
- `parameter_values`: 매개변수 값 (JSON)
|
|
- `calculated_values`: 계산값 (JSON)
|
|
|
|
## 데이터 플로우
|
|
|
|
### 1. 설계 단계
|
|
```
|
|
models → model_parameters (매개변수 정의)
|
|
→ model_formulas (공식 정의)
|
|
→ bom_template_groups (그룹 정의)
|
|
→ bom_condition_rules (조건 규칙)
|
|
→ bom_template_items (기본 BOM + 그룹 연결)
|
|
```
|
|
|
|
### 2. 견적/주문 단계
|
|
```
|
|
견적 요청 → product_parameters (매개변수 입력)
|
|
→ 공식 계산 엔진 실행
|
|
→ product_calculated_values (결과 저장)
|
|
→ BOM 생성 및 스냅샷 저장
|
|
```
|
|
|
|
### 3. 계산 엔진 프로세스
|
|
1. **매개변수 검증**: model_parameters 기반 유효성 검사
|
|
2. **공식 계산**: model_formulas의 calculation_order 순서로 실행
|
|
3. **조건 평가**: bom_condition_rules의 priority 순서로 평가
|
|
4. **BOM 구성**: 조건 결과에 따른 제품 포함/제외 및 수량 계산
|
|
5. **결과 저장**: product_calculated_values에 스냅샷 저장
|
|
|
|
## 성능 최적화
|
|
|
|
### 인덱스 전략
|
|
- **복합 인덱스**: (tenant_id, model_id) 기반 조회 최적화
|
|
- **정렬 인덱스**: display_order, priority, calculation_order
|
|
- **유니크 인덱스**: 논리적 중복 방지
|
|
|
|
### 캐싱 전략
|
|
- **계산 결과 캐싱**: product_calculated_values로 반복 계산 방지
|
|
- **BOM 스냅샷**: 조건부 계산 결과 캐싱
|
|
- **유효성 플래그**: is_valid로 재계산 필요 여부 판단
|
|
|
|
### JSON 컬럼 활용
|
|
- **스키마 유연성**: 매개변수/계산값의 동적 구조 지원
|
|
- **성능 고려**: 필요시 가상 컬럼으로 자주 조회되는 값 추출 가능
|
|
|
|
## 보안 및 제약사항
|
|
|
|
### 공식 표현식 보안
|
|
- **안전한 연산만 허용**: 수학 연산자, 함수명 화이트리스트
|
|
- **코드 실행 방지**: eval() 등 동적 코드 실행 금지
|
|
- **입력 검증**: 공식 구문 분석 및 검증
|
|
|
|
### 다중 테넌트 지원
|
|
- **테넌트 격리**: 모든 테이블에 tenant_id 적용
|
|
- **글로벌 스코프**: BelongsToTenant 자동 적용
|
|
- **권한 관리**: 테넌트별 접근 제어
|
|
|
|
## 확장성 고려사항
|
|
|
|
### 모델 타입 확장
|
|
- **다른 제품군**: 현재 스키마로 다양한 제품 모델 지원 가능
|
|
- **공식 엔진**: 모델별 독립적인 공식 정의
|
|
- **조건 규칙**: 제품군별 특화된 비즈니스 로직 구현
|
|
|
|
### 계산 엔진 확장
|
|
- **외부 API**: 복잡한 계산을 위한 외부 서비스 연동 가능
|
|
- **배치 처리**: 대량 계산 요청 처리 지원
|
|
- **이력 관리**: 계산 과정 및 결과 이력 추적 가능
|
|
|
|
## 예상 API 엔드포인트
|
|
|
|
### 설계용 API
|
|
- `GET /v1/models/{id}/parameters` - 모델 매개변수 목록
|
|
- `POST /v1/models/{id}/parameters` - 매개변수 정의 추가
|
|
- `GET /v1/models/{id}/formulas` - 공식 목록
|
|
- `POST /v1/models/{id}/formulas` - 공식 정의 추가
|
|
- `GET /v1/models/{id}/bom-rules` - 조건 규칙 목록
|
|
- `POST /v1/models/{id}/bom-rules` - 조건 규칙 추가
|
|
|
|
### 계산용 API
|
|
- `POST /v1/models/{id}/calculate` - 매개변수 기반 BOM 계산
|
|
- `GET /v1/product-parameters/{id}/calculated` - 계산 결과 조회
|
|
- `POST /v1/product-parameters/{id}/recalculate` - 재계산 요청
|
|
- `GET /v1/models/{id}/bom-preview` - BOM 미리보기 (매개변수별) |