ERP-node/docs/screen-implementation-guide/00_analysis/full-screen-analysis.md

21 KiB

WACE ERP 화면 구성 시스템 전체 분석

최종 업데이트: 2026-03-13 용도: LLM 챗봇 / AI 에이전트가 화면 개발 요청을 받았을 때 참조하는 시스템 구조 레퍼런스 핵심 규칙: 사용자 업무 화면은 React 코드(.tsx)로 직접 만들지 않는다. DB 등록(screen_definitions + screen_layouts_v2 + menu_info)으로 구현한다.


1. 시스템 아키텍처 요약

1.1 화면 렌더링 파이프라인

[DB] screen_definitions (화면 정의)
  + screen_layouts_v2 (레이아웃 JSON)
  + menu_info (메뉴 등록)
       │
       ▼
[Backend API] GET /api/screens/:screenId
       │
       ▼
[Frontend] /screens/[screenId]/page.tsx
       │
       ▼
[Converter] layoutV2Converter.ts → V2 JSON을 Legacy 포맷으로 변환
       │
       ▼
[Renderer] ResponsiveGridRenderer → RealtimePreview → DynamicComponentRenderer
       │
       ▼
[Registry] ComponentRegistry.getComponent(componentType) → 실제 React 컴포넌트 렌더링

1.2 화면 유형 분류

구분 구현 방식 코드 위치 예시
사용자 업무 화면 DB 등록 (SQL INSERT) screen_definitions + screen_layouts_v2 수주관리, 품목정보, BOM관리
관리자 메뉴 React 코드 직접 작성 frontend/app/(main)/admin/*/page.tsx 사용자관리, 권한관리, 시스템설정

절대 규칙: 사용자 업무 화면(생산, 영업, 구매, 물류, 품질 등)은 React 하드코딩 금지. 반드시 DB 등록 방식으로 구현.


2. V2 컴포넌트 전체 목록 (32개)

모든 컴포넌트는 v2- 접두사를 사용한다. 접두사 없는 컴포넌트는 레거시이므로 사용 금지.

2.1 입력 컴포넌트 (9개)

ID 용도 핵심 설정
v2-input 텍스트, 숫자, 비밀번호, textarea, 슬라이더, 컬러, 버튼 inputType, format(email/tel/url/currency/biz_no), required, readonly, maxLength
v2-select 드롭다운, 콤보박스, 라디오, 체크박스, 태그, 토글, 스왑 mode, source(static/code/db/api/entity/category/distinct/select), searchable, multiple, cascading
v2-date 날짜, 시간, 날짜시간, 날짜범위, 월, 연도 dateType(date/time/datetime), format, range, minDate, maxDate
v2-file-upload 파일/이미지 업로드, 다중 업로드 accept, maxSize, multiple
v2-media 이미지, 비디오, 오디오 표시 mediaType
v2-location-swap-selector 출발지/도착지 선택 및 교환 -
v2-rack-structure 창고 랙 위치 일괄 생성 columns, rows
v2-process-work-standard 품목별 공정 작업기준 관리 (Pre/In/Post-Work) -
v2-item-routing 품목별 라우팅 버전 및 공정 순서 관리 (3단계 계층) -

2.2 표시/데이터 컴포넌트 (10개)

ID 용도 핵심 설정
v2-table-list 데이터 테이블 (조회/편집, 페이지네이션, 정렬, 필터) selectedTable, columns, pagination, displayMode(table/card), checkbox, linkedFilters
v2-table-grouped 그룹화 테이블 (접기/펼치기, 그룹별 집계) groupConfig(groupByColumn, summary), v2-table-list 기반 확장
v2-table-search-widget 테이블 검색/필터/그룹 바 autoSelectFirstTable, showTableSelector
v2-pivot-grid 다차원 피벗 분석 (행/열/데이터/필터 영역) fields(area, summaryType, groupInterval), dataSource
v2-text-display 라벨, 제목, 설명 텍스트 표시 fontSize, fontWeight, color, textAlign
v2-card-display 테이블 데이터를 카드 형태로 표시 cardsPerRow, columnMapping(title/subtitle/image/status), cardStyle
v2-aggregation-widget 합계, 평균, 개수, 최대, 최소 집계 카드 items, filters, layout
v2-status-count 상태별 건수 카드 표시 statusField, countField
v2-numbering-rule 자동 코드/번호 채번 (접두사+날짜+순번) rule, prefix, format
v2-category-manager 트리 기반 카테고리 관리 (3단계 계층) -

2.3 레이아웃 컴포넌트 (8개)

ID 용도 핵심 설정
v2-split-panel-layout 마스터-디테일 좌우 분할 splitRatio, leftPanel(displayMode/tableName), rightPanel(relation/foreignKey), additionalTabs
v2-tabs-widget 탭 전환, 탭 내 컴포넌트 배치 tabs(id/label/components), defaultTab, orientation
v2-section-card 제목+테두리가 있는 그룹화 컨테이너 title, collapsible
v2-section-paper 배경색 기반 미니멀 그룹화 컨테이너 backgroundColor, padding
v2-divider-line 영역 구분선 orientation, thickness
v2-split-line 캔버스 좌우 분할용 드래그 가능 세로선 -
v2-repeat-container 데이터 수만큼 내부 컴포넌트 반복 렌더링 dataSourceType, layout, gridColumns
v2-repeater 인라인/모달/버튼 모드 반복 데이터 관리 mode(inline/modal/button)

2.4 특수/비즈니스 컴포넌트 (5개)

ID 용도 핵심 설정
v2-button-primary 저장/삭제/조회 등 액션 버튼 text, actionType, variant, webTypeConfig.dataflowConfig
v2-timeline-scheduler 간트차트형 일정/계획 시각화 (드래그/리사이즈) selectedTable, resourceTable, fieldMapping, zoomLevel, editable
v2-approval-step 결재 단계 스테퍼 시각화 -
v2-bom-tree BOM 계층 트리 표시 (정전개/역전개) -
v2-bom-item-editor BOM 하위품목 트리 편집 -

3. 화면 UI 패턴 분류 (7가지)

AI가 화면 개발 요청을 받았을 때, 아래 패턴 중 해당하는 것을 선택하여 구현한다.

패턴 A: 기본 마스터 (검색 + 테이블)

적용 비율: 약 50% (가장 흔함) 적용 화면: 코드관리, 부서정보, 창고정보, 검사기준, 불량관리, 공급업체관리 등

┌─────────────────────────────────────────────────┐
│ v2-table-search-widget                          │
│ [검색필드1] [검색필드2] [조회] [엑셀]            │
├─────────────────────────────────────────────────┤
│ v2-table-list                                   │
│ 제목        [신규] [삭제]                        │
│ ─────────────────────────────────────────────── │
│ □ | 코드 | 이름 | 상태 | 등록일                 │
└─────────────────────────────────────────────────┘

필수 컴포넌트: v2-table-search-widget (1개) + v2-table-list (1개)

패턴 B: 마스터-디테일 (좌우 분할)

적용 비율: 약 25% 적용 화면: 공정관리, 수주관리, 견적관리, 품목라우팅 등

┌──────────────────┬──────────────────────────────┐
│ 마스터 테이블     │ 디테일 테이블/폼              │
│ (좌측 패널)      │ (우측 패널)                   │
│ □ A001 항목1     │ [상세 정보 테이블]             │
│ □ A002 항목2 ←   │                              │
└──────────────────┴──────────────────────────────┘
           v2-split-panel-layout

필수 컴포넌트: v2-split-panel-layout (1개)

패턴 C: 마스터-디테일 + 탭

적용 비율: 약 10% 적용 화면: 거래처관리, 설비정보, 품목정보 등

┌──────────────────┬──────────────────────────────┐
│ 마스터 테이블     │ [기본] [이력] [첨부]          │
│                  │ ┌────────────────────────┐   │
│ □ A001 거래처1   │ │ 탭별 컨텐츠            │   │
│ □ A002 거래처2 ← │ └────────────────────────┘   │
└──────────────────┴──────────────────────────────┘

필수 컴포넌트: v2-split-panel-layout (1개, rightPanel에 additionalTabs 설정)

패턴 D: 카드 뷰

적용 비율: 약 5% 적용 화면: 설비정보, 대시보드, 상품 카탈로그 등

┌─────────────────────────────────────────────────┐
│ v2-table-search-widget                          │
├─────────────────────────────────────────────────┤
│ ┌─────────┐ ┌─────────┐ ┌─────────┐           │
│ │ [이미지]│ │ [이미지]│ │ [이미지]│           │
│ │ 제목    │ │ 제목    │ │ 제목    │           │
│ │ 설명    │ │ 설명    │ │ 설명    │           │
│ └─────────┘ └─────────┘ └─────────┘           │
│              v2-card-display                    │
└─────────────────────────────────────────────────┘

필수 컴포넌트: v2-card-display (1개) + v2-table-search-widget (선택)

패턴 E: 피벗 분석

적용 비율: 약 3% 적용 화면: 매출분석, 재고현황, 생산실적 분석 등

필수 컴포넌트: v2-pivot-grid (1개)

패턴 F: 그룹화 테이블

적용 비율: 약 5% 적용 화면: 품목정보(카테고리별), 입출고관리(구분별), 작업지시(공정별) 등

┌─────────────────────────────────────────────────┐
│ [전체 펼치기] [전체 접기]                         │
├─────────────────────────────────────────────────┤
│ ▼ □ 그룹A                    수량: 150  3건     │
│   ├─ □ 항목1  50개                              │
│   ├─ □ 항목2  50개                              │
│   └─ □ 항목3  50개                              │
│ ► □ 그룹B                    수량: 200  2건     │
└─────────────────────────────────────────────────┘

필수 컴포넌트: v2-table-grouped (1개)

패턴 G: 타임라인/간트차트

적용 비율: 약 2% 적용 화면: 생산계획관리, 설비가동현황 등

┌────────────┬─────────────────────────────────────┐
│            │ 15(수) │ 16(목) │ 17(금) │ 18(토)   │
├────────────┼─────────────────────────────────────┤
│ 설비A      │ ████████████████                    │
│ 설비B      │        █████████████████████        │
│ 설비C      │                    ████████████████ │
└────────────┴─────────────────────────────────────┘

필수 컴포넌트: v2-timeline-scheduler (1개)


4. 패턴 판단 의사결정 트리

AI가 화면 요청을 받았을 때 이 트리를 따라 패턴을 결정한다.

Q1. 시간축 기반 일정/간트차트가 필요한가?
├─ YES → 패턴 G (타임라인)
└─ NO ↓

Q2. 다차원 집계/피벗 분석이 필요한가?
├─ YES → 패턴 E (피벗)
└─ NO ↓

Q3. 데이터를 그룹별로 묶어서 접기/펼치기가 필요한가?
├─ YES → 패턴 F (그룹화 테이블)
└─ NO ↓

Q4. 이미지+정보를 카드 형태로 표시하는가?
├─ YES → 패턴 D (카드 뷰)
└─ NO ↓

Q5. 마스터 테이블 선택 시 연관 디테일이 필요한가?
├─ YES → Q5-1. 디테일에 탭이 필요한가?
│        ├─ YES → 패턴 C (마스터-디테일+탭)
│        └─ NO  → 패턴 B (마스터-디테일)
└─ NO → 패턴 A (기본 마스터)

5. 화면 구현 불가능/제한 사항

5.1 현재 불가능 (별도 React 개발 필요)

기능 상태 대안
칸반 보드 (드래그앤드롭) 미지원 별도 React 컴포넌트
모바일 네이티브 앱 스타일 미지원 별도 개발
복잡한 차트 (line, bar, pie) 미지원 외부 라이브러리 연동

5.2 이전에 불가능했으나 현재 지원되는 기능

기능 지원 컴포넌트 추가 시점
그룹화 테이블 v2-table-grouped 2026-01
타임라인/간트차트 v2-timeline-scheduler 2026-01
BOM 트리 (정전개/역전개) v2-bom-tree 2026-02
BOM 하위품목 편집 v2-bom-item-editor 2026-02
결재 스테퍼 v2-approval-step 2026-02

5.3 권장하지 않는 조합

조합 이유
3단계 이상 중첩 분할 화면 복잡도 증가, 성능 저하
탭 안에 탭 사용성 저하
한 화면에 3개 이상 테이블 데이터 로딩 성능
피벗 + 상세 테이블 동시 데이터 과부하

6. 화면별 구현 현황 (메뉴 분류)

6.1 기준정보

화면명 패턴 구현 가능 비고
회사정보 A 완전 지원
부서정보 A 완전 지원
품목정보 F 또는 A 완전 지원 카테고리별 그룹화 시 F
BOM관리 B + v2-bom-tree 완전 지원 v2-bom-tree로 트리 구현
공정정보관리 B 완전 지원
공정작업기준 A 완전 지원 v2-process-work-standard 활용 가능
품목라우팅 B 완전 지원 v2-item-routing 활용 가능

6.2 영업관리

화면명 패턴 구현 가능 비고
수주관리 B 완전 지원
견적관리 B 완전 지원
거래처관리 C 완전 지원 탭(기본/이력/첨부)
판매품목정보 A 완전 지원
출하계획관리 A 완전 지원

6.3 생산관리

화면명 패턴 구현 가능 비고
생산계획관리 G 완전 지원 v2-timeline-scheduler
생산관리 A 완전 지원
생산실적관리 A 완전 지원
작업지시 F 완전 지원 공정별 그룹화
공정관리 B 완전 지원

6.4 구매관리

화면명 패턴 구현 가능 비고
발주관리 A 완전 지원
공급업체관리 A 완전 지원
구매입고 A 완전 지원

6.5 설비관리

화면명 패턴 구현 가능 비고
설비정보 C 또는 D 완전 지원 카드뷰 또는 탭

6.6 물류관리

화면명 패턴 구현 가능 비고
창고정보관리 A 완전 지원
입출고관리 F 완전 지원 구분별 그룹화
재고현황 A 또는 E 완전 지원 피벗 분석도 가능

6.7 품질관리

화면명 패턴 구현 가능 비고
검사기준 A 완전 지원
검사정보관리 C 완전 지원 탭(수입검사/공정검사/출하검사)
검사장비관리 A 완전 지원
불량관리 A 완전 지원
클레임관리 A 완전 지원

7. 컴포넌트 커버리지 요약

항목 수치
전체 분석 대상 화면 26개
V2 컴포넌트로 구현 가능 26개 (100%)
등록된 V2 컴포넌트 수 32개
화면 UI 패턴 수 7가지 (A~G)

이전 대비 변경 사항:

  • BOM 트리 지원 추가 (v2-bom-tree) → BOM관리 완전 지원
  • 그룹화 테이블 지원 추가 (v2-table-grouped) → 품목정보, 입출고 등 완전 지원
  • 타임라인 지원 추가 (v2-timeline-scheduler) → 생산계획관리 완전 지원
  • 결재 스테퍼 추가 (v2-approval-step) → 결재 프로세스 시각화 가능
  • 전체 커버리지: 65% → 100% 달성

8. UI vs 비즈니스 로직 분리 구조

┌───────────────────────────────┬───────────────────────────────────┐
│        UI 레이아웃             │         제어관리 (비즈니스 로직)    │
│   screen_layouts_v2 (JSON)    │   dataflow_diagrams (JSONB)       │
├───────────────────────────────┼───────────────────────────────────┤
│ - 컴포넌트 배치/크기/위치      │ - 버튼 클릭 시 액션 (INSERT 등)    │
│ - 검색 필드 구성               │ - 조건부 실행                     │
│ - 테이블 컬럼 표시/숨김        │ - 다중 행 일괄 처리               │
│ - 카드/탭/분할 레이아웃        │ - 테이블 간 데이터 이동            │
│ - 페이지네이션/정렬 설정       │ - 외부 시스템 호출                │
└───────────────────────────────┴───────────────────────────────────┘

핵심: V2 컴포넌트는 UI만 담당한다. 버튼 클릭 시 INSERT/UPDATE/DELETE 같은 비즈니스 로직은 dataflow_diagrams 테이블에서 별도 설정한다.

비즈니스 로직 실행 흐름

v2-button-primary 클릭
  → webTypeConfig.dataflowConfig 확인
  → ImprovedButtonActionExecutor 실행
    1. Before 제어 실행 (조건 체크)
    2. Main 액션 실행 (save/delete/update)
    3. After 제어 실행 (후처리)

9. 화면 개발 순서 (AI 에이전트용)

Step 1: DB 테이블 생성
  └─ 모든 컬럼 VARCHAR(500), 기본 5개 컬럼 필수 (id, created_date, updated_date, writer, company_code)
  └─ table_labels, table_type_columns, column_labels 메타데이터 등록

Step 2: screen_definitions INSERT
  └─ screen_code = '{company_code}_{순번}'
  └─ table_name = 메인 테이블명

Step 3: screen_layouts_v2 INSERT
  └─ layout_data = V2 레이아웃 JSON (version: "2.0", components 배열)
  └─ 패턴(A~G)에 맞는 컴포넌트 배치

Step 4: dataflow_diagrams INSERT (비즈니스 로직이 필요한 경우)
  └─ 버튼별 액션 정의 (INSERT/UPDATE/DELETE)
  └─ 조건, 필드 매핑 설정

Step 5: menu_info INSERT
  └─ menu_url = '/screen/{screen_code}'
  └─ 적절한 parent_id로 메뉴 트리에 배치

10. DB 테이블 구조 레퍼런스

screen_definitions

컬럼 타입 설명
screen_id integer PK (시퀀스) 화면 고유 ID
screen_name varchar(100) 화면명
screen_code varchar(50) UNIQUE 화면 코드 ({company_code}_{순번})
table_name varchar(100) 기본 테이블명
company_code varchar(50) 회사 코드
description text 설명
is_active char(1) Y/N/D

screen_layouts_v2

컬럼 타입 설명
layout_id integer PK 레이아웃 ID
screen_id integer FK 화면 ID
company_code varchar(20) 회사 코드
layer_id integer 레이어 ID (1=기본)
layout_data jsonb 전체 레이아웃 JSON

layout_data JSON 구조

{
  "version": "2.0",
  "components": [
    {
      "id": "comp_xxx",
      "url": "@/lib/registry/components/v2-table-list",
      "position": { "x": 0, "y": 150, "z": 1 },
      "size": { "width": 1920, "height": 600 },
      "displayOrder": 0,
      "overrides": {
        "label": "품목 목록",
        "tableName": "item_info",
        "columns": [
          { "columnName": "item_code", "displayName": "품목코드", "visible": true }
        ],
        "pagination": { "enabled": true, "pageSize": 20 }
      }
    }
  ],
  "gridSettings": { "columns": 12, "gap": 16, "padding": 16 },
  "screenResolution": { "width": 1920, "height": 1080 }
}

menu_info (주요 컬럼)

컬럼 설명
objid / menu_id 메뉴 PK
screen_id 연결된 화면 ID
menu_url 메뉴 URL (/screen/{screen_code})
company_code 회사 코드