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
-- ✅ 표준 테이블 구조
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 (카테고리 값)
동적 테이블 생성 프로세스:
CREATE TABLE 실행
table_labels 등록
table_type_columns 등록 (회사별)
column_labels 등록 (레거시 호환)
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 |
파일 다운로드 로그 |
승인
옵션 관리
| 테이블 |
역할 |
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: 중국어
사용 예시:
// 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 |
- |
이력 테이블 구조:
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 -- 변경 후 전체 행
);
트리거 자동 기록:
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 주요 함수
화면 관련
-- 화면 생성 시 메뉴 자동 생성
CREATE FUNCTION auto_create_menu_for_screen() RETURNS TRIGGER;
-- 화면 삭제 시 메뉴 비활성화
CREATE FUNCTION auto_deactivate_menu_for_screen() RETURNS TRIGGER;
통계 집계
-- 일일 운송 통계 집계 함수
CREATE FUNCTION aggregate_daily_transport_statistics(target_date DATE DEFAULT CURRENT_DATE - 1)
RETURNS INTEGER;
거리 계산
-- Haversine 거리 계산 (GPS 좌표)
CREATE FUNCTION calculate_distance(lat1 NUMERIC, lng1 NUMERIC, lat2 NUMERIC, lng2 NUMERIC)
RETURNS NUMERIC;
-- 차량 위치 이력의 이전 위치로부터 거리 계산
CREATE FUNCTION calculate_distance_from_prev() RETURNS TRIGGER;
비즈니스 로직
-- 수주 잔량 자동 계산
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 주요 트리거
-- 화면 생성 시 메뉴 자동 생성
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 필수 인덱스
모든 테이블:
-- company_code 인덱스 (멀티테넌시 필수)
CREATE INDEX idx_{table_name}_company_code ON {table_name}(company_code);
13.2 복합 인덱스
자주 함께 조회되는 컬럼:
-- 회사별, 날짜별 조회
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 부분 인덱스
특정 조건의 데이터만:
-- 활성 상태의 메뉴만 인덱싱
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 컬럼 검색:
-- 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 암호화 컬럼
-- 외부 DB 비밀번호 암호화
external_db_connections.password_encrypted TEXT
-- 외부 REST API 인증 정보 암호화
external_rest_api_connections.auth_config JSONB
암호화 방식:
- AES-256-GCM
- 애플리케이션 레벨에서 암호화/복호화
- DB에는 암호화된 값만 저장
14.2 접근 제어
회사별 데이터 격리:
-- 모든 쿼리에 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 필터링 항상 포함
-- ✅ 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 매칭
-- ✅ 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. 인덱스 활용
-- 복합 인덱스 순서 중요
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 대용량 데이터 처리
파티셔닝:
-- 날짜 기반 파티셔닝 (예시)
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');
배치 처리:
-- 대량 삽입 시 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. 테이블 생성
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. 인덱스 생성
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. 메타데이터 등록
-- 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. 코멘트 추가
COMMENT ON TABLE {table_name} IS '{테이블 설명}';
COMMENT ON COLUMN {table_name}.{column_name} IS '{컬럼 설명}';
5. 화면 정의 (선택)
-- screen_definitions
INSERT INTO screen_definitions (screen_code, screen_name, table_name, ...)
VALUES ...;
-- 트리거 자동 발동 → menu_info 자동 생성
16.3 마이그레이션 롤백
-- 화면 정의 삭제
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 (절대 필수)
- 모든 테이블에 company_code VARCHAR(20) NOT NULL
- 모든 쿼리에 company_code 필터 포함
- JOIN 시 company_code 매칭 조건 포함
- 모든 테이블에 company_code 인덱스 생성
- 일반 회사는 company_code != '*' 필터 필수
17.2 표준 테이블 구조
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 메타데이터 등록 필수
동적 테이블 생성 시:
table_labels 등록
table_type_columns 등록 (회사별)
column_labels 등록 (레거시 호환)
- 코멘트 추가
17.4 쿼리 패턴
-- ✅ 표준 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 백엔드 서비스 매핑
// 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 구조 분석