1729 lines
56 KiB
Markdown
1729 lines
56 KiB
Markdown
|
|
# WACE ERP 데이터베이스 워크플로우 분석
|
||
|
|
|
||
|
|
> 📅 작성일: 2026-02-06
|
||
|
|
> 🎯 목적: 비즈니스 워크플로우 중심의 DB 구조 분석
|
||
|
|
> 📊 DB 엔진: PostgreSQL 16.8
|
||
|
|
> 📝 기반 스키마: plm_schema_20260120.sql
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📋 Executive Summary
|
||
|
|
|
||
|
|
WACE ERP 시스템은 **멀티테넌트 SaaS 아키텍처**를 기반으로 한 제조업 특화 ERP입니다.
|
||
|
|
- **총 테이블 수**: 337개
|
||
|
|
- **핵심 아키텍처**: Multi-tenancy (company_code 기반 데이터 격리)
|
||
|
|
- **특징**: 메타데이터 드리븐, 동적 스키마, 플로우 기반 통합
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🏗️ 1. 데이터베이스 아키텍처 개요
|
||
|
|
|
||
|
|
### 1.1 계층 구조
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────────────────┐
|
||
|
|
│ Application Layer (React) │
|
||
|
|
└─────────────────────────────────────────────────────────┘
|
||
|
|
↓
|
||
|
|
┌─────────────────────────────────────────────────────────┐
|
||
|
|
│ Backend Layer (Node.js + TypeScript) │
|
||
|
|
│ - API Routes │
|
||
|
|
│ - Business Logic Services │
|
||
|
|
│ - Raw SQL Query Execution │
|
||
|
|
└─────────────────────────────────────────────────────────┘
|
||
|
|
↓
|
||
|
|
┌─────────────────────────────────────────────────────────┐
|
||
|
|
│ Database Layer (PostgreSQL) │
|
||
|
|
│ │
|
||
|
|
│ ┌──────────────────┐ ┌──────────────────┐ │
|
||
|
|
│ │ System Core │ │ Metadata │ │
|
||
|
|
│ │ - user_info │ │ - table_labels │ │
|
||
|
|
│ │ - company_mng │ │ - screen_def │ │
|
||
|
|
│ │ - menu_info │ │ - flow_def │ │
|
||
|
|
│ └──────────────────┘ └──────────────────┘ │
|
||
|
|
│ │
|
||
|
|
│ ┌─────────────────────────────────────────┐ │
|
||
|
|
│ │ Business Domain Tables │ │
|
||
|
|
│ │ - Sales (30+) - Purchase (25+) │ │
|
||
|
|
│ │ - Stock (20+) - Production (25+) │ │
|
||
|
|
│ │ - Quality (15+) - Logistics (20+) │ │
|
||
|
|
│ │ - PLM (30+) - Accounting (20+) │ │
|
||
|
|
│ └─────────────────────────────────────────┘ │
|
||
|
|
└─────────────────────────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
### 1.2 멀티테넌시 핵심 원칙
|
||
|
|
|
||
|
|
**ABSOLUTE MUST: 모든 테이블에 company_code**
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- ✅ 표준 테이블 구조
|
||
|
|
CREATE TABLE {table_name} (
|
||
|
|
id VARCHAR(500) PRIMARY KEY DEFAULT gen_random_uuid()::text,
|
||
|
|
company_code VARCHAR(20) NOT NULL, -- 필수!
|
||
|
|
created_date TIMESTAMP DEFAULT NOW(),
|
||
|
|
updated_date TIMESTAMP DEFAULT NOW(),
|
||
|
|
writer VARCHAR(500),
|
||
|
|
-- ... 비즈니스 컬럼들
|
||
|
|
);
|
||
|
|
|
||
|
|
-- 필수 인덱스
|
||
|
|
CREATE INDEX idx_{table_name}_company_code
|
||
|
|
ON {table_name}(company_code);
|
||
|
|
```
|
||
|
|
|
||
|
|
**company_code = "*" 의미**
|
||
|
|
- ❌ 잘못된 이해: 모든 회사 공통 데이터
|
||
|
|
- ✅ 올바른 이해: 슈퍼 관리자 전용 데이터
|
||
|
|
- 일반 회사 쿼리: `WHERE company_code = $1 AND company_code != '*'`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 2. 핵심 시스템 테이블 (System Core)
|
||
|
|
|
||
|
|
### 2.1 사용자 및 인증
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `user_info` | 사용자 정보 | user_id, user_name, email, password_hash, company_code |
|
||
|
|
| `user_info_history` | 사용자 변경 이력 | history_id, user_id, change_type, changed_at |
|
||
|
|
| `auth_tokens` | 인증 토큰 | token_id, user_id, token, expires_at |
|
||
|
|
| `login_access_log` | 로그인 이력 | log_id, user_id, ip_address, login_at |
|
||
|
|
| `user_dept` | 사용자-부서 매핑 (겸직 지원) | user_id, dept_code, is_primary |
|
||
|
|
| `user_dept_sub` | 겸직 부서 정보 | user_id, sub_dept_code |
|
||
|
|
|
||
|
|
**워크플로우:**
|
||
|
|
```
|
||
|
|
로그인 → auth_tokens 생성 → login_access_log 기록
|
||
|
|
회사별 데이터 격리 → company_code 필터링
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2.2 권한 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `authority_master` | 권한 그룹 마스터 | objid, auth_name, auth_code, company_code |
|
||
|
|
| `authority_master_history` | 권한 그룹 이력 | objid, parent_objid, history_type |
|
||
|
|
| `authority_sub_user` | 권한 그룹 멤버 | objid, master_objid, user_id |
|
||
|
|
| `rel_menu_auth` | 메뉴별 권한 CRUD | objid, menu_objid, auth_objid, create_auth, read_auth, update_auth, delete_auth |
|
||
|
|
|
||
|
|
**권한 체계:**
|
||
|
|
```
|
||
|
|
사용자 → authority_sub_user → authority_master → rel_menu_auth → 메뉴별 CRUD 권한
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2.3 회사 및 부서
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `company_mng` | 회사 정보 | company_code (PK), company_name, business_registration_number |
|
||
|
|
| `company_code_sequence` | 회사 코드 시퀀스 | company_code, next_sequence |
|
||
|
|
| `dept_info` | 부서 정보 | dept_code, dept_name, parent_dept_code, company_code |
|
||
|
|
| `dept_info_history` | 부서 변경 이력 | dept_code, change_type, changed_at |
|
||
|
|
|
||
|
|
**계층 구조:**
|
||
|
|
```
|
||
|
|
company_mng (회사)
|
||
|
|
└─ dept_info (부서 - 계층 구조)
|
||
|
|
└─ user_dept (사용자 배정)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2.4 메뉴 시스템
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `menu_info` | 메뉴 정보 | objid, menu_type, parent_obj_id, menu_name_kor, menu_url, screen_code, company_code, source_menu_objid |
|
||
|
|
| `menu_screen_groups` | 통합 메뉴/화면 그룹 | group_id, group_name, parent_group_id, company_code |
|
||
|
|
| `menu_screen_group_items` | 그룹-화면 연결 | group_id, screen_code |
|
||
|
|
| `screen_menu_assignments` | 화면-메뉴 할당 | screen_code, menu_id |
|
||
|
|
|
||
|
|
**메뉴 타입:**
|
||
|
|
- `menu_type = 0`: 일반 메뉴
|
||
|
|
- `menu_type = 1`: 시스템 관리 메뉴
|
||
|
|
- `menu_type = 2`: 동적 생성 메뉴 (screen_definitions에서 자동 생성)
|
||
|
|
|
||
|
|
**메뉴 복사 메커니즘:**
|
||
|
|
```
|
||
|
|
원본 메뉴 (회사A) → 복사 → 새 메뉴 (회사B)
|
||
|
|
source_menu_objid: 원본 메뉴의 objid 추적
|
||
|
|
재복사 시: source_menu_objid로 기존 복사본 찾아서 덮어쓰기
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🗂️ 3. 메타데이터 시스템 (Metadata Layer)
|
||
|
|
|
||
|
|
### 3.1 테이블 메타데이터
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `table_labels` | 테이블 논리명 | table_name (PK), table_label, description |
|
||
|
|
| `table_type_columns` | 컬럼 타입 정의 (회사별) | table_name, column_name, company_code, input_type, detail_settings, display_order |
|
||
|
|
| `column_labels` | 컬럼 논리명 (레거시) | table_name, column_name, column_label, input_type |
|
||
|
|
| `table_relationships` | 테이블 관계 정의 | parent_table, child_table, join_condition |
|
||
|
|
| `table_log_config` | 테이블 로그 설정 | table_name, log_enabled, log_table_name |
|
||
|
|
|
||
|
|
**메타데이터 구조:**
|
||
|
|
```
|
||
|
|
table_labels (테이블 논리명)
|
||
|
|
└─ table_type_columns (컬럼 타입 정의 - 회사별)
|
||
|
|
└─ category_column_mapping (카테고리 컬럼 매핑)
|
||
|
|
└─ table_column_category_values (카테고리 값)
|
||
|
|
```
|
||
|
|
|
||
|
|
**동적 테이블 생성 프로세스:**
|
||
|
|
1. `CREATE TABLE` 실행
|
||
|
|
2. `table_labels` 등록
|
||
|
|
3. `table_type_columns` 등록 (회사별)
|
||
|
|
4. `column_labels` 등록 (레거시 호환)
|
||
|
|
5. `ddl_execution_log`에 DDL 실행 이력 기록
|
||
|
|
|
||
|
|
### 3.2 화면 메타데이터
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `screen_definitions` | 화면 정의 | screen_code (PK), screen_name, table_name, screen_type, company_code |
|
||
|
|
| `screen_layouts` | 화면 레이아웃 | screen_code, layout_config (JSONB) |
|
||
|
|
| `screen_templates` | 화면 템플릿 | template_id, template_name, template_config |
|
||
|
|
| `screen_widgets` | 화면 위젯 | widget_id, screen_code, widget_type, widget_config |
|
||
|
|
| `screen_groups` | 화면 그룹 | group_id, group_name, parent_group_id |
|
||
|
|
| `screen_group_screens` | 화면-그룹 연결 | group_id, screen_code |
|
||
|
|
|
||
|
|
**화면 생성 워크플로우:**
|
||
|
|
```
|
||
|
|
screen_definitions 생성
|
||
|
|
→ 트리거 발동 → menu_info 자동 생성 (menu_type=2)
|
||
|
|
→ screen_layouts 레이아웃 정의
|
||
|
|
→ screen_widgets 위젯 배치
|
||
|
|
→ screen_table_relations 테이블 관계 설정
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3.3 화면 고급 기능
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `screen_embedding` | 화면 임베딩 | parent_screen, child_screen, embed_config |
|
||
|
|
| `screen_split_panel` | 분할 패널 | screen_code, left_screen, right_screen, split_ratio |
|
||
|
|
| `screen_data_transfer` | 화면 간 데이터 전달 | source_screen, target_screen, mapping_config |
|
||
|
|
| `screen_data_flows` | 화면 간 데이터 흐름 | flow_id, source_screen, target_screen, flow_type |
|
||
|
|
| `screen_field_joins` | 화면 필드 조인 | source_table, target_table, join_condition |
|
||
|
|
| `screen_table_relations` | 화면-테이블 관계 | screen_code, table_name, relation_type |
|
||
|
|
|
||
|
|
**화면 임베딩 패턴:**
|
||
|
|
```
|
||
|
|
마스터 화면 (sales_order)
|
||
|
|
├─ 좌측 패널: 수주 목록
|
||
|
|
└─ 우측 패널: 상세 정보 (임베딩)
|
||
|
|
├─ 수주 기본 정보
|
||
|
|
├─ 수주 품목 (임베딩)
|
||
|
|
└─ 배송 정보 (임베딩)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3.4 UI 컴포넌트 표준
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `component_standards` | UI 컴포넌트 표준 | component_type, standard_props (JSONB) |
|
||
|
|
| `button_action_standards` | 버튼 액션 기준 | action_type, action_config (JSONB) |
|
||
|
|
| `web_type_standards` | 웹 타입 기준 | web_type, type_config (JSONB) |
|
||
|
|
| `grid_standards` | 격자 시스템 기준 | grid_type, grid_config (JSONB) |
|
||
|
|
| `layout_standards` | 레이아웃 표준 | layout_type, layout_config (JSONB) |
|
||
|
|
| `layout_instances` | 레이아웃 인스턴스 | instance_id, layout_type, instance_config |
|
||
|
|
| `style_templates` | 스타일 템플릿 | template_id, template_name, style_config (JSONB) |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 4. 플로우 및 데이터 통합 시스템
|
||
|
|
|
||
|
|
### 4.1 플로우 정의
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `flow_definition` | 플로우 정의 | id, name, table_name, db_source_type, company_code |
|
||
|
|
| `flow_step` | 플로우 단계 | step_id, flow_id, step_name, step_type, step_order, action_config (JSONB) |
|
||
|
|
| `flow_step_connection` | 플로우 단계 연결 | connection_id, source_step_id, target_step_id, condition |
|
||
|
|
| `flow_data_mapping` | 플로우 데이터 매핑 | mapping_id, flow_id, source_table, target_table, mapping_config |
|
||
|
|
|
||
|
|
**플로우 타입:**
|
||
|
|
- 승인 플로우: 결재 라인 정의
|
||
|
|
- 상태 플로우: 데이터 상태 전환
|
||
|
|
- 데이터 플로우: 테이블 간 데이터 이동
|
||
|
|
- 통합 플로우: 외부 시스템 연동
|
||
|
|
|
||
|
|
### 4.2 플로우 실행 및 모니터링
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `flow_data_status` | 데이터 현재 상태 | data_id, flow_id, current_step_id, status |
|
||
|
|
| `flow_audit_log` | 플로우 상태 변경 이력 | log_id, flow_id, data_id, from_step, to_step, changed_at, changed_by |
|
||
|
|
| `flow_integration_log` | 플로우 외부 연동 로그 | log_id, flow_id, integration_type, request_data, response_data |
|
||
|
|
|
||
|
|
**플로우 실행 예시: 수주 승인**
|
||
|
|
```
|
||
|
|
수주 등록 (sales_order_mng)
|
||
|
|
→ flow_data_status 생성 (status: 'PENDING')
|
||
|
|
→ flow_step 1: 영업팀장 승인
|
||
|
|
→ flow_step 2: 재고 확인
|
||
|
|
→ flow_step 3: 생산계획 생성
|
||
|
|
→ flow_step 4: 최종 승인
|
||
|
|
→ flow_audit_log 각 단계 기록
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4.3 노드 기반 플로우
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `node_flows` | 노드 기반 플로우 | flow_id, flow_name, nodes (JSONB), edges (JSONB) |
|
||
|
|
| `dataflow_diagrams` | 데이터플로우 다이어그램 | diagram_id, diagram_name, diagram_data (JSONB) |
|
||
|
|
| `dataflow_external_calls` | 데이터플로우 외부 호출 | call_id, diagram_id, external_connection_id |
|
||
|
|
|
||
|
|
**노드 타입:**
|
||
|
|
- Start/End Node
|
||
|
|
- Data Node (테이블 조회/저장)
|
||
|
|
- Logic Node (조건 분기, 계산)
|
||
|
|
- External Node (외부 API 호출)
|
||
|
|
- Transform Node (데이터 변환)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🌐 5. 외부 연동 시스템
|
||
|
|
|
||
|
|
### 5.1 외부 데이터베이스 연결
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `external_db_connections` | 외부 DB 연결 정보 | connection_id, connection_name, db_type, host, port, database, username, password_encrypted |
|
||
|
|
| `external_db_connection` | 외부 DB 연결 (레거시) | connection_id, connection_config (JSONB) |
|
||
|
|
| `external_connection_permission` | 외부 연결 권한 | permission_id, connection_id, user_id, allowed_operations |
|
||
|
|
| `flow_external_db_connection` | 플로우 전용 외부 DB 연결 | connection_id, flow_id, db_config (JSONB) |
|
||
|
|
| `flow_external_connection_permission` | 플로우 외부 연결 권한 | permission_id, flow_id, connection_id |
|
||
|
|
|
||
|
|
**지원 DB 타입:**
|
||
|
|
- PostgreSQL
|
||
|
|
- MySQL
|
||
|
|
- MS SQL Server
|
||
|
|
- Oracle
|
||
|
|
- MongoDB (NoSQL)
|
||
|
|
|
||
|
|
### 5.2 외부 REST API 연결
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `external_rest_api_connections` | 외부 REST API 연결 | connection_id, api_name, base_url, auth_type, auth_config (JSONB) |
|
||
|
|
| `external_call_configs` | 외부 호출 설정 | config_id, connection_id, endpoint, method, headers (JSONB) |
|
||
|
|
| `external_call_logs` | 외부 호출 로그 | log_id, config_id, request_data, response_data, status_code, executed_at |
|
||
|
|
|
||
|
|
**인증 방식:**
|
||
|
|
- API Key
|
||
|
|
- Bearer Token
|
||
|
|
- OAuth 2.0
|
||
|
|
- Basic Auth
|
||
|
|
|
||
|
|
### 5.3 데이터 수집 배치
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `data_collection_configs` | 데이터 수집 설정 | config_id, source_type, source_config (JSONB), schedule |
|
||
|
|
| `data_collection_jobs` | 데이터 수집 작업 | job_id, config_id, job_status, started_at, completed_at |
|
||
|
|
| `data_collection_history` | 데이터 수집 이력 | history_id, job_id, collected_count, error_count |
|
||
|
|
| `collection_batch_management` | 수집 배치 관리 | batch_id, batch_name, batch_config (JSONB) |
|
||
|
|
| `collection_batch_executions` | 배치 실행 이력 | execution_id, batch_id, execution_status, executed_at |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 6. 비즈니스 도메인 테이블 (Business Domain)
|
||
|
|
|
||
|
|
### 6.1 영업/수주 (Sales & Orders) - 30+ 테이블
|
||
|
|
|
||
|
|
#### 핵심 테이블
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 주요 참조 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `sales_order_mng` | 수주 관리 | customer_mng, product_mng |
|
||
|
|
| `sales_order_detail` | 수주 상세 | sales_order_mng |
|
||
|
|
| `sales_order_detail_log` | 수주 상세 이력 | sales_order_detail |
|
||
|
|
| `sales_request_master` | 구매요청서 마스터 | customer_mng |
|
||
|
|
| `sales_request_part` | 구매요청서 품목 | sales_request_master, part_mng |
|
||
|
|
| `estimate_mgmt` | 견적 관리 | customer_mng, product_mng |
|
||
|
|
| `contract_mgmt` | 계약 관리 | customer_mng |
|
||
|
|
| `contract_mgmt_option` | 계약 옵션 | contract_mgmt |
|
||
|
|
|
||
|
|
#### 영업 지원 테이블
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `sales_bom_report` | 영업 BOM 보고서 |
|
||
|
|
| `sales_bom_part_qty` | 영업 BOM 수량 |
|
||
|
|
| `sales_bom_report_part` | 영업 BOM 품목 |
|
||
|
|
| `sales_long_delivery` | 장납기 부품 리스트 |
|
||
|
|
| `sales_long_delivery_input` | 장납기 자재 투입 이력 |
|
||
|
|
| `sales_long_delivery_predict` | 장납기 예측 |
|
||
|
|
| `sales_part_chg` | 설계 변경 리스트 |
|
||
|
|
| `sample_supply` | 샘플 공급 |
|
||
|
|
|
||
|
|
#### 고객 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `customer_mng` | 거래처 마스터 |
|
||
|
|
| `customer_item` | 거래처별 품번 관리 |
|
||
|
|
| `customer_item_alias` | 거래처별 품목 품번/품명 |
|
||
|
|
| `customer_item_mapping` | 거래처별 품목 매핑 |
|
||
|
|
| `customer_item_price` | 거래처별 품목 단가 이력 |
|
||
|
|
| `customer_service_mgmt` | 조치내역서 마스터 |
|
||
|
|
| `customer_service_part` | 조치내역서 사용 부품 |
|
||
|
|
| `customer_service_workingtime` | 조치내역서 작업 시간 |
|
||
|
|
| `counselingmgmt` | 상담 관리 |
|
||
|
|
|
||
|
|
**워크플로우: 수주 프로세스**
|
||
|
|
```
|
||
|
|
1. 견적 요청 (estimate_mgmt)
|
||
|
|
2. 견적 작성 및 발송
|
||
|
|
3. 수주 등록 (sales_order_mng)
|
||
|
|
4. 수주 상세 입력 (sales_order_detail)
|
||
|
|
5. 계약 체결 (contract_mgmt)
|
||
|
|
6. 생산 계획 생성 (order_plan_mgmt)
|
||
|
|
7. 구매 요청 (sales_request_master)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.2 구매/발주 (Purchase & Procurement) - 25+ 테이블
|
||
|
|
|
||
|
|
#### 핵심 테이블
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 주요 참조 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `purchase_order_master` | 발주 관리 마스터 | supplier_mng |
|
||
|
|
| `purchase_order_part` | 발주서 상세 목록 | purchase_order_master, part_mng |
|
||
|
|
| `purchase_order_multi` | 동시적용 프로젝트 발주 | purchase_order_master |
|
||
|
|
| `purchase_order_mng` | 발주 관리 | supplier_mng |
|
||
|
|
| `purchase_detail` | 구매 상세 | purchase_order |
|
||
|
|
| `purchase_order` | 구매 주문 | supplier_mng |
|
||
|
|
|
||
|
|
#### 공급처 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `supplier_mng` | 공급처 마스터 |
|
||
|
|
| `supplier_mng_log` | 공급처 변경 이력 |
|
||
|
|
| `supplier_item` | 공급처별 품목 정보 |
|
||
|
|
| `supplier_item_alias` | 공급처별 품목 품번/품명 |
|
||
|
|
| `supplier_item_mapping` | 공급처별 품목 매핑 |
|
||
|
|
| `supplier_item_price` | 공급처별 품목 단가 |
|
||
|
|
| `procurement_standard` | 구매 기준 정보 |
|
||
|
|
|
||
|
|
#### 입고 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `delivery_history` | 입고 관리 |
|
||
|
|
| `delivery_history_defect` | 입고 불량 품목 |
|
||
|
|
| `delivery_part_price` | 입고 품목 단가 |
|
||
|
|
| `receiving` | 입고 처리 |
|
||
|
|
| `receive_history` | 입고 이력 |
|
||
|
|
| `inbound_mng` | 입고 관리 |
|
||
|
|
| `check_report_mng` | 검수 관리 보고서 |
|
||
|
|
|
||
|
|
**워크플로우: 구매 프로세스**
|
||
|
|
```
|
||
|
|
1. 구매 요청 (sales_request_master)
|
||
|
|
2. 공급처 선정 (supplier_mng)
|
||
|
|
3. 발주서 작성 (purchase_order_master)
|
||
|
|
4. 발주서 상세 (purchase_order_part)
|
||
|
|
5. 입고 예정 (delivery_history)
|
||
|
|
6. 검수 (check_report_mng)
|
||
|
|
7. 입고 확정 (receiving)
|
||
|
|
8. 재고 반영 (inventory_stock)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.3 재고/창고 (Inventory & Warehouse) - 20+ 테이블
|
||
|
|
|
||
|
|
#### 핵심 테이블
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 주요 참조 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `inventory_stock` | 재고 현황 | item_info, warehouse_location |
|
||
|
|
| `inventory_history` | 재고 이력 | inventory_stock |
|
||
|
|
| `warehouse_info` | 창고 정보 | - |
|
||
|
|
| `warehouse_location` | 창고 위치 | warehouse_info |
|
||
|
|
| `inbound_mng` | 입고 관리 | warehouse_location |
|
||
|
|
| `outbound_mng` | 출고 관리 | warehouse_location |
|
||
|
|
| `material_release` | 자재 출고 | - |
|
||
|
|
|
||
|
|
#### 물류 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `shipment_header` | 출하 헤더 |
|
||
|
|
| `shipment_detail` | 출하 상세 |
|
||
|
|
| `shipment_plan` | 출하 계획 |
|
||
|
|
| `shipment_instruction` | 출하 지시 |
|
||
|
|
| `shipment_instruction_item` | 출하 지시 품목 |
|
||
|
|
| `shipment_pallet` | 출하 파레트 |
|
||
|
|
| `delivery_destination` | 납품처 정보 |
|
||
|
|
| `delivery_route_mng` | 배송 경로 관리 |
|
||
|
|
| `delivery_route_mng_log` | 배송 경로 이력 |
|
||
|
|
| `delivery_status` | 배송 상태 |
|
||
|
|
|
||
|
|
#### 디지털 트윈 (창고 레이아웃)
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `digital_twin_layout` | 디지털 트윈 레이아웃 |
|
||
|
|
| `digital_twin_layout_template` | 레이아웃 템플릿 |
|
||
|
|
| `digital_twin_location_layout` | Location 배치 정보 |
|
||
|
|
| `digital_twin_zone_layout` | Zone 배치 정보 |
|
||
|
|
| `digital_twin_objects` | 디지털 트윈 객체 |
|
||
|
|
| `yard_layout` | 야드 레이아웃 |
|
||
|
|
| `yard_material_placement` | 야드 자재 배치 |
|
||
|
|
|
||
|
|
**워크플로우: 재고 관리**
|
||
|
|
```
|
||
|
|
1. 입고 (inbound_mng)
|
||
|
|
→ inventory_stock 증가
|
||
|
|
→ inventory_history 기록
|
||
|
|
|
||
|
|
2. 출고 (outbound_mng)
|
||
|
|
→ inventory_stock 감소
|
||
|
|
→ inventory_history 기록
|
||
|
|
|
||
|
|
3. 창고 위치 관리
|
||
|
|
→ warehouse_location
|
||
|
|
→ digital_twin_location_layout (시각화)
|
||
|
|
|
||
|
|
4. 재고 조사
|
||
|
|
→ inventory_stock 조회
|
||
|
|
→ 실사 vs 전산 비교
|
||
|
|
→ 차이 조정
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.4 생산/작업 (Production & Work) - 25+ 테이블
|
||
|
|
|
||
|
|
#### 핵심 테이블
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 주요 참조 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `work_orders` | 작업지시 관리 | product_mng, sales_order_mng |
|
||
|
|
| `work_orders_detail` | 작업지시 상세 | work_orders |
|
||
|
|
| `work_instruction` | 작업지시 | - |
|
||
|
|
| `work_instruction_detail` | 작업지시 상세 | work_instruction |
|
||
|
|
| `work_instruction_log` | 작업지시 이력 | work_instruction |
|
||
|
|
| `work_instruction_detail_log` | 작업지시 상세 이력 | work_instruction_detail |
|
||
|
|
| `work_order` | 작업지시 (레거시) | - |
|
||
|
|
| `work_request` | 작업 요청 (워크플로우) | - |
|
||
|
|
|
||
|
|
#### 생산 계획
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `order_plan_mgmt` | 생산 계획 관리 |
|
||
|
|
| `order_plan_result_error` | 생산 계획 오류 결과 |
|
||
|
|
| `production_task` | 생산 작업 |
|
||
|
|
| `production_record` | 생산 실적 |
|
||
|
|
| `production_issue` | 생산 이슈 |
|
||
|
|
| `facility_assembly_plan` | 설비 조립 계획 |
|
||
|
|
|
||
|
|
#### 공정 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `process_mng` | 공정 관리 |
|
||
|
|
| `process_equipment` | 공정 설비 |
|
||
|
|
| `item_routing_version` | 품목 라우팅 버전 |
|
||
|
|
| `item_routing_detail` | 품목 라우팅 상세 |
|
||
|
|
| `input_resource` | 투입 자원 |
|
||
|
|
|
||
|
|
#### 설비 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `equipment_mng` | 설비 관리 |
|
||
|
|
| `equipment_mng_log` | 설비 변경 이력 |
|
||
|
|
| `equipment_consumable` | 설비 소모품 |
|
||
|
|
| `equipment_consumable_log` | 소모품 이력 |
|
||
|
|
| `equipment_inspection_item` | 설비 점검 항목 |
|
||
|
|
| `equipment_inspection_item_log` | 점검 항목 이력 |
|
||
|
|
| `inspection_equipment_mng` | 검사 설비 관리 |
|
||
|
|
| `inspection_equipment_mng_log` | 검사 설비 이력 |
|
||
|
|
|
||
|
|
**워크플로우: 생산 프로세스**
|
||
|
|
```
|
||
|
|
1. 수주 확정 (sales_order_mng)
|
||
|
|
2. 생산 계획 생성 (order_plan_mgmt)
|
||
|
|
3. 자재 소요 계획 (MRP)
|
||
|
|
4. 작업지시 발행 (work_orders)
|
||
|
|
5. 자재 출고 (material_release)
|
||
|
|
6. 생산 실행 (production_record)
|
||
|
|
7. 품질 검사 (inspection_standard)
|
||
|
|
8. 완제품 입고 (inventory_stock)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.5 품질/검사 (Quality & Inspection) - 15+ 테이블
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 주요 참조 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `inspection_standard` | 검사 기준 | - |
|
||
|
|
| `item_inspection_info` | 품목 검사 정보 | item_info |
|
||
|
|
| `defect_standard_mng` | 불량 기준 관리 | - |
|
||
|
|
| `defect_standard_mng_log` | 불량 기준 이력 | defect_standard_mng |
|
||
|
|
| `check_report_mng` | 검수 관리 보고서 | - |
|
||
|
|
|
||
|
|
**품질 관리 워크플로우:**
|
||
|
|
```
|
||
|
|
1. 입고 검사 (check_report_mng)
|
||
|
|
2. 공정 검사 (inspection_standard)
|
||
|
|
3. 최종 검사 (item_inspection_info)
|
||
|
|
4. 불량 처리 (defect_standard_mng)
|
||
|
|
5. 품질 데이터 분석
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.6 물류/운송 (Logistics & Transport) - 20+ 테이블
|
||
|
|
|
||
|
|
#### 차량 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 주요 참조 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `vehicles` | 차량 정보 | - |
|
||
|
|
| `drivers` | 운전자 정보 | - |
|
||
|
|
| `vehicle_locations` | 차량 현재 위치 | vehicles |
|
||
|
|
| `vehicle_location_history` | 차량 위치 이력 | vehicles |
|
||
|
|
| `transport_vehicle_locations` | 운행 관리 실시간 위치 | vehicles |
|
||
|
|
|
||
|
|
#### 운송 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `transport_logs` | 운행 이력 |
|
||
|
|
| `transport_statistics` | 일별 운행 통계 |
|
||
|
|
| `vehicle_trip_summary` | 차량 운행 요약 |
|
||
|
|
| `maintenance_schedules` | 차량 정비 일정 |
|
||
|
|
|
||
|
|
#### 운송사 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `carrier_mng` | 운송사 관리 |
|
||
|
|
| `carrier_mng_log` | 운송사 이력 |
|
||
|
|
| `carrier_contract_mng` | 운송사 계약 관리 |
|
||
|
|
| `carrier_contract_mng_log` | 계약 이력 |
|
||
|
|
| `carrier_vehicle_mng` | 운송사 차량 관리 |
|
||
|
|
| `carrier_vehicle_mng_log` | 차량 이력 |
|
||
|
|
|
||
|
|
#### DTG (디지털운행기록계)
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `dtg_management` | DTG 통합 관리 (구매/설치/점검/폐기/정산) |
|
||
|
|
| `dtg_management_log` | DTG 관리 이력 |
|
||
|
|
| `dtg_contracts` | DTG 차종별/운송사별 계약 |
|
||
|
|
| `dtg_monthly_settlements` | DTG 월별 정산 |
|
||
|
|
| `dtg_maintenance_history` | DTG 점검 이력 |
|
||
|
|
|
||
|
|
#### 물류 비용
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `logistics_cost_mng` | 물류 비용 관리 |
|
||
|
|
| `logistics_cost_mng_log` | 물류 비용 이력 |
|
||
|
|
|
||
|
|
**워크플로우: 운송 관리**
|
||
|
|
```
|
||
|
|
1. 출하 계획 (shipment_plan)
|
||
|
|
2. 차량 배차 (vehicles)
|
||
|
|
3. 운행 시작
|
||
|
|
→ vehicle_location_history (GPS 추적)
|
||
|
|
→ transport_logs 기록
|
||
|
|
4. 배송 완료
|
||
|
|
5. 운행 통계 집계 (transport_statistics)
|
||
|
|
6. 정산 (dtg_monthly_settlements)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.7 PLM/설계 (Product Lifecycle Management) - 30+ 테이블
|
||
|
|
|
||
|
|
#### 제품 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 주요 참조 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `product_mng` | 제품 마스터 | - |
|
||
|
|
| `product_mgmt` | 제품 관리 | - |
|
||
|
|
| `product_mgmt_model` | 제품 모델 | product_mgmt |
|
||
|
|
| `product_mgmt_price_history` | 제품 가격 이력 | product_mgmt |
|
||
|
|
| `product_mgmt_upg_master` | 제품 업그레이드 마스터 | product_mgmt |
|
||
|
|
| `product_mgmt_upg_detail` | 제품 업그레이드 상세 | product_mgmt_upg_master |
|
||
|
|
| `product_kind_spec` | 제품별 사양 관리 | - |
|
||
|
|
| `product_kind_spec_main` | 제품별 사양 메인 | - |
|
||
|
|
| `product_spec` | 제품 사양 | - |
|
||
|
|
| `product_group_mng` | 제품 그룹 관리 | - |
|
||
|
|
|
||
|
|
#### 품목 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `item_info` | 품목 정보 |
|
||
|
|
| `part_mng` | 부품 관리 (설계 정보 포함) |
|
||
|
|
| `part_mng_history` | 부품 변경 이력 |
|
||
|
|
| `part_mgmt` | 부품 관리 |
|
||
|
|
| `part_distribution_list` | 부품 배포 리스트 |
|
||
|
|
|
||
|
|
#### BOM 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `klbom_tbl` | KL BOM 테이블 |
|
||
|
|
| `part_bom_qty` | BOM 수량 관리 |
|
||
|
|
| `part_bom_report` | BOM 보고서 |
|
||
|
|
| `sales_bom_report` | 영업 BOM 보고서 |
|
||
|
|
| `sales_bom_report_part` | 영업 BOM 품목 |
|
||
|
|
| `sales_bom_part_qty` | 영업 BOM 수량 |
|
||
|
|
|
||
|
|
#### 프로젝트 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `pms_pjt_info` | 프로젝트 정보 |
|
||
|
|
| `pms_pjt_concept_info` | 프로젝트 개념 정보 |
|
||
|
|
| `pms_pjt_year_goal` | 프로젝트 연간 목표 |
|
||
|
|
| `pms_rel_pjt_prod` | 프로젝트-제품 관계 |
|
||
|
|
| `pms_rel_pjt_concept_prod` | 프로젝트 개념-제품 관계 |
|
||
|
|
| `pms_rel_pjt_concept_milestone` | 프로젝트 개념-마일스톤 |
|
||
|
|
| `pms_rel_prod_ref_dept` | 제품-참조부서 관계 |
|
||
|
|
| `project` | 프로젝트 (레거시) |
|
||
|
|
| `project_mgmt` | 프로젝트 관리 |
|
||
|
|
| `project_concept` | 프로젝트 개념 (레거시?) |
|
||
|
|
|
||
|
|
#### WBS (Work Breakdown Structure)
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `pms_wbs_task` | WBS 작업 |
|
||
|
|
| `pms_wbs_task_info` | WBS 작업 정보 |
|
||
|
|
| `pms_wbs_task_confirm` | WBS 작업 확인 |
|
||
|
|
| `pms_wbs_task_standard` | WBS 작업 표준 |
|
||
|
|
| `pms_wbs_task_standard2` | WBS 작업 표준2 |
|
||
|
|
| `pms_wbs_template` | WBS 템플릿 |
|
||
|
|
|
||
|
|
#### 설계 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `mold_dev_request_info` | 금형 개발 요청 |
|
||
|
|
| `structural_review_proposal` | 구조 검토 제안서 |
|
||
|
|
| `external_work_review_info` | 외주 작업 검토 정보 |
|
||
|
|
| `standard_doc_info` | 표준 문서 정보 |
|
||
|
|
|
||
|
|
#### OEM 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `oem_mng` | OEM 관리 |
|
||
|
|
| `oem_factory_mng` | OEM 공장 관리 |
|
||
|
|
| `oem_milestone_mng` | OEM 마일스톤 관리 |
|
||
|
|
|
||
|
|
**워크플로우: PLM 프로세스**
|
||
|
|
```
|
||
|
|
1. 제품 기획 (pms_pjt_concept_info)
|
||
|
|
2. 프로젝트 생성 (pms_pjt_info)
|
||
|
|
3. WBS 작업 분해 (pms_wbs_task)
|
||
|
|
4. 제품 설계 (product_mng)
|
||
|
|
5. BOM 작성 (part_bom_report)
|
||
|
|
6. 부품 관리 (part_mng)
|
||
|
|
7. 설계 검토 (structural_review_proposal)
|
||
|
|
8. 양산 전환 (production_task)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.8 회계/원가 (Accounting & Costing) - 20+ 테이블
|
||
|
|
|
||
|
|
#### 원가 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 주요 참조 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `material_cost` | 재료비 | - |
|
||
|
|
| `injection_cost` | 사출 원가 | - |
|
||
|
|
| `profit_loss` | 손익 관리 | - |
|
||
|
|
| `profit_loss_total` | 손익 합계 | - |
|
||
|
|
| `profit_loss_coefficient` | 손익 계수 | - |
|
||
|
|
| `profit_loss_coolingtime` | 손익 냉각 시간 | - |
|
||
|
|
| `profit_loss_depth` | 손익 깊이 | - |
|
||
|
|
| `profit_loss_lossrate` | 손익 손실률 | - |
|
||
|
|
| `profit_loss_machine` | 손익 기계 | - |
|
||
|
|
| `profit_loss_pretime` | 손익 사전 시간 | - |
|
||
|
|
| `profit_loss_srrate` | 손익 SR률 | - |
|
||
|
|
| `profit_loss_weight` | 손익 중량 | - |
|
||
|
|
| `profit_loss_total_addlist` | 손익 합계 추가 리스트 | - |
|
||
|
|
| `profit_loss_total_addlist2` | 손익 합계 추가 리스트2 | - |
|
||
|
|
|
||
|
|
#### 자재/비용 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `material_mng` | 자재 관리 |
|
||
|
|
| `material_master_mgmt` | 자재 마스터 관리 |
|
||
|
|
| `material_detail_mgmt` | 자재 상세 관리 |
|
||
|
|
| `input_cost_goal` | 투입 원가 목표 |
|
||
|
|
|
||
|
|
#### 비용/투자
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `expense_master` | 비용 마스터 |
|
||
|
|
| `expense_detail` | 비용 상세 |
|
||
|
|
| `pms_invest_cost_mng` | 투자 비용 관리 |
|
||
|
|
| `fund_mgmt` | 자금 관리 |
|
||
|
|
|
||
|
|
#### 세금계산서
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `tax_invoice` | 세금계산서 |
|
||
|
|
| `tax_invoice_item` | 세금계산서 항목 |
|
||
|
|
|
||
|
|
#### 안전 예산
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `safety_budget_execution` | 안전 예산 집행 |
|
||
|
|
| `safety_incidents` | 안전 사고 |
|
||
|
|
| `safety_inspections` | 안전 점검 |
|
||
|
|
| `safety_inspections_log` | 안전 점검 이력 |
|
||
|
|
|
||
|
|
**워크플로우: 원가 계산**
|
||
|
|
```
|
||
|
|
1. BOM 기반 재료비 계산 (material_cost)
|
||
|
|
2. 공정별 가공비 계산 (injection_cost)
|
||
|
|
3. 간접비 배부
|
||
|
|
4. 총 원가 집계 (profit_loss_total)
|
||
|
|
5. 판매가 대비 이익률 계산 (profit_loss)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.9 기타 비즈니스 테이블 - 15+ 테이블
|
||
|
|
|
||
|
|
#### 공통 코드
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `comm_code` | 공통 코드 |
|
||
|
|
| `comm_code_history` | 공통 코드 이력 |
|
||
|
|
| `code_category` | 코드 카테고리 |
|
||
|
|
| `code_info` | 코드 정보 |
|
||
|
|
|
||
|
|
#### 환율
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `comm_exchange_rate` | 환율 정보 |
|
||
|
|
|
||
|
|
#### 게시판/댓글
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `chartmgmt` | 차트 관리 |
|
||
|
|
| `comments` | 댓글 |
|
||
|
|
| `inboxtask` | 받은편지함 작업 |
|
||
|
|
|
||
|
|
#### 첨부파일
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `attach_file_info` | 첨부파일 정보 |
|
||
|
|
| `file_down_log` | 파일 다운로드 로그 |
|
||
|
|
|
||
|
|
#### 승인
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `approval` | 승인 |
|
||
|
|
|
||
|
|
#### 옵션 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `option_mng` | 옵션 관리 |
|
||
|
|
| `option_price_history` | 옵션 가격 이력 |
|
||
|
|
|
||
|
|
#### 수주 사양
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `order_spec_mng` | 수주 사양 관리 |
|
||
|
|
| `order_spec_mng_history` | 수주 사양 이력 |
|
||
|
|
|
||
|
|
#### 기타
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `ratecal_mgmt` | 요율 계산 관리 |
|
||
|
|
| `time_sheet` | 타임시트 |
|
||
|
|
| `problem_mng` | 문제 관리 |
|
||
|
|
| `planning_issue` | 계획 이슈 |
|
||
|
|
| `used_mng` | 중고 관리 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 7. 대시보드 및 리포트 시스템
|
||
|
|
|
||
|
|
### 7.1 대시보드
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `dashboards` | 대시보드 정의 | dashboard_id, dashboard_name, company_code |
|
||
|
|
| `dashboard_elements` | 대시보드 요소 | element_id, dashboard_id, element_type, element_config (JSONB) |
|
||
|
|
| `dashboard_shares` | 대시보드 공유 | share_id, dashboard_id, shared_with_user_id |
|
||
|
|
| `dashboard_sliders` | 대시보드 슬라이더 | slider_id, slider_name, company_code |
|
||
|
|
| `dashboard_slider_items` | 슬라이더 내 대시보드 목록 | item_id, slider_id, dashboard_id, display_order |
|
||
|
|
|
||
|
|
**대시보드 구조:**
|
||
|
|
```
|
||
|
|
dashboard_sliders (슬라이더 그룹)
|
||
|
|
└─ dashboard_slider_items (슬라이더에 포함된 대시보드들)
|
||
|
|
└─ dashboards (개별 대시보드)
|
||
|
|
└─ dashboard_elements (차트, 위젯 등)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 7.2 리포트 시스템
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `report_master` | 리포트 마스터 | report_id, report_name, report_type |
|
||
|
|
| `report_query` | 리포트 쿼리 | query_id, report_id, query_sql, query_params |
|
||
|
|
| `report_layout` | 리포트 레이아웃 | layout_id, report_id, layout_config (JSONB) |
|
||
|
|
| `report_template` | 리포트 템플릿 | template_id, template_name, template_config (JSONB) |
|
||
|
|
| `report_menu_mapping` | 리포트-메뉴 매핑 | mapping_id, report_id, menu_id |
|
||
|
|
|
||
|
|
**리포트 생성 프로세스:**
|
||
|
|
```
|
||
|
|
1. report_master 정의
|
||
|
|
2. report_query SQL 작성
|
||
|
|
3. report_layout 레이아웃 설정
|
||
|
|
4. report_menu_mapping 메뉴 연결
|
||
|
|
5. 사용자가 메뉴 클릭
|
||
|
|
6. 동적 SQL 실행
|
||
|
|
7. 결과를 레이아웃에 맞춰 렌더링
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 8. 고급 기능 시스템
|
||
|
|
|
||
|
|
### 8.1 카테고리 시스템
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `category_column_mapping` | 카테고리 컬럼 매핑 | table_name, column_name, category_key |
|
||
|
|
| `table_column_category_values` | 카테고리 값 | table_name, column_name, company_code, category_values (JSONB) |
|
||
|
|
| `category_value_cascading_group` | 카테고리 연쇄 그룹 | group_id, group_name |
|
||
|
|
| `category_value_cascading_mapping` | 카테고리 연쇄 매핑 | mapping_id, parent_category, child_category |
|
||
|
|
|
||
|
|
**카테고리 기능:**
|
||
|
|
- 컬럼별 드롭다운 옵션 관리
|
||
|
|
- 회사별 독립적인 카테고리 값
|
||
|
|
- 연쇄 드롭다운 (parent → child)
|
||
|
|
|
||
|
|
### 8.2 연쇄 드롭다운 (Cascading Dropdown)
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `cascading_relation` | 연쇄 드롭다운 관계 | relation_id, parent_field, child_field, relation_config |
|
||
|
|
| `cascading_hierarchy_group` | 다단계 연쇄 그룹 | group_id, group_name, hierarchy_levels |
|
||
|
|
| `cascading_hierarchy_level` | 다단계 연쇄 레벨 | level_id, group_id, level_order, level_config |
|
||
|
|
| `cascading_condition` | 조건부 연쇄 | condition_id, parent_field, child_field, condition_config |
|
||
|
|
| `cascading_multi_parent` | 다중 부모 연쇄 | relation_id, child_field, parent_fields (ARRAY) |
|
||
|
|
| `cascading_multi_parent_source` | 다중 부모 소스 | source_id, relation_id, parent_field, source_config |
|
||
|
|
| `cascading_mutual_exclusion` | 상호 배제 | exclusion_id, field_1, field_2 |
|
||
|
|
| `cascading_reverse_lookup` | 역방향 연쇄 | lookup_id, child_field, parent_field |
|
||
|
|
| `cascading_auto_fill_group` | 자동 입력 그룹 | group_id, master_field, auto_fill_fields |
|
||
|
|
| `cascading_auto_fill_mapping` | 자동 입력 매핑 | mapping_id, group_id, source_field, target_field |
|
||
|
|
|
||
|
|
**연쇄 드롭다운 패턴:**
|
||
|
|
```
|
||
|
|
1. 단순 연쇄: 대분류 → 중분류 → 소분류
|
||
|
|
2. 다단계 연쇄: 회사 → 부서 → 팀 → 직원
|
||
|
|
3. 조건부 연쇄: 제품군에 따라 다른 옵션 표시
|
||
|
|
4. 다중 부모: 부품은 여러 제품에 속할 수 있음
|
||
|
|
5. 자동 입력: 거래처 선택 시 주소/연락처 자동 입력
|
||
|
|
```
|
||
|
|
|
||
|
|
### 8.3 채번 규칙 (Numbering Rules)
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `numbering_rules` | 채번 규칙 마스터 | rule_id, rule_name, table_name, column_name, company_code |
|
||
|
|
| `numbering_rule_parts` | 채번 규칙 파트 | part_id, rule_id, part_order, part_type, part_config |
|
||
|
|
|
||
|
|
**채번 규칙 예시:**
|
||
|
|
```
|
||
|
|
수주번호: SO-20260206-001
|
||
|
|
- SO: 고정 접두사
|
||
|
|
- 20260206: 날짜 (YYYYMMDD)
|
||
|
|
- 001: 일련번호 (3자리)
|
||
|
|
|
||
|
|
발주번호: PO-{회사코드}-{YYYYMM}-{시퀀스}
|
||
|
|
- PO: 고정 접두사
|
||
|
|
- COMPANY_A: 회사 코드
|
||
|
|
- 202602: 년월
|
||
|
|
- 0001: 시퀀스 (4자리)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 8.4 엑셀 업로드 매핑
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `excel_mapping_template` | 엑셀 매핑 템플릿 | template_id, template_name, table_name, column_mapping (JSONB) |
|
||
|
|
|
||
|
|
**엑셀 업로드 프로세스:**
|
||
|
|
```
|
||
|
|
1. 사용자가 엑셀 업로드
|
||
|
|
2. 헤더 행 읽기
|
||
|
|
3. excel_mapping_template에서 매칭 템플릿 조회
|
||
|
|
4. 컬럼 자동 매핑
|
||
|
|
5. 데이터 검증
|
||
|
|
6. DB 삽입
|
||
|
|
```
|
||
|
|
|
||
|
|
### 8.5 데이터 관계 브리지
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `data_relationship_bridge` | 테이블 간 데이터 관계 중계 | bridge_id, source_table, source_id, target_table, target_id, relation_type |
|
||
|
|
|
||
|
|
**용도:**
|
||
|
|
- 여러 테이블에 걸친 데이터 연결 추적
|
||
|
|
- M:N 관계 관리
|
||
|
|
- 데이터 통합 조회
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ⚙️ 9. 배치 및 자동화 시스템
|
||
|
|
|
||
|
|
### 9.1 배치 작업
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `batch_jobs` | 배치 작업 정의 | job_id, job_name, job_type, job_config (JSONB) |
|
||
|
|
| `batch_schedules` | 배치 스케줄 | schedule_id, job_id, cron_expression |
|
||
|
|
| `batch_execution_logs` | 배치 실행 로그 | log_id, job_id, execution_status, started_at, completed_at |
|
||
|
|
| `batch_job_executions` | 배치 작업 실행 | execution_id, job_id, execution_params |
|
||
|
|
| `batch_job_parameters` | 배치 작업 파라미터 | param_id, job_id, param_name, param_value |
|
||
|
|
| `batch_configs` | 배치 설정 | config_id, job_id, config_key, config_value |
|
||
|
|
| `batch_mappings` | 배치 매핑 | mapping_id, source_config, target_config |
|
||
|
|
|
||
|
|
**배치 작업 예시:**
|
||
|
|
- 일일 재고 실사
|
||
|
|
- 월말 마감 처리
|
||
|
|
- 통계 데이터 집계
|
||
|
|
- 외부 시스템 동기화
|
||
|
|
|
||
|
|
### 9.2 동적 폼 데이터
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `dynamic_form_data` | 동적 폼 데이터 | form_id, table_name, form_data (JSONB) |
|
||
|
|
|
||
|
|
**용도:**
|
||
|
|
- 런타임에 정의된 폼의 데이터 저장
|
||
|
|
- 유연한 데이터 구조
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🌍 10. 다국어 시스템
|
||
|
|
|
||
|
|
### 10.1 다국어 관리
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `multi_lang_category` | 다국어 키 카테고리 (2단계 계층) | category_id, category_name, parent_category_id |
|
||
|
|
| `multi_lang_key_master` | 다국어 키 마스터 | key_id, key_name, category_id, default_text |
|
||
|
|
| `multi_lang_text` | 다국어 텍스트 | text_id, key_id, language_code, translated_text |
|
||
|
|
| `language_master` | 언어 마스터 | language_code, language_name, is_active |
|
||
|
|
|
||
|
|
**다국어 구조:**
|
||
|
|
```
|
||
|
|
multi_lang_category (카테고리)
|
||
|
|
└─ multi_lang_key_master (키)
|
||
|
|
└─ multi_lang_text (언어별 번역)
|
||
|
|
├─ ko: 한국어
|
||
|
|
├─ en: 영어
|
||
|
|
├─ ja: 일본어
|
||
|
|
└─ zh: 중국어
|
||
|
|
```
|
||
|
|
|
||
|
|
**사용 예시:**
|
||
|
|
```typescript
|
||
|
|
// menu_info.lang_key = "menu.sales.order"
|
||
|
|
// multi_lang_key_master: key_name = "menu.sales.order"
|
||
|
|
// multi_lang_text:
|
||
|
|
// - ko: "수주관리"
|
||
|
|
// - en: "Sales Order"
|
||
|
|
// - ja: "受注管理"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📧 11. 메일 및 로그 시스템
|
||
|
|
|
||
|
|
### 11.1 메일 시스템
|
||
|
|
|
||
|
|
| 테이블 | 역할 | 핵심 컬럼 |
|
||
|
|
|--------|------|-----------|
|
||
|
|
| `mail_log` | 메일 발송 로그 | log_id, to_email, subject, body, sent_at, sent_status |
|
||
|
|
|
||
|
|
### 11.2 로그 테이블
|
||
|
|
|
||
|
|
| 테이블 | 역할 |
|
||
|
|
|--------|------|
|
||
|
|
| `ddl_execution_log` | DDL 실행 로그 |
|
||
|
|
| `file_down_log` | 파일 다운로드 로그 |
|
||
|
|
| `login_access_log` | 로그인 접근 로그 |
|
||
|
|
|
||
|
|
### 11.3 변경 이력 테이블 (Audit Log)
|
||
|
|
|
||
|
|
모든 주요 테이블에는 `{table_name}_log` 테이블이 있습니다:
|
||
|
|
|
||
|
|
| 원본 테이블 | 이력 테이블 | 트리거 함수 |
|
||
|
|
|-------------|-------------|-------------|
|
||
|
|
| `carrier_contract_mng` | `carrier_contract_mng_log` | `carrier_contract_mng_log_trigger_func()` |
|
||
|
|
| `carrier_mng` | `carrier_mng_log` | `carrier_mng_log_trigger_func()` |
|
||
|
|
| `carrier_vehicle_mng` | `carrier_vehicle_mng_log` | `carrier_vehicle_mng_log_trigger_func()` |
|
||
|
|
| `defect_standard_mng` | `defect_standard_mng_log` | - |
|
||
|
|
| `delivery_route_mng` | `delivery_route_mng_log` | - |
|
||
|
|
| `dtg_management` | `dtg_management_log` | - |
|
||
|
|
| `equipment_consumable` | `equipment_consumable_log` | - |
|
||
|
|
| `equipment_inspection_item` | `equipment_inspection_item_log` | - |
|
||
|
|
| `equipment_mng` | `equipment_mng_log` | - |
|
||
|
|
| `inspection_equipment_mng` | `inspection_equipment_mng_log` | - |
|
||
|
|
| `item_info_20251202` | `item_info_20251202_log` | - |
|
||
|
|
| `logistics_cost_mng` | `logistics_cost_mng_log` | - |
|
||
|
|
| `order_table` | `order_table_log` | - |
|
||
|
|
| `safety_inspections` | `safety_inspections_log` | - |
|
||
|
|
| `sales_order_detail` | `sales_order_detail_log` | - |
|
||
|
|
| `supplier_mng` | `supplier_mng_log` | - |
|
||
|
|
| `work_instruction` | `work_instruction_log` | - |
|
||
|
|
| `work_instruction_detail` | `work_instruction_detail_log` | - |
|
||
|
|
|
||
|
|
**이력 테이블 구조:**
|
||
|
|
```sql
|
||
|
|
CREATE TABLE {table_name}_log (
|
||
|
|
id SERIAL PRIMARY KEY,
|
||
|
|
operation_type VARCHAR(10), -- INSERT, UPDATE, DELETE
|
||
|
|
original_id VARCHAR(500), -- 원본 레코드 ID
|
||
|
|
changed_column VARCHAR(100),
|
||
|
|
old_value TEXT,
|
||
|
|
new_value TEXT,
|
||
|
|
changed_by VARCHAR(100),
|
||
|
|
ip_address VARCHAR(50),
|
||
|
|
changed_at TIMESTAMP DEFAULT NOW(),
|
||
|
|
full_row_before JSONB, -- 변경 전 전체 행
|
||
|
|
full_row_after JSONB -- 변경 후 전체 행
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
**트리거 자동 기록:**
|
||
|
|
```sql
|
||
|
|
CREATE TRIGGER trg_{table_name}_log
|
||
|
|
AFTER INSERT OR UPDATE OR DELETE ON {table_name}
|
||
|
|
FOR EACH ROW
|
||
|
|
EXECUTE FUNCTION {table_name}_log_trigger_func();
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔍 12. 데이터베이스 함수 및 트리거
|
||
|
|
|
||
|
|
### 12.1 주요 함수
|
||
|
|
|
||
|
|
#### 화면 관련
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 화면 생성 시 메뉴 자동 생성
|
||
|
|
CREATE FUNCTION auto_create_menu_for_screen() RETURNS TRIGGER;
|
||
|
|
|
||
|
|
-- 화면 삭제 시 메뉴 비활성화
|
||
|
|
CREATE FUNCTION auto_deactivate_menu_for_screen() RETURNS TRIGGER;
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 통계 집계
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 일일 운송 통계 집계 함수
|
||
|
|
CREATE FUNCTION aggregate_daily_transport_statistics(target_date DATE DEFAULT CURRENT_DATE - 1)
|
||
|
|
RETURNS INTEGER;
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 거리 계산
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- Haversine 거리 계산 (GPS 좌표)
|
||
|
|
CREATE FUNCTION calculate_distance(lat1 NUMERIC, lng1 NUMERIC, lat2 NUMERIC, lng2 NUMERIC)
|
||
|
|
RETURNS NUMERIC;
|
||
|
|
|
||
|
|
-- 차량 위치 이력의 이전 위치로부터 거리 계산
|
||
|
|
CREATE FUNCTION calculate_distance_from_prev() RETURNS TRIGGER;
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 비즈니스 로직
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 수주 잔량 자동 계산
|
||
|
|
CREATE FUNCTION calculate_order_balance() RETURNS TRIGGER;
|
||
|
|
|
||
|
|
-- 세금계산서 합계 자동 계산
|
||
|
|
CREATE FUNCTION calculate_tax_invoice_total() RETURNS TRIGGER;
|
||
|
|
|
||
|
|
-- 영업에서 프로젝트 자동 생성
|
||
|
|
CREATE FUNCTION auto_create_project_from_sales(p_sales_no VARCHAR) RETURNS VARCHAR;
|
||
|
|
|
||
|
|
-- 차량 상태 변경 시 운행 통계 계산
|
||
|
|
CREATE FUNCTION calculate_trip_on_status_change() RETURNS TRIGGER;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 12.2 주요 트리거
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 화면 생성 시 메뉴 자동 생성
|
||
|
|
CREATE TRIGGER trg_auto_create_menu_for_screen
|
||
|
|
AFTER INSERT ON screen_definitions
|
||
|
|
FOR EACH ROW
|
||
|
|
EXECUTE FUNCTION auto_create_menu_for_screen();
|
||
|
|
|
||
|
|
-- 화면 삭제 시 메뉴 비활성화
|
||
|
|
CREATE TRIGGER trg_auto_deactivate_menu_for_screen
|
||
|
|
AFTER UPDATE ON screen_definitions
|
||
|
|
FOR EACH ROW
|
||
|
|
EXECUTE FUNCTION auto_deactivate_menu_for_screen();
|
||
|
|
|
||
|
|
-- 차량 위치 이력 거리 자동 계산
|
||
|
|
CREATE TRIGGER trg_calculate_distance_from_prev
|
||
|
|
BEFORE INSERT ON vehicle_location_history
|
||
|
|
FOR EACH ROW
|
||
|
|
EXECUTE FUNCTION calculate_distance_from_prev();
|
||
|
|
|
||
|
|
-- 수주 잔량 자동 계산
|
||
|
|
CREATE TRIGGER trg_calculate_order_balance
|
||
|
|
BEFORE INSERT OR UPDATE ON orders
|
||
|
|
FOR EACH ROW
|
||
|
|
EXECUTE FUNCTION calculate_order_balance();
|
||
|
|
|
||
|
|
-- 세금계산서 합계 자동 계산
|
||
|
|
CREATE TRIGGER trg_calculate_tax_invoice_total
|
||
|
|
BEFORE INSERT OR UPDATE ON tax_invoice
|
||
|
|
FOR EACH ROW
|
||
|
|
EXECUTE FUNCTION calculate_tax_invoice_total();
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📈 13. 인덱스 전략
|
||
|
|
|
||
|
|
### 13.1 필수 인덱스
|
||
|
|
|
||
|
|
**모든 테이블:**
|
||
|
|
```sql
|
||
|
|
-- company_code 인덱스 (멀티테넌시 필수)
|
||
|
|
CREATE INDEX idx_{table_name}_company_code ON {table_name}(company_code);
|
||
|
|
```
|
||
|
|
|
||
|
|
### 13.2 복합 인덱스
|
||
|
|
|
||
|
|
**자주 함께 조회되는 컬럼:**
|
||
|
|
```sql
|
||
|
|
-- 회사별, 날짜별 조회
|
||
|
|
CREATE INDEX idx_sales_company_date ON sales_order_mng(company_code, order_date DESC);
|
||
|
|
|
||
|
|
-- 회사별, 상태별 조회
|
||
|
|
CREATE INDEX idx_work_orders_company_status ON work_orders(company_code, status);
|
||
|
|
|
||
|
|
-- 회사별, 거래처별 조회
|
||
|
|
CREATE INDEX idx_purchase_company_supplier ON purchase_order_master(company_code, partner_objid);
|
||
|
|
```
|
||
|
|
|
||
|
|
### 13.3 부분 인덱스
|
||
|
|
|
||
|
|
**특정 조건의 데이터만:**
|
||
|
|
```sql
|
||
|
|
-- 활성 상태의 메뉴만 인덱싱
|
||
|
|
CREATE INDEX idx_menu_active ON menu_info(company_code, menu_type)
|
||
|
|
WHERE status = 'active';
|
||
|
|
|
||
|
|
-- 미완료 작업지시만 인덱싱
|
||
|
|
CREATE INDEX idx_work_orders_pending ON work_orders(company_code, wo_number)
|
||
|
|
WHERE status IN ('PENDING', 'IN_PROGRESS');
|
||
|
|
```
|
||
|
|
|
||
|
|
### 13.4 JSONB 인덱스
|
||
|
|
|
||
|
|
**JSONB 컬럼 검색:**
|
||
|
|
```sql
|
||
|
|
-- GIN 인덱스 (JSONB 전체 검색)
|
||
|
|
CREATE INDEX idx_screen_layouts_config ON screen_layouts USING GIN (layout_config);
|
||
|
|
|
||
|
|
-- JSONB 특정 키 인덱스
|
||
|
|
CREATE INDEX idx_flow_step_action_type ON flow_step ((action_config->>'action_type'));
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔒 14. 데이터베이스 보안
|
||
|
|
|
||
|
|
### 14.1 암호화 컬럼
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 외부 DB 비밀번호 암호화
|
||
|
|
external_db_connections.password_encrypted TEXT
|
||
|
|
|
||
|
|
-- 외부 REST API 인증 정보 암호화
|
||
|
|
external_rest_api_connections.auth_config JSONB
|
||
|
|
```
|
||
|
|
|
||
|
|
**암호화 방식:**
|
||
|
|
- AES-256-GCM
|
||
|
|
- 애플리케이션 레벨에서 암호화/복호화
|
||
|
|
- DB에는 암호화된 값만 저장
|
||
|
|
|
||
|
|
### 14.2 접근 제어
|
||
|
|
|
||
|
|
**회사별 데이터 격리:**
|
||
|
|
```sql
|
||
|
|
-- 모든 쿼리에 company_code 필터 필수
|
||
|
|
WHERE company_code = $1 AND company_code != '*'
|
||
|
|
```
|
||
|
|
|
||
|
|
**사용자별 권한 관리:**
|
||
|
|
```
|
||
|
|
user_info
|
||
|
|
→ authority_sub_user
|
||
|
|
→ authority_master
|
||
|
|
→ rel_menu_auth
|
||
|
|
→ 메뉴별 CRUD 권한
|
||
|
|
```
|
||
|
|
|
||
|
|
### 14.3 감사 로그
|
||
|
|
|
||
|
|
- 모든 변경 사항은 `{table_name}_log` 테이블에 기록
|
||
|
|
- IP 주소, 사용자 ID, 변경 시각 추적
|
||
|
|
- 변경 전후 전체 행 데이터 JSONB로 저장
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 15. 성능 최적화 전략
|
||
|
|
|
||
|
|
### 15.1 쿼리 최적화
|
||
|
|
|
||
|
|
**1. company_code 필터링 항상 포함**
|
||
|
|
```sql
|
||
|
|
-- ✅ Good
|
||
|
|
SELECT * FROM sales_order_mng
|
||
|
|
WHERE company_code = 'COMPANY_A'
|
||
|
|
AND order_date >= '2026-01-01';
|
||
|
|
|
||
|
|
-- ❌ Bad (전체 스캔)
|
||
|
|
SELECT * FROM sales_order_mng
|
||
|
|
WHERE order_date >= '2026-01-01';
|
||
|
|
```
|
||
|
|
|
||
|
|
**2. JOIN 시 company_code 매칭**
|
||
|
|
```sql
|
||
|
|
-- ✅ Good
|
||
|
|
SELECT so.*, c.customer_name
|
||
|
|
FROM sales_order_mng so
|
||
|
|
LEFT JOIN customer_mng c
|
||
|
|
ON so.customer_code = c.customer_code
|
||
|
|
AND so.company_code = c.company_code -- 필수!
|
||
|
|
WHERE so.company_code = 'COMPANY_A';
|
||
|
|
|
||
|
|
-- ❌ Bad (크로스 조인 발생)
|
||
|
|
SELECT so.*, c.customer_name
|
||
|
|
FROM sales_order_mng so
|
||
|
|
LEFT JOIN customer_mng c
|
||
|
|
ON so.customer_code = c.customer_code
|
||
|
|
WHERE so.company_code = 'COMPANY_A';
|
||
|
|
```
|
||
|
|
|
||
|
|
**3. 인덱스 활용**
|
||
|
|
```sql
|
||
|
|
-- 복합 인덱스 순서 중요
|
||
|
|
CREATE INDEX idx_sales_company_date_status
|
||
|
|
ON sales_order_mng(company_code, order_date, status);
|
||
|
|
|
||
|
|
-- ✅ Good (인덱스 활용)
|
||
|
|
WHERE company_code = 'COMPANY_A'
|
||
|
|
AND order_date >= '2026-01-01'
|
||
|
|
AND status = 'CONFIRMED';
|
||
|
|
|
||
|
|
-- ❌ Bad (인덱스 미활용)
|
||
|
|
WHERE status = 'CONFIRMED'
|
||
|
|
AND order_date >= '2026-01-01'
|
||
|
|
AND company_code = 'COMPANY_A';
|
||
|
|
```
|
||
|
|
|
||
|
|
### 15.2 대용량 데이터 처리
|
||
|
|
|
||
|
|
**파티셔닝:**
|
||
|
|
```sql
|
||
|
|
-- 날짜 기반 파티셔닝 (예시)
|
||
|
|
CREATE TABLE vehicle_location_history (
|
||
|
|
...
|
||
|
|
) PARTITION BY RANGE (recorded_at);
|
||
|
|
|
||
|
|
CREATE TABLE vehicle_location_history_2026_01
|
||
|
|
PARTITION OF vehicle_location_history
|
||
|
|
FOR VALUES FROM ('2026-01-01') TO ('2026-02-01');
|
||
|
|
```
|
||
|
|
|
||
|
|
**배치 처리:**
|
||
|
|
```sql
|
||
|
|
-- 대량 삽입 시 COPY 사용
|
||
|
|
COPY table_name FROM '/path/to/file.csv' WITH (FORMAT csv, HEADER true);
|
||
|
|
|
||
|
|
-- 대량 업데이트 시 배치 단위로
|
||
|
|
UPDATE table_name
|
||
|
|
SET status = 'PROCESSED'
|
||
|
|
WHERE id IN (
|
||
|
|
SELECT id FROM table_name
|
||
|
|
WHERE status = 'PENDING'
|
||
|
|
LIMIT 1000
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
### 15.3 캐싱 전략
|
||
|
|
|
||
|
|
**애플리케이션 레벨 캐싱:**
|
||
|
|
- 메타데이터 (table_labels, column_labels) → Redis
|
||
|
|
- 공통 코드 (comm_code) → Redis
|
||
|
|
- 메뉴 정보 (menu_info) → Redis
|
||
|
|
- 사용자 권한 (rel_menu_auth) → Redis
|
||
|
|
|
||
|
|
**쿼리 결과 캐싱:**
|
||
|
|
- 통계 데이터
|
||
|
|
- 집계 데이터
|
||
|
|
- 읽기 전용 마스터 데이터
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 16. 마이그레이션 가이드
|
||
|
|
|
||
|
|
### 16.1 마이그레이션 파일 목록
|
||
|
|
|
||
|
|
```
|
||
|
|
db/migrations/
|
||
|
|
├── 037_add_parent_group_to_screen_groups.sql
|
||
|
|
├── 050_create_work_orders_table.sql
|
||
|
|
├── 051_insert_work_order_screen_definition.sql
|
||
|
|
├── 052_insert_work_order_screen_layout.sql
|
||
|
|
├── 054_create_screen_management_enhancement.sql
|
||
|
|
├── 055_create_customer_item_prices_table.sql
|
||
|
|
└── plm_schema_20260120.sql (전체 스키마 덤프)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 16.2 마이그레이션 실행 순서
|
||
|
|
|
||
|
|
**1. 테이블 생성**
|
||
|
|
```sql
|
||
|
|
CREATE TABLE {table_name} (
|
||
|
|
id VARCHAR(500) PRIMARY KEY DEFAULT gen_random_uuid()::text,
|
||
|
|
company_code VARCHAR(20) NOT NULL,
|
||
|
|
created_date TIMESTAMP DEFAULT NOW(),
|
||
|
|
updated_date TIMESTAMP DEFAULT NOW(),
|
||
|
|
writer VARCHAR(500),
|
||
|
|
-- 비즈니스 컬럼들...
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
**2. 인덱스 생성**
|
||
|
|
```sql
|
||
|
|
CREATE INDEX idx_{table_name}_company_code ON {table_name}(company_code);
|
||
|
|
CREATE INDEX idx_{table_name}_created_date ON {table_name}(created_date DESC);
|
||
|
|
-- 기타 필요한 인덱스들...
|
||
|
|
```
|
||
|
|
|
||
|
|
**3. 메타데이터 등록**
|
||
|
|
```sql
|
||
|
|
-- table_labels
|
||
|
|
INSERT INTO table_labels (table_name, table_label, description)
|
||
|
|
VALUES ('{table_name}', '{한글명}', '{설명}')
|
||
|
|
ON CONFLICT (table_name) DO UPDATE SET ...;
|
||
|
|
|
||
|
|
-- table_type_columns
|
||
|
|
INSERT INTO table_type_columns (table_name, column_name, company_code, input_type, ...)
|
||
|
|
VALUES ...;
|
||
|
|
|
||
|
|
-- column_labels (레거시 호환)
|
||
|
|
INSERT INTO column_labels (table_name, column_name, column_label, ...)
|
||
|
|
VALUES ...;
|
||
|
|
```
|
||
|
|
|
||
|
|
**4. 코멘트 추가**
|
||
|
|
```sql
|
||
|
|
COMMENT ON TABLE {table_name} IS '{테이블 설명}';
|
||
|
|
COMMENT ON COLUMN {table_name}.{column_name} IS '{컬럼 설명}';
|
||
|
|
```
|
||
|
|
|
||
|
|
**5. 화면 정의 (선택)**
|
||
|
|
```sql
|
||
|
|
-- screen_definitions
|
||
|
|
INSERT INTO screen_definitions (screen_code, screen_name, table_name, ...)
|
||
|
|
VALUES ...;
|
||
|
|
|
||
|
|
-- 트리거 자동 발동 → menu_info 자동 생성
|
||
|
|
```
|
||
|
|
|
||
|
|
### 16.3 마이그레이션 롤백
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 화면 정의 삭제
|
||
|
|
DELETE FROM screen_definitions WHERE screen_code = '{screen_code}';
|
||
|
|
|
||
|
|
-- 메뉴 삭제 (자동 비활성화되었을 것)
|
||
|
|
DELETE FROM menu_info WHERE screen_code = '{screen_code}';
|
||
|
|
|
||
|
|
-- 메타데이터 삭제
|
||
|
|
DELETE FROM column_labels WHERE table_name = '{table_name}';
|
||
|
|
DELETE FROM table_type_columns WHERE table_name = '{table_name}';
|
||
|
|
DELETE FROM table_labels WHERE table_name = '{table_name}';
|
||
|
|
|
||
|
|
-- 인덱스 삭제
|
||
|
|
DROP INDEX IF EXISTS idx_{table_name}_company_code;
|
||
|
|
|
||
|
|
-- 테이블 삭제
|
||
|
|
DROP TABLE IF EXISTS {table_name};
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 17. 데이터베이스 설계 원칙 요약
|
||
|
|
|
||
|
|
### 17.1 ABSOLUTE MUST (절대 필수)
|
||
|
|
|
||
|
|
1. **모든 테이블에 company_code VARCHAR(20) NOT NULL**
|
||
|
|
2. **모든 쿼리에 company_code 필터 포함**
|
||
|
|
3. **JOIN 시 company_code 매칭 조건 포함**
|
||
|
|
4. **모든 테이블에 company_code 인덱스 생성**
|
||
|
|
5. **일반 회사는 company_code != '*' 필터 필수**
|
||
|
|
|
||
|
|
### 17.2 표준 테이블 구조
|
||
|
|
|
||
|
|
```sql
|
||
|
|
CREATE TABLE {table_name} (
|
||
|
|
-- 기본 컬럼 (표준 5종 세트)
|
||
|
|
id VARCHAR(500) PRIMARY KEY DEFAULT gen_random_uuid()::text,
|
||
|
|
created_date TIMESTAMP DEFAULT NOW(),
|
||
|
|
updated_date TIMESTAMP DEFAULT NOW(),
|
||
|
|
writer VARCHAR(500),
|
||
|
|
company_code VARCHAR(20) NOT NULL,
|
||
|
|
|
||
|
|
-- 비즈니스 컬럼들
|
||
|
|
...
|
||
|
|
);
|
||
|
|
|
||
|
|
-- 필수 인덱스
|
||
|
|
CREATE INDEX idx_{table_name}_company_code ON {table_name}(company_code);
|
||
|
|
```
|
||
|
|
|
||
|
|
### 17.3 메타데이터 등록 필수
|
||
|
|
|
||
|
|
동적 테이블 생성 시:
|
||
|
|
1. `table_labels` 등록
|
||
|
|
2. `table_type_columns` 등록 (회사별)
|
||
|
|
3. `column_labels` 등록 (레거시 호환)
|
||
|
|
4. 코멘트 추가
|
||
|
|
|
||
|
|
### 17.4 쿼리 패턴
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- ✅ 표준 SELECT
|
||
|
|
SELECT * FROM table_name
|
||
|
|
WHERE company_code = $1
|
||
|
|
AND company_code != '*'
|
||
|
|
ORDER BY created_date DESC;
|
||
|
|
|
||
|
|
-- ✅ 표준 JOIN
|
||
|
|
SELECT a.*, b.name
|
||
|
|
FROM table_a a
|
||
|
|
LEFT JOIN table_b b
|
||
|
|
ON a.ref_id = b.id
|
||
|
|
AND a.company_code = b.company_code -- 필수!
|
||
|
|
WHERE a.company_code = $1;
|
||
|
|
|
||
|
|
-- ✅ 표준 집계
|
||
|
|
SELECT
|
||
|
|
category,
|
||
|
|
COUNT(*) as total,
|
||
|
|
SUM(amount) as total_amount
|
||
|
|
FROM sales
|
||
|
|
WHERE company_code = $1
|
||
|
|
GROUP BY category;
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📚 18. 참고 자료
|
||
|
|
|
||
|
|
### 18.1 관련 문서
|
||
|
|
|
||
|
|
```
|
||
|
|
docs/
|
||
|
|
├── DB_ARCHITECTURE_ANALYSIS.md -- 기존 상세 DB 분석 문서
|
||
|
|
├── backend-architecture-analysis.md -- 백엔드 아키텍처 분석
|
||
|
|
├── frontend-architecture-analysis.md -- 프론트엔드 아키텍처 분석
|
||
|
|
└── kjs/
|
||
|
|
├── 멀티테넌시_구현_현황_분석_보고서.md
|
||
|
|
├── 테이블_타입관리_성능최적화_결과.md
|
||
|
|
└── 카테고리_시스템_최종_완료_보고서.md
|
||
|
|
```
|
||
|
|
|
||
|
|
### 18.2 스키마 파일
|
||
|
|
|
||
|
|
```
|
||
|
|
db/
|
||
|
|
├── plm_schema_20260120.sql -- 전체 스키마 덤프
|
||
|
|
└── migrations/
|
||
|
|
├── 037_add_parent_group_to_screen_groups.sql
|
||
|
|
├── 050_create_work_orders_table.sql
|
||
|
|
├── 051_insert_work_order_screen_definition.sql
|
||
|
|
├── 052_insert_work_order_screen_layout.sql
|
||
|
|
├── 054_create_screen_management_enhancement.sql
|
||
|
|
└── 055_create_customer_item_prices_table.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
### 18.3 백엔드 서비스 매핑
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
// backend-node/src/services/
|
||
|
|
|
||
|
|
// 화면 관리
|
||
|
|
screenManagementService.ts → screen_definitions, screen_layouts
|
||
|
|
|
||
|
|
// 테이블 관리
|
||
|
|
tableManagementService.ts → table_labels, table_type_columns, column_labels
|
||
|
|
|
||
|
|
// 메뉴 관리
|
||
|
|
menuService.ts → menu_info, menu_screen_groups
|
||
|
|
|
||
|
|
// 카테고리 관리
|
||
|
|
categoryTreeService.ts → table_column_category_values
|
||
|
|
|
||
|
|
// 플로우 관리
|
||
|
|
flowDefinitionService.ts → flow_definition, flow_step
|
||
|
|
flowExecutionService.ts → flow_data_status, flow_audit_log
|
||
|
|
|
||
|
|
// 데이터플로우
|
||
|
|
dataflowService.ts → dataflow_diagrams, screen_data_flows
|
||
|
|
|
||
|
|
// 외부 연동
|
||
|
|
externalDbConnectionService.ts → external_db_connections
|
||
|
|
externalRestApiConnectionService.ts → external_rest_api_connections
|
||
|
|
|
||
|
|
// 배치
|
||
|
|
batchService.ts → batch_jobs, batch_execution_logs
|
||
|
|
|
||
|
|
// 인증/권한
|
||
|
|
authService.ts → user_info, auth_tokens
|
||
|
|
roleService.ts → authority_master, rel_menu_auth
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎬 19. 비즈니스 워크플로우 통합 예시
|
||
|
|
|
||
|
|
### 19.1 수주 → 생산 → 출하 전체 플로우
|
||
|
|
|
||
|
|
```
|
||
|
|
[영업팀]
|
||
|
|
1. 견적 요청 접수 (estimate_mgmt)
|
||
|
|
2. 견적서 작성 및 발송
|
||
|
|
3. 고객 승인
|
||
|
|
|
||
|
|
[영업팀]
|
||
|
|
4. 수주 등록 (sales_order_mng)
|
||
|
|
→ sales_order_detail (품목별 상세)
|
||
|
|
→ contract_mgmt (계약 체결)
|
||
|
|
|
||
|
|
[생산관리팀]
|
||
|
|
5. 생산 계획 수립 (order_plan_mgmt)
|
||
|
|
→ 자재 소요 계획 (MRP)
|
||
|
|
→ 공정별 계획
|
||
|
|
|
||
|
|
[구매팀]
|
||
|
|
6. 구매 요청 (sales_request_master)
|
||
|
|
→ 공급처 선정 (supplier_mng)
|
||
|
|
→ 발주서 작성 (purchase_order_master)
|
||
|
|
→ 발주서 상세 (purchase_order_part)
|
||
|
|
|
||
|
|
[자재팀]
|
||
|
|
7. 입고 예정 (delivery_history)
|
||
|
|
→ 검수 (check_report_mng)
|
||
|
|
→ 입고 확정 (receiving)
|
||
|
|
→ 재고 반영 (inventory_stock)
|
||
|
|
|
||
|
|
[생산팀]
|
||
|
|
8. 작업지시 발행 (work_orders)
|
||
|
|
→ 자재 출고 (material_release)
|
||
|
|
→ 생산 실행 (production_record)
|
||
|
|
|
||
|
|
[품질팀]
|
||
|
|
9. 품질 검사 (inspection_standard)
|
||
|
|
→ 합격/불합격 판정
|
||
|
|
→ 완제품 입고 (inventory_stock)
|
||
|
|
|
||
|
|
[물류팀]
|
||
|
|
10. 출하 계획 (shipment_plan)
|
||
|
|
→ 출하 지시 (shipment_instruction)
|
||
|
|
→ 차량 배차 (vehicles)
|
||
|
|
→ 출고 처리 (outbound_mng)
|
||
|
|
|
||
|
|
[운송팀]
|
||
|
|
11. 운행 시작
|
||
|
|
→ GPS 추적 (vehicle_location_history)
|
||
|
|
→ 운행 로그 (transport_logs)
|
||
|
|
|
||
|
|
[고객]
|
||
|
|
12. 납품 완료
|
||
|
|
→ 배송 상태 업데이트 (delivery_status)
|
||
|
|
→ 세금계산서 발행 (tax_invoice)
|
||
|
|
|
||
|
|
[재무팀]
|
||
|
|
13. 정산
|
||
|
|
→ 매출 인식
|
||
|
|
→ 원가 계산 (profit_loss)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 19.2 데이터 흐름 추적
|
||
|
|
|
||
|
|
```
|
||
|
|
플로우 정의 (flow_definition): "수주-생산-출하 플로우"
|
||
|
|
│
|
||
|
|
├─ Step 1: 수주 접수 (flow_step)
|
||
|
|
│ └─ 데이터: sales_order_mng
|
||
|
|
│ └─ flow_data_status: STEP_1_COMPLETED
|
||
|
|
│
|
||
|
|
├─ Step 2: 생산 계획 (flow_step)
|
||
|
|
│ └─ 데이터: order_plan_mgmt
|
||
|
|
│ └─ flow_data_status: STEP_2_COMPLETED
|
||
|
|
│
|
||
|
|
├─ Step 3: 발주 처리 (flow_step)
|
||
|
|
│ └─ 데이터: purchase_order_master
|
||
|
|
│ └─ flow_data_status: STEP_3_COMPLETED
|
||
|
|
│
|
||
|
|
├─ Step 4: 입고 처리 (flow_step)
|
||
|
|
│ └─ 데이터: receiving, inventory_stock
|
||
|
|
│ └─ flow_data_status: STEP_4_COMPLETED
|
||
|
|
│
|
||
|
|
├─ Step 5: 생산 실행 (flow_step)
|
||
|
|
│ └─ 데이터: work_orders, production_record
|
||
|
|
│ └─ flow_data_status: STEP_5_COMPLETED
|
||
|
|
│
|
||
|
|
└─ Step 6: 출하 완료 (flow_step)
|
||
|
|
└─ 데이터: shipment_plan, outbound_mng
|
||
|
|
└─ flow_data_status: COMPLETED
|
||
|
|
|
||
|
|
각 단계 변경 이력: flow_audit_log
|
||
|
|
외부 시스템 연동: flow_integration_log
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**문서 작성자**: Cursor AI (DB Specialist Agent)
|
||
|
|
**문서 버전**: 2.0
|
||
|
|
**작성일**: 2026-02-06
|
||
|
|
**기반 스키마**: plm_schema_20260120.sql (337 테이블)
|
||
|
|
**목적**: WACE ERP 전체 워크플로우 문서화를 위한 DB 구조 분석
|
||
|
|
|
||
|
|
---
|