# 🎯 녾드 êž°ë°˜ 데읎터 제얎 시슀템 개선 계획 ## 📋 묞서 정볎 - **작성음**: 2025-10-02 - **최종 수정음**: 2025-10-02 - **버전**: 1.5 - **상태**: 🎉 Phase 1 완료! (100%) - **닎당**: 개발팀 ## 📈 구현 진행 상황 ### ✅ 완료된 작업 (Phase 1) #### Week 1 - 완료 ✓ - ✅ React Flow 11.10.4 통합 및 Ʞ볞 섀정 - ✅ 띌읎람러늬 섀치 및 섀정 - ✅ Ʞ볞 캔버슀 구현 - ✅ 귞늬드 배겜 및 쀌/팬 Ʞ능 - ✅ Ʞ볞 녾드 타입 구현 (3개/3개) - ✅ 테읎랔 소슀 녾드 (TableSourceNode) - ✅ INSERT 액션 녾드 (InsertActionNode) - ✅ 필드 맀핑 녾드 (FieldMappingNode) - ✅ 핵심 읞프띌 - ✅ TypeScript 타입 정의 완료 (types/node-editor.ts) - ✅ Zustand 상태 ꎀ늬 슀토얎 (flowEditorStore.ts) - ✅ 녾드 팔레튾 섀정 (nodePaletteConfig.ts) #### Week 2 - 완료 ✓ - ✅ 드래귞 ì•€ 드롭 Ʞ능 - ✅ 도구 팚널에서 캔버슀로 드래귞 - ✅ 녾드 읎동 및 재배치 - ✅ 닀쀑 선택 및 귞룹 읎동 - ✅ 연결선 귞늬Ʞ - ✅ Ʞ볞 연결 생성 - ✅ 연결 검슝 (타입 혞환성, 순환 ì°žì¡°, 쀑복 연결) - ✅ 연결 슀타음링 (smoothstep) - ✅ 추가 녾드 타입 구현 (4개 완료) - ✅ 조걎 ë¶„êž° 녾드 (ConditionNode) - TRUE/FALSE 2개 출력 - ✅ 왞부 DB 소슀 녾드 (ExternalDBSourceNode) - DB 타입별 색상 - ✅ UPDATE 액션 녾드 (UpdateActionNode) - WHERE 조걎 포핚 - ✅ DELETE 액션 녾드 (DeleteActionNode) - 겜고 메시지 **마음슀톀 1 완료**: 7개 녾드 타입 구현 완료 (58%) #### Week 3 - 완료 ✓ - ✅ 속성 펞집 Ʞ능 (완료) - ✅ 녾드 선택 읎벀튞 핞듀러 (onSelectionChange) - ✅ 속성 팹널 프레임워크 (PropertiesPanel) - ✅ 녾드 타입별 속성 띌우팅 - ✅ 7개 녾드 속성 펞집 UI 완성 - ✅ TableSource: 테읎랔명, 슀킀마, 출력 필드 - ✅ InsertAction: 필드 맀핑, 배치 크Ʞ, 옵션 - ✅ FieldMapping: 소슀→타겟 맀핑, 변환 핚수 - ✅ Condition: 12가지 연산자, AND/OR 로직 - ✅ UpdateAction: WHERE 조걎, 업데읎튞 필드 - ✅ DeleteAction: WHERE 조걎, 위험 겜고 UI - ✅ ExternalDBSource: DB 타입별 색상, 연결 정볎 **마음슀톀 2 완료**: 속성 펞집 Ʞ능 100% 완료 (7/7 녾드) #### Week 4 - 완료 ✓ - ✅ 저장/불러였Ʞ Ʞ능 (완료) - ✅ 플로우 저장 API (신규/수정) - ✅ 플로우 목록 조회 API - ✅ 플로우 상섞 조회 API - ✅ 플로우 삭제 API - ✅ JSON 직렬화/역직렬화 - ✅ 불러였Ʞ 닀읎얌로귞 UI - ✅ JSON 파음 낎볎낎Ʞ - ✅ node_flows 테읎랔 생성 - ✅ API 큎띌읎얞튞 통합 - ✅ JSONB 타입 처늬 (묞자엎/객첎 자동 변환) - ✅ **싀제 저장/불러였Ʞ 동작 검슝 완료** **마음슀톀 3 완료**: 저장/불러였Ʞ 100% 완료 및 검슝 ## 🎉 Phase 1 & Phase 2 완료! 몚든 핵심 Ʞ능읎 구현 및 테슀튞 완료되었습니닀: **Phase 1 (완료)** - ✅ 7개 녾드 타입 구현 - ✅ 7개 속성 펞집 UI - ✅ 저장/불러였Ʞ 시슀템 (DB + JSON) - ✅ 검슝 시슀템 - ✅ 드래귞앀드롭 에디터 - ✅ **싀제 저장/불러였Ʞ 테슀튞 완료** **Phase 2 (완료)** - ✅ 12개 녾드 타입 구현 (100%) - ✅ 12개 속성 펞집 UI (100%) - ✅ REST API, UPSERT, 데읎터 변환, 죌석, 로귞 녾드 추가 ### 🎯 닀음 작업 (Phase 3) #### Week 5 - 완료 ✓ - ✅ 낚은 녾드 타입 구현 (5개) - ✅ UpsertAction: INSERT + UPDATE 결합 (ON CONFLICT) - ✅ DataTransform: 데읎터 변환 (UPPERCASE, LOWERCASE, TRIM 등) - ✅ RestAPISource: REST API 혞출 - ✅ Comment: 죌석 녾드 - ✅ Log: 로귞 출력 녾드 - ✅ 낚은 속성 펞집 팹널 구현 (5개) - ✅ UpsertActionProperties: 충돌 í‚€, 필드 맀핑, 옵션 - ✅ DataTransformProperties: 변환 규칙, 표현식 - ✅ RestAPISourceProperties: URL, 메서드, 헀더, 읞슝 - ✅ CommentProperties: 메몚 낎용 - ✅ LogProperties: 로귞 레벚, 메시지, 데읎터 포핚 **마음슀톀 4 완료**: 녾드 타입 100% 완료 (12/12) **마음슀톀 5 완료**: 속성 팹널 100% 완료 (12/12) ## 🎉 Phase 2 완료! 몚든 녾드 타입곌 속성 팚널읎 구현되었습니닀! ### 🎯 Phase 3 계획: 검슝 및 싀행 시슀템 #### Week 6 - 완료 ✓ - ✅ 검슝 시슀템 강화 - ✅ 순환 ì°žì¡° 검슝 (DFS 알고늬슘) - ✅ 녞드별 필수 속성 검슝 (12개 녾드 타입) - ✅ Comment/Log 녾드 독늜 허용 - ✅ 상섞한 였류 메시지 및 녾드 ID 포핚 **마음슀톀 6 완료**: 검슝 시슀템 100% 완료 #### 우선순위 1: 검슝 시슀템 강화 ✅ 완료 #### 우선순위 2: 플로우 싀행 엔진 (추후 구현) - ⏳ 녾드 싀행 로직 - ⏳ 데읎터 흐멄 처늬 - ⏳ 에러 핞듀링 - ⏳ 튞랜잭션 ꎀ늬 - ⏳ 플로우 목록 조회 ### 📊 구현된 컎포넌튞 ``` frontend/ ├── types/ │ └── node-editor.ts ✅ (완료) ├── lib/ │ └── stores/ │ └── flowEditorStore.ts ✅ (완료) ├── components/dataflow/node-editor/ │ ├── FlowEditor.tsx ✅ (완료) │ ├── FlowToolbar.tsx ✅ (완료) │ ├── nodes/ │ │ ├── TableSourceNode.tsx ✅ (완료) │ │ ├── ExternalDBSourceNode.tsx ✅ (완료) │ │ ├── ConditionNode.tsx ✅ (완료) │ │ ├── FieldMappingNode.tsx ✅ (완료) │ │ ├── InsertActionNode.tsx ✅ (완료) │ │ ├── UpdateActionNode.tsx ✅ (완료) │ │ ├── DeleteActionNode.tsx ✅ (완료) │ │ ├── RestAPISourceNode.tsx ✅ (완료) │ │ ├── DataTransformNode.tsx ✅ (완료) │ │ ├── UpsertActionNode.tsx ✅ (완료) │ │ ├── CommentNode.tsx ✅ (완료) │ │ └── LogNode.tsx ✅ (완료) │ ├── sidebar/ │ │ ├── NodePalette.tsx ✅ (완료) │ │ └── nodePaletteConfig.ts ✅ (완료) │ └── panels/ │ ├── PropertiesPanel.tsx ✅ (완료) │ └── properties/ │ ├── TableSourceProperties.tsx ✅ (완료) │ ├── ExternalDBSourceProperties.tsx ✅ (완료) │ ├── ConditionProperties.tsx ✅ (완료) │ ├── FieldMappingProperties.tsx ✅ (완료) │ ├── InsertActionProperties.tsx ✅ (완료) │ ├── UpdateActionProperties.tsx ✅ (완료) │ ├── DeleteActionProperties.tsx ✅ (완료) │ ├── UpsertActionProperties.tsx ✅ (완료) │ ├── DataTransformProperties.tsx ✅ (완료) │ ├── RestAPISourceProperties.tsx ✅ (완료) │ ├── CommentProperties.tsx ✅ (완료) │ └── LogProperties.tsx ✅ (완료) └── app/(main)/admin/dataflow/ └── node-editor/ └── page.tsx ✅ (완료) ``` ### 🎮 현재 사용 가능한 Ʞ능 - ✅ 녾드 드래귞 ì•€ 드롭윌로 캔버슀에 추가 - ✅ 녾드 간 연결선 귞늬Ʞ - ✅ 녾드 선택 및 속성 펞집 (100%) - ✅ 쀌/팬 컚튞례 (확대/축소/전첎볎Ʞ) - ✅ 믞니맵 표시 - ✅ 플로우 검슝 (소슀/액션 첎크, 고아 녾드 감지) - ✅ 반응형 레읎아웃 (250px 사읎드바 + 캔버슀 + 350px 속성) - ✅ 7개 녾드 타입 구현 (58%) - 데읎터 소슀: 테읎랔, 왞부 DB - 변환/조걎: 필드 맀핑, 조걎 ë¶„êž° (TRUE/FALSE 출력) - 액션: INSERT, UPDATE, DELETE - ✅ 7개 녾드 속성 펞집 완성 (100%) - TableSource: 테읎랔/슀킀마 섀정 - InsertAction: 필드 맀핑, 배치 옵션 - FieldMapping: 소슀→타겟, 변환 핚수 - Condition: 12가지 연산자, AND/OR - UpdateAction: WHERE 조걎, 업데읎튞 필드 - DeleteAction: WHERE 조걎, 위험 겜고 - ExternalDBSource: DB 타입별 UI - ✅ 저장/불러였Ʞ 시슀템 (100%) - DB 저장 (신규/수정) - 플로우 목록 조회 - 플로우 불러였Ʞ - 플로우 삭제 - JSON 파음 낎볎낎Ʞ ### 📍 테슀튞 URL ``` http://localhost:3000/admin/dataflow/node-editor ``` --- ## 📊 현재 시슀템 분석 ### 현재 구조 현재 데읎터 제얎 시슀템은 4닚계 마법사 방식을 사용합니닀: ``` Step 1: 연결 섀정 (FROM/TO 테읎랔 선택) ↓ Step 2: 데읎터 선택 (컬럌 맀핑) ↓ Step 3: 조걎 섀정 (제얎 조걎) ↓ Step 4: 액션 섀정 (INSERT/UPDATE/DELETE) ``` ### 묞제점 #### 1. 사용성 묞제 - ❌ **전첎 흐멄 파악 얎렀움**: 4닚계륌 몚두 거쳐알 전첎 구조 읎핎 가능 - ❌ **수정 불펞**: 읎전 닚계로 돌아가서 수정하Ʞ 번거로움 - ❌ **복잡한 로직 표현 제한**: 닀쀑 ë¶„êž°, 조걎부 싀행 등 표현 얎렀움 - ❌ **시각화 제한**: "흐멄 믞늬볎Ʞ" 탭에서만 전첎 구조 확읞 가능 #### 2. Ʞ능적 제한 - 닚선형 흐멄만 지원 (A → B → C) - 복잡한 데읎터 변환 로직 구현 얎렀움 - 디버깅 시 얎느 닚계에서 묞제가 발생했는지 파악 얎렀움 - 재사용 가능한 로직 팹턮 저장 불가 #### 3. 학습 곡선 - 새로욎 사용자가 4닚계 프로섞슀륌 읎핎하는데 시간 소요 - 각 닚계의 섀정읎 최종 결곌에 ì–Žë–€ 영향을 죌는지 직ꎀ적읎지 않음 --- ## 🚀 제안: 녾드 êž°ë°˜ 비죌얌 에디터 ### 핵심 개념 **랔룚프늰튞 슀타음 녾드 프로귞래밍** - 얞늬얌 엔진, N8N, Node-RED와 같은 비죌얌 프로귞래밍 방식 채택 - 드래귞 ì•€ 드롭윌로 녾드 배치 - 녾드 간 연결선윌로 데읎터 흐멄 표현 - 싀시간 시각적 플드백 ### 죌요 장점 #### 1. 직ꎀ성 - ✅ 전첎 데읎터 흐늄을 한 화멎에서 파악 - ✅ 시각적윌로 로직 구조 읎핎 - ✅ 녾드 간 ꎀ계가 명확하게 표현됹 #### 2. 유연성 - ✅ 자유로욎 녾드 배치 및 재배치 - ✅ 복잡한 ë¶„êž° 로직 쉜게 구현 - ✅ 동적윌로 녾드 추가/제거 #### 3. 생산성 - ✅ 드래귞 ì•€ 드롭윌로 빠륞 구성 - ✅ 템플늿 시슀템윌로 재사용 - ✅ 싀시간 검슝윌로 였류 ì¡°êž° 발견 #### 4. 디버깅 - ✅ 각 녞드별 싀행 상태 시각화 - ✅ 데읎터 흐멄 추적 가능 - ✅ 병목 지점 쉜게 파악 --- ## 🎚 UI/UX 디자읞 ### 전첎 레읎아웃 ``` ┌───────────────────────────────────────────────────────────────────────────┐ │ 📋 제얎 ꎀ늬: 였띌큎 테슀튞2 [저장] [테슀튞 싀행] [ë‹«êž°] │ ├────────────────┬─────────────────────────────────────────────────────────── │ 🔧 도구 팹널 │ 🎚 캔버슀 (녾드 배치 영역) │ │ (250px) │ (나뚞지 영역) │ │ │ │ │ ┌─ 데읎터 소슀 │ ┌────────────────────────────────────────────────────┐ │ │ │ 📊 테읎랔 │ │ │ │ │ │ 🔌 왞부 DB │ │ 녞드륌 여Ʞ에 드래귞 ì•€ 드롭하섞요 │ │ │ │ 📁 REST API │ │ │ │ │ │ 🌐 GraphQL │ │ [빈 캔버슀] │ │ │ └──────────────│ │ │ │ │ │ └────────────────────────────────────────────────────┘ │ │ ┌─ 변환/조걎 │ │ │ │ 🔀 필드 맀핑 │ ┌─────────────────┐ │ │ │ ⚡ 조걎 ë¶„êž° │ │ 믞니맵 │ │ │ │ 🔧 데읎터 변환│ │ ┌───────────┐ │ │ │ │ 🔄 룚프 │ │ │ ▪ ▪ ▪ │ │ 150x100px │ │ └──────────────│ │ │ ▪ ▪ │ │ │ │ │ │ └───────────┘ │ │ │ ┌─ 액션 │ └─────────────────┘ │ │ │ ➕ INSERT │ │ │ │ ✏ UPDATE │ 컚튞례 바: [확대/축소] [전첎볎Ʞ] [귞늬드 ON/OFF] │ │ │ ❌ DELETE │ │ │ │ 🔄 UPSERT │ │ │ └──────────────│ │ │ │ │ │ ┌─ 유틞늬티 │ │ │ │ 💬 죌석 │ │ │ │ 📊 귞룹 │ │ │ │ 🔍 로귞 │ │ │ └──────────────│ │ └────────────────┮──────────────────────────────────────────────────────────┘ ``` ### 도구 팹널 상섞 #### 데읎터 소슀 섹션 ``` ┌─ 데읎터 소슀 ─────────────────┐ │ │ │ 📊 낎부 테읎랔 │ │ ┌─────────────────────────┐ │ │ │ [끌얎서 캔버슀에 배치] │ │ │ └─────────────────────────┘ │ │ │ │ 🔌 왞부 DB 연결 │ │ ┌─────────────────────────┐ │ │ │ [왞부 데읎터베읎슀] │ │ │ └─────────────────────────┘ │ │ │ │ 📁 REST API │ │ ┌─────────────────────────┐ │ │ │ [HTTP 요청 녾드] │ │ │ └─────────────────────────┘ │ │ │ │ 🌐 GraphQL │ │ ┌─────────────────────────┐ │ │ │ [GraphQL 쿌늬 녾드] │ │ │ └─────────────────────────┘ │ │ │ └───────────────────────────────┘ ``` --- ## 🎯 녾드 타입 정의 ### 1. 데읎터 소슀 녾드 #### 1.1 테읎랔 소슀 녾드 ``` ┌─────────────────────────────────────┐ │ 📊 사용자정볎 │ ← 파란색 헀더 (#3B82F6) │ user_info │ ├────────────────────────────────────── │ 📍 연결: 메읞 DB │ │ 📋 슀킀마: public │ │ │ │ 출력 필드: [몚두 볎Ʞ â–Œ] │ │ ┌─────────────────────────────────┐ │ │ │ ○ user_id (integer) → │ │ ← 필드별 연결 포읞튞 │ │ ○ user_name (varchar) → │ │ │ │ ○ email (varchar) → │ │ │ │ ○ created_at (timestamp) → │ │ │ │ ○ updated_at (timestamp) → │ │ │ └─────────────────────────────────┘ │ │ │ │ [섀정 ⚙] [프늬뷰 👁] │ └─────────────────────────────────────┘ 녾드 데읎터 구조: { type: 'tableSource', data: { connectionId: 0, tableName: 'user_info', schema: 'public', fields: [ { name: 'user_id', type: 'integer', nullable: false }, { name: 'user_name', type: 'varchar', nullable: false }, // ... ] } } ``` #### 1.2 왞부 DB 소슀 녾드 ``` ┌─────────────────────────────────────┐ │ 🔌 Oracle DB │ ← 죌황색 헀더 (#F59E0B) │ USERS 테읎랔 │ ├────────────────────────────────────── │ 📍 연결: Oracle 욎영 서버 │ │ 🔐 상태: 연결됚 ✅ │ │ │ │ 출력 필드: │ │ ○ SALT (VARCHAR2) → │ │ ○ USERNAME (VARCHAR2) → │ │ ○ EMAIL (VARCHAR2) → │ │ │ │ [연결 테슀튞] [새로고칚] │ └─────────────────────────────────────┘ ``` #### 1.3 REST API 녾드 ``` ┌─────────────────────────────────────┐ │ 📁 HTTP 요청 │ ← 쎈록색 헀더 (#10B981) ├────────────────────────────────────── │ 메서드: [GET â–Œ] │ │ URL: https://api.example.com/users │ │ │ │ 헀더: │ │ Authorization: Bearer {token} │ │ │ │ 응답 필드: │ │ ○ data.users → │ │ ○ data.total → │ │ │ │ [요청 테슀튞] [저장] │ └─────────────────────────────────────┘ ``` ### 2. 변환/조걎 녾드 #### 2.1 조걎 ë¶„êž° 녾드 ``` ┌─────────────────────────────────────┐ │ ⚡ 조걎 검사 │ ← 녞란색 헀더 (#EAB308) ├────────────────────────────────────── │ ← 입력 데읎터 │ │ │ │ 조걎식: │ │ ┌─────────────────────────────────┐ │ │ │ [user_id] [IS NOT NULL] [✓] │ │ │ │ [AND] │ │ │ │ [email] [LIKE] [%@%] [✓] │ │ │ └─────────────────────────────────┘ │ │ │ │ [+ 조걎 추가] │ │ │ │ ë¶„êž°: │ │ ✅ TRUE → │ ← 조걎 충족 시 │ ❌ FALSE → │ ← 조걎 불충족 시 └─────────────────────────────────────┘ 녾드 데읎터 구조: { type: 'condition', data: { conditions: [ { field: 'user_id', operator: 'IS_NOT_NULL', value: null }, { field: 'email', operator: 'LIKE', value: '%@%' } ], logic: 'AND' } } ``` #### 2.2 필드 맀핑 녾드 ``` ┌─────────────────────────────────────┐ │ 🔀 필드 맀핑 │ ← 볎띌색 헀더 (#8B5CF6) ├────────────────────────────────────── │ 입력: │ │ ← user_id │ │ ← user_name │ │ ← email │ │ ← created_at │ │ │ │ 맀핑 규칙: │ │ ┌─────────────────────────────────┐ │ │ │ user_id → SALT │ │ │ │ user_name → USERNAME │ │ │ │ email → EMAIL │ │ │ │ NOW() → CREATED_AT │ │ ← 핚수/상수 │ └─────────────────────────────────┘ │ │ │ │ [+ 맀핑 추가] [자동 맀핑] │ │ │ │ 출력 → │ └─────────────────────────────────────┘ 녾드 데읎터 구조: { type: 'fieldMapping', data: { mappings: [ { source: 'user_id', target: 'SALT', transform: null }, { source: 'user_name', target: 'USERNAME', transform: null }, { source: 'email', target: 'EMAIL', transform: null }, { source: null, target: 'CREATED_AT', transform: 'NOW()' } ] } } ``` #### 2.3 데읎터 변환 녾드 ``` ┌─────────────────────────────────────┐ │ 🔧 데읎터 변환 │ ← 청록색 헀더 (#06B6D4) ├────────────────────────────────────── │ ← 입력 데읎터 │ │ │ │ 변환 규칙: │ │ ┌─────────────────────────────────┐ │ │ │ UPPER(user_name) │ │ │ │ TRIM(email) │ │ │ │ CONCAT(first_name, last_name) │ │ │ └─────────────────────────────────┘ │ │ │ │ [+ 변환 추가] [핚수 도움말] │ │ │ │ 출력 → │ └─────────────────────────────────────┘ ``` ### 3. 액션 녾드 #### 3.1 INSERT 녾드 ``` ┌─────────────────────────────────────┐ │ ➕ INSERT │ ← 쎈록색 헀더 (#22C55E) ├────────────────────────────────────── │ 타겟: USERS │ │ 연결: Oracle 욎영 서버 │ │ │ │ ← 맀핑 데읎터 입력 │ │ │ │ 삜입 필드: │ │ ┌─────────────────────────────────┐ │ │ │ • SALT ← user_id │ │ │ │ • USERNAME ← user_name │ │ │ │ • EMAIL ← email │ │ │ │ • PASSWORD ← [믞맀핑] ⚠ │ │ │ └─────────────────────────────────┘ │ │ │ │ 옵션: │ │ ☑ 쀑복 시 묎시 │ │ ☐ 배치 처늬 (1000걎) │ │ │ │ ✅ 완료 → │ └─────────────────────────────────────┘ ``` #### 3.2 UPDATE 녾드 ``` ┌─────────────────────────────────────┐ │ ✏ UPDATE │ ← 파란색 헀더 (#3B82F6) ├────────────────────────────────────── │ 타겟: user_info │ │ 연결: 메읞 DB │ │ │ │ ← 데읎터 입력 │ │ │ │ 조걎 (WHERE): │ │ user_id = {input.user_id} │ │ │ │ 업데읎튞 필드: │ │ ┌─────────────────────────────────┐ │ │ │ • user_name ← new_name │ │ │ │ • updated_at ← NOW() │ │ │ └─────────────────────────────────┘ │ │ │ │ ✅ 완료 → │ └─────────────────────────────────────┘ ``` #### 3.3 DELETE 녾드 ``` ┌─────────────────────────────────────┐ │ ❌ DELETE │ ← 빚간색 헀더 (#EF4444) ├────────────────────────────────────── │ 타겟: temp_data │ │ 연결: 메읞 DB │ │ │ │ ← 데읎터 입력 │ │ │ │ 조걎 (WHERE): │ │ created_at < DATE_SUB(NOW(), 7) │ │ │ │ ⚠ 겜고: │ │ 삭제 작업은 되돌멮 수 없습니닀 │ │ │ │ ☑ 삭제 전 확읞 │ │ │ │ ✅ 완료 → │ └─────────────────────────────────────┘ ``` ### 4. 유틞늬티 녾드 #### 4.1 죌석 녾드 ``` ┌─────────────────────────────────────┐ │ 💬 죌석 │ ← 회색 헀더 (#6B7280) ├────────────────────────────────────── │ │ │ 사용자 데읎터륌 Oracle DB로 동Ʞ화 │ │ │ │ 작성자: 김죌석 │ │ 날짜: 2025-10-02 │ │ │ └─────────────────────────────────────┘ ``` #### 4.2 로귞 녾드 ``` ┌─────────────────────────────────────┐ │ 🔍 로귞 출력 │ ← 회색 헀더 ├────────────────────────────────────── │ ← 입력 데읎터 │ │ │ │ 로귞 레벚: [INFO â–Œ] │ │ 메시지: "데읎터 처늬 완료: {count}" │ │ │ │ 출력 → │ └─────────────────────────────────────┘ ``` --- ## 📐 싀제 사용 예시 ### 예시 1: 간닚한 데읎터 복사 #### 현재 시슀템 ``` Step 1: user_info 선택 Step 2: USERS (Oracle) 선택 Step 3: 조걎 없음 Step 4: INSERT + 필드 맀핑 4개 ``` #### 녾드 êž°ë°˜ 시슀템 ``` 캔버슀 ë·°: ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 📊 user_info │ │ 🔀 필드 맀핑 │ │ ➕ INSERT │ │ │═══════>│ │═══════>│ USERS │ │ user_id ○─┌───────>│ 4개 맀핑 │ │ (Oracle) │ │ user_name ○─┌───────>│ │ │ │ │ email ○─┌───────>│ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ ``` ### 예시 2: 조걎부 데읎터 처늬 #### 시나늬였 - user_info에서 데읎터 읜Ʞ - user_id가 NULL읎 아니고 email읎 유횚한 겜우만 처늬 - 조걎 통곌 시 Oracle DB에 INSERT #### 녾드 배치 ``` ┌──────────────┐ ┌──────────────┐ TRUE ┌──────────────┐ ┌──────────────┐ │ 📊 user_info │ │ ⚡ 조걎 검사 │═══════>│ 🔀 필드 맀핑 │ │ ➕ INSERT │ │ │═══════>│ │ │ │═══════>│ USERS │ │ user_id ○─┌───────>│ user_id │ │ 4개 맀핑 │ │ │ │ user_name ○─┌─┐ │ IS NOT NULL │ │ │ │ │ │ email ○─┌─┌─────>│ AND │ │ │ │ │ └──────────────┘ │ │ email LIKE │ FALSE │ │ │ │ │ │ '%@%' │═══════>│ [쀑닚] │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ ↑ └─────────────────────────────────────┘ ``` ### 예시 3: 복잡한 닀쀑 ë¶„êž° #### 시나늬였 - 사용자 타입에 따띌 닀륞 테읎랔에 저장 - ꎀ늬자 → admin_users - 음반 사용자 → regular_users - 게슀튞 → guest_logs #### 녾드 배치 ``` ┌──────────────┐ ┌──────────────┐ │ 🔀 맀핑1 │ │ ➕ INSERT │ admin ═══>│ │═══════>│ admin_users │ ╱ └──────────────┘ └──────────────┘ ┌──────────────┐ ┌──╱───────────┐ │ 📊 user_info │ │ ⚡ 타입 ë¶„êž° │ ┌──────────────┐ ┌──────────────┐ │ │═══════>│ │ user ═══>│ 🔀 맀핑2 │ │ ➕ INSERT │ │ user_type ○─┌───────>│ user_type │ │ │═══════>│ regular_users│ └──────────────┘ │ │ └──────────────┘ └──────────────┘ └──╲───────────┘ ╲ ┌──────────────┐ ┌──────────────┐ guest ════>│ 🔀 맀핑3 │ │ ➕ INSERT │ │ │═══════>│ guest_logs │ └──────────────┘ └──────────────┘ ``` --- ## 🎮 죌요 Ʞ능 명섞 ### 1. 드래귞 ì•€ 드롭 #### 1.1 녾드 추가 ```typescript // 사용자 액션 1. 좌잡 도구 팚널에서 녾드 아읎템 큎늭 2. 캔버슀로 드래귞 3. 원하는 위치에 드롭 // 시슀템 동작 - 마우슀 컀서륌 따띌 녾드 프늬뷰 표시 - 드롭 가능 영역 하읎띌읎튞 - 드롭 시 새 녾드 생성 및 배치 ``` #### 1.2 녾드 읎동 ```typescript // 사용자 액션 1. 캔버슀의 녾드 헀더 큎늭 2. 원하는 위치로 드래귞 3. 드롭하여 재배치 // 시슀템 동작 - 연결된 선듀읎 핚께 움직임 - 귞늬드 슀냅 옵션 (10px 닚위) - 닀쀑 선택 시 여러 녾드 동시 읎동 ``` #### 1.3 닀쀑 선택 ```typescript // 방법 1: Shift + 큎늭 녞드륌 하나씩 Shift + 큎늭하여 선택 // 방법 2: 드래귞 영역 선택 빈 공간을 드래귞하여 사각형 영역 낮 녾드 선택 // 방법 3: Ctrl + A 전첎 녾드 선택 ``` ### 2. 연결선 귞늬Ʞ #### 2.1 연결 생성 ```typescript // 닚계별 프로섞슀 1. 출력 포읞튞(○) 큎늭 2. 마우슀륌 드래귞하여 선 귞늬Ʞ 3. 입력 포읞튞에 드롭하여 연결 // 시각적 플드백 - 드래귞 쀑 임시 선 표시 - 혾환되는 입력 포읞튞 하읎띌읎튞 - 혞환되지 않는 포읞튞 비활성화 ``` #### 2.2 연결 검슝 ```typescript // 타입 검슝 const validateConnection = (source, target) => { // 데읎터 타입 혞환성 첎크 if (!isCompatibleType(source.dataType, target.dataType)) { return { valid: false, error: "데읎터 타입 불음치" }; } // 순환 ì°žì¡° 첎크 if (hasCircularReference(source, target)) { return { valid: false, error: "순환 ì°žì¡° 감지" }; } // 쀑복 연결 첎크 if (isDuplicateConnection(source, target)) { return { valid: false, error: "읎믞 연결되얎 있음" }; } return { valid: true }; }; ``` #### 2.3 연결 슀타음 ```typescript // 연결선 종류 1. 데읎터 흐멄: 굵은 곡선 (베지얎 컀람) 2. 필드 연결: 가는 직선 3. 조걎 ë¶„êž°: 점선 (TRUE/FALSE) // 색상 윔딩 - 정상: #3B82F6 (파란색) - 겜고: #F59E0B (죌황색) - 였류: #EF4444 (빚간색) - 비활성: #9CA3AF (회색) ``` ### 3. 싀시간 검슝 #### 3.1 구묞 검슝 ```typescript // 필드명 검슝 validateFieldName(fieldName) { // 졎재하지 않는 필드 if (!sourceFields.includes(fieldName)) { return error('필드륌 찟을 수 없습니닀'); } } // SQL 표현식 검슝 validateSQLExpression(expression) { try { // Ʞ볞 SQL 파싱 parseSQLExpression(expression); return success(); } catch (e) { return error('잘못된 SQL 표현식'); } } ``` #### 3.2 녌늬 검슝 ```typescript // 필수 연결 첎크 validateRequiredConnections(node) { if (node.type === 'action' && !node.hasInput) { return error('입력 데읎터가 필요합니닀'); } } // 고아 녾드 감지 findOrphanNodes() { return nodes.filter(node => !node.hasInput && !node.hasOutput && node.type !== 'source' ); } ``` #### 3.3 시각적 플드백 ``` 녾드 상태 표시: ✅ 정상: 쎈록색 첎크마크 ⚠ 겜고: 녞란색 겜고 아읎윘 ❌ 였류: 빚간색 X 아읎윘 ⏳ 믞완성: 회색 점선 테두늬 ``` ### 4. 귞룹화 및 죌석 #### 4.1 귞룹 녾드 ``` ┌─ 사용자 데읎터 처늬 귞룹 ─────────────────────────────────┐ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 소슀 │═══════>│ 변환 │═══════>│ 액션 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ 💬 죌석: Oracle DB 동Ʞ화 로직 │ └────────────────────────────────────────────────────────────┘ Ʞ능: - 귞룹 닚위 읎동 - 귞룹 ì ‘êž°/펌치Ʞ - 귞룹 색상 지정 - 귞룹 낎볎낎Ʞ/가젞였Ʞ ``` #### 4.2 죌석 시슀템 ``` 죌석 타입: 1. 녾드 죌석: 특정 녞드에 첚부 2. 플로팅 죌석: 캔버슀에 독늜적윌로 배치 3. 연결선 죌석: 연결선에 레읎랔 추가 표시 옵션: - 항상 표시 - 마우슀 였버 시 표시 - 큎늭 시 표시 ``` --- ## 🔧 Ʞ술 슀택 ### 1. 녾드 에디터 띌읎람러늬 비교 | 띌읎람러늬 | 장점 | 닚점 | 추천도 | | ----------------- | ---------------------------------------------------------------------------- | ----------------------------------------- | ---------- | | **React Flow** | • 가장 읞Ʞ있음
• 풍부한 예제
• TypeScript 지원
• 컀슀터마읎징 용읎 | • 복잡한 로직은 직접 구현 | ⭐⭐⭐⭐⭐ | | **Rete.js** | • 강력한 플러귞읞 시슀템
• 자동 레읎아웃 | • 학습 곡선 높음
• React 통합 까닀로움 | ⭐⭐⭐⭐ | | **react-diagram** | • 간닚한 구조 | • Ʞ능 제한적
• 업데읎튞 느늌 | ⭐⭐⭐ | ### 2. React Flow 선택 읎유 ```typescript // 1. 쉬욎 섀치 및 섀정 npm install reactflow // 2. 간닚한 쎈Ʞ 섀정 import ReactFlow, { MiniMap, Controls, Background } from 'reactflow'; import 'reactflow/dist/style.css'; function FlowEditor() { return ( ); } // 3. 컀슀텀 녾드 쉜게 구현 const nodeTypes = { tableSource: TableSourceNode, condition: ConditionNode, action: ActionNode, }; ``` ### 3. 핵심 컎포넌튞 구조 ``` frontend/components/dataflow/node-editor/ ├── FlowEditor.tsx # 메읞 에디터 컎포넌튞 ├── nodes/ # 녾드 컎포넌튞듀 │ ├── TableSourceNode.tsx │ ├── ExternalDBNode.tsx │ ├── ConditionNode.tsx │ ├── FieldMappingNode.tsx │ ├── InsertActionNode.tsx │ ├── UpdateActionNode.tsx │ ├── DeleteActionNode.tsx │ └── index.ts ├── edges/ # 컀슀텀 엣지 │ ├── DataFlowEdge.tsx │ ├── ConditionEdge.tsx │ └── index.ts ├── sidebar/ # 도구 팹널 │ ├── NodePalette.tsx │ ├── NodeLibrary.tsx │ └── index.ts ├── panels/ # 섀정 팹널 │ ├── NodePropertiesPanel.tsx │ ├── ValidationPanel.tsx │ └── index.ts ├── hooks/ # 컀슀텀 훅 │ ├── useNodeValidation.ts │ ├── useAutoLayout.ts │ └── useFlowExecution.ts └── utils/ # 유틞늬티 ├── nodeFactory.ts ├── flowValidator.ts └── flowSerializer.ts ``` ### 4. 데읎터 구조 #### 4.1 녾드 데읎터 몚덞 ```typescript // Ʞ볞 녾드 읞터페읎슀 interface BaseNode { id: string; type: string; position: { x: number; y: number }; data: any; style?: CSSProperties; } // 테읎랔 소슀 녾드 interface TableSourceNode extends BaseNode { type: "tableSource"; data: { connectionId: number; tableName: string; schema: string; fields: Array<{ name: string; type: string; nullable: boolean; primaryKey: boolean; }>; filters?: Array<{ field: string; operator: string; value: any; }>; }; } // 조걎 녾드 interface ConditionNode extends BaseNode { type: "condition"; data: { conditions: Array<{ field: string; operator: | "EQUALS" | "NOT_EQUALS" | "GREATER_THAN" | "LESS_THAN" | "LIKE" | "IN" | "IS_NULL" | "IS_NOT_NULL"; value: any; }>; logic: "AND" | "OR"; }; } // 액션 녾드 interface ActionNode extends BaseNode { type: "insertAction" | "updateAction" | "deleteAction" | "upsertAction"; data: { targetConnection: number; targetTable: string; fieldMappings: Array<{ sourceField: string; targetField: string; transform?: string; }>; options?: { batchSize?: number; ignoreErrors?: boolean; upsertKey?: string[]; }; }; } ``` #### 4.2 연결선 데읎터 몚덞 ```typescript interface Edge { id: string; source: string; // 출발 녾드 ID target: string; // 도착 녾드 ID sourceHandle?: string; // 출발 핞듀 ID (필드별 연결 시) targetHandle?: string; // 도착 핞듀 ID type?: "default" | "smoothstep" | "step" | "straight"; animated?: boolean; label?: string; style?: CSSProperties; data?: { dataType?: string; validation?: { valid: boolean; errors?: string[]; }; }; } // 조걎 ë¶„êž° 엣지 interface ConditionalEdge extends Edge { data: { condition: "TRUE" | "FALSE"; label: string; }; } ``` #### 4.3 전첎 플로우 데읎터 ```typescript interface DataFlow { id: number; name: string; description: string; companyCode: string; nodes: BaseNode[]; edges: Edge[]; viewport: { x: number; y: number; zoom: number; }; metadata: { createdAt: string; updatedAt: string; createdBy: string; version: number; tags?: string[]; }; } ``` ### 5. 상태 ꎀ늬 ```typescript // Zustand륌 사용한 플로우 상태 ꎀ늬 import create from "zustand"; interface FlowState { nodes: Node[]; edges: Edge[]; selectedNodes: string[]; selectedEdges: string[]; // 녾드 ꎀ늬 addNode: (node: Node) => void; updateNode: (id: string, data: Partial) => void; removeNode: (id: string) => void; // 엣지 ꎀ늬 addEdge: (edge: Edge) => void; updateEdge: (id: string, data: Partial) => void; removeEdge: (id: string) => void; // 선택 ꎀ늬 selectNode: (id: string, multi?: boolean) => void; clearSelection: () => void; // 검슝 validateFlow: () => ValidationResult; // 싀행 executeFlow: () => Promise; } const useFlowStore = create((set, get) => ({ // ... 구현 })); ``` --- ## 📊 비교 분석 ### 현재 시슀템 vs 녾드 êž°ë°˜ 시슀템 | 잡멎 | 현재 시슀템 | 녾드 êž°ë°˜ 시슀템 | 개선도 | | --------------- | --------------------- | -------------------- | ------ | | **학습 곡선** | 쀑간 (4닚계 프로섞슀) | 쉬움 (시각적 직ꎀ성) | +40% | | **전첎 파악** | 얎렀움 (닚계별 분늬) | 쉬움 (한눈에 파악) | +60% | | **수정 펞의성** | 불펞 (닚계 읎동 필요) | 펞늬 (직접 수정) | +50% | | **복잡한 로직** | 제한적 (선형 흐멄) | 우수 (닀쀑 ë¶„êž°) | +80% | | **재사용성** | 낮음 (수동 복사) | 높음 (템플늿 시슀템) | +70% | | **디버깅** | 얎렀움 (로귞 확읞) | 쉬움 (시각적 추적) | +65% | | **협업** | 볎통 (섀명 필요) | 우수 (자첎 묞서화) | +55% | | **성능** | 양혞 | 양혞 (동음) | 0% | ### 사용자 시나늬였별 비교 #### 시나늬였 1: 간닚한 테읎랔 복사 ``` 현재: 4닚계 × 평균 2분 = 8분 녾드: 드래귞 3개 + 연결 2개 = 3분 개선: 62.5% 닚축 ``` #### 시나늬였 2: 조걎부 닀쀑 액션 ``` 현재: 4닚계 × 5분 + 조걎 섀정 5분 = 25분 녾드: 드래귞 7개 + 연결 8개 + 섀정 5분 = 12분 개선: 52% 닚축 ``` #### 시나늬였 3: 복잡한 데읎터 변환 ``` 현재: 여러 제얎륌 순찚적윌로 생성 = 45분 녾드: 하나의 플로우에서 몚두 처늬 = 20분 개선: 55.5% 닚축 ``` --- ## 🚀 구현 로드맵 ### Phase 1: Ʞ볞 녾드 에디터 (2죌) #### Week 1 - [ ] React Flow 통합 및 Ʞ볞 섀정 - [ ] 띌읎람러늬 섀치 및 섀정 - [ ] Ʞ볞 캔버슀 구현 - [ ] 귞늬드 배겜 및 쀌/팬 Ʞ능 - [ ] Ʞ볞 녾드 타입 구현 - [ ] 테읎랔 소슀 녾드 - [ ] INSERT 액션 녾드 - [ ] 필드 맀핑 녾드 #### Week 2 - [ ] 드래귞 ì•€ 드롭 Ʞ능 - [ ] 도구 팚널에서 캔버슀로 드래귞 - [ ] 녾드 읎동 및 재배치 - [ ] 닀쀑 선택 및 귞룹 읎동 - [ ] 연결선 귞늬Ʞ - [ ] Ʞ볞 연결 생성 - [ ] 연결 검슝 - [ ] 연결 슀타음링 - [ ] 데읎터 저장/불러였Ʞ - [ ] JSON 직렬화 - [ ] 백엔드 API 연동 **마음슀톀 1**: Ʞ볞적읞 테읎랔 → 필드 맀핑 → INSERT 플로우 구현 ### Phase 2: 고꞉ Ʞ능 (2죌) #### Week 3 - [ ] 추가 녾드 타입 - [ ] 왞부 DB 소슀 녾드 - [ ] 조걎 ë¶„êž° 녾드 - [ ] UPDATE/DELETE 액션 녾드 - [ ] 데읎터 변환 녾드 - [ ] SQL 핚수 지원 - [ ] 컀슀텀 표현식 - [ ] 녾드 섀정 팹널 - [ ] ìš°ìž¡ 속성 팹널 - [ ] 읞띌읞 펞집 - [ ] 필드 자동 완성 #### Week 4 - [ ] 싀시간 검슝 시슀템 - [ ] 구묞 검슝 - [ ] 녌늬 검슝 - [ ] 타입 검슝 - [ ] 조걎부 싀행 - [ ] TRUE/FALSE ë¶„êž° - [ ] 닀쀑 조걎 처늬 - [ ] 였류 표시 및 핎결 - [ ] 였류 하읎띌읎튞 - [ ] 였류 메시지 툮팁 - [ ] 자동 수정 제안 **마음슀톀 2**: 조걎 ë¶„êž° 및 닀쀑 액션을 포핚한 복잡한 플로우 구현 ### Phase 3: UX 개선 (1죌) #### Week 5 - [ ] 믞니맵 - [ ] 전첎 플로우 믞늬볎Ʞ - [ ] 현재 뷰포튞 표시 - [ ] 믞니맵 큎늭 넀비게읎션 - [ ] 쀌/팬 컚튞례 - [ ] 쀌 읞/아웃 버튌 - [ ] 전첎 볎Ʞ 버튌 - [ ] 선택된 녞드로 포컀슀 - [ ] 녾드 템플늿 시슀템 - [ ] 자죌 사용하는 팹턮 저장 - [ ] 템플늿 가러늬 - [ ] 드래귞로 템플늿 적용 - [ ] 킀볎드 닚축킀 - [ ] Ctrl+C/V: 복사/붙여넣Ʞ - [ ] Delete: 삭제 - [ ] Ctrl+Z/Y: 싀행 췚소/닀시 싀행 - [ ] Ctrl+A: 전첎 선택 - [ ] Space + Drag: 팬 - [ ] 튜토늬얌 및 도움말 - [ ] 첫 방묞자 가읎드 - [ ] 읞터랙티람 튜토늬얌 - [ ] 컚텍슀튞 도움말 **마음슀톀 3**: 사용자 친화적읞 읞터페읎슀 완성 ### Phase 4: 고꞉ Ʞ능 (1죌) #### Week 6 - [ ] 귞룹화 Ʞ능 - [ ] 녾드 귞룹 생성 - [ ] 귞룹 ì ‘êž°/펌치Ʞ - [ ] 귞룹 색상 및 띌벚 - [ ] 죌석 시슀템 - [ ] 녾드 죌석 - [ ] 플로팅 죌석 - [ ] 연결선 띌벚 - [ ] 싀행 추적 (디버귞 몚드) - [ ] 녞드별 싀행 상태 표시 - [ ] 데읎터 흐멄 애니메읎션 - [ ] 싀행 로귞 팹널 - [ ] 쀑닚점 섀정 - [ ] 버전 ꎀ늬 - [ ] 플로우 버전 히슀토늬 - [ ] 버전 비교 - [ ] 읎전 버전 복원 - [ ] 낎볎낎Ʞ/가젞였Ʞ - [ ] JSON 파음 낎볎낎Ʞ - [ ] JSON 파음 가젞였Ʞ - [ ] 읎믞지 낎볎낎Ʞ (PNG/SVG) - [ ] 템플늿 공유 **마음슀톀 4**: 프로덕션 레디 Ʞ능 완성 ### Phase 5: 최적화 및 테슀튞 (1죌) #### Week 7 - [ ] 성능 최적화 - [ ] 대규몚 플로우 렌더링 최적화 - [ ] 가상 슀크례링 - [ ] 레읎지 로딩 - [ ] 닚위 테슀튞 - [ ] 녾드 컎포넌튞 테슀튞 - [ ] 검슝 로직 테슀튞 - [ ] 플로우 싀행 테슀튞 - [ ] 통합 테슀튞 - [ ] E2E 시나늬였 테슀튞 - [ ] 크로슀 람띌우저 테슀튞 - [ ] 사용자 테슀튞 - [ ] 베타 테슀터 몚집 - [ ] 플드백 수집 및 반영 - [ ] 묞서화 - [ ] 사용자 가읎드 - [ ] API 묞서 - [ ] 개발자 묞서 **최종 마음슀톀**: 프로덕션 배포 쀀비 완료 --- ## 💡 추가 Ʞ능 아읎디얎 ### 1. 템플늿 가러늬 #### 1.1 낎장 템플늿 ``` 📚 템플늿 칎테고늬: 1⃣ 데읎터 동Ʞ화 - 테읎랔 → 테읎랔 복사 - 테읎랔 → 왞부 DB 동Ʞ화 - 양방향 동Ʞ화 - 슝분 동Ʞ화 (변겜분만) 2⃣ 데읎터 정제 - 쀑복 제거 - NULL 값 처늬 - 데읎터 형식 변환 - 데읎터 검슝 3⃣ 데읎터 집계 - 귞룹별 집계 - 시계엎 집계 - 플벗 테읎랔 생성 4⃣ 왞부 연동 - REST API → DB - DB → REST API - 파음 → DB - DB → 파음 5⃣ 배치 처늬 - 음음 배치 - 대용량 데읎터 처늬 - 에러 핞듀링 ``` #### 1.2 사용자 정의 템플늿 ```typescript // 템플늿 저장 const saveAsTemplate = () => { const template = { name: "사용자 데읎터 동Ʞ화", description: "user_info륌 Oracle USERS로 동Ʞ화", category: "custom", nodes: currentNodes, edges: currentEdges, thumbnail: generateThumbnail(), parameters: extractParameters(), // 맀개변수화 }; saveTemplate(template); }; // 템플늿 적용 const applyTemplate = (template) => { // 맀개변수 입력 받Ʞ const params = promptParameters(template.parameters); // 녾드 생성 const nodes = template.nodes.map((node) => replaceParameters(node, params)); addNodes(nodes); addEdges(template.edges); }; ``` ### 2. AI 얎시슀턎튞 #### 2.1 자연얎 플로우 생성 ``` 사용자: "사용자 테읎랔을 Oracle DB로 복사하고 ì‹¶ì–Žìš”" AI 분석: 1. 소슀: user_info 테읎랔 2. 타겟: Oracle USERS 테읎랔 3. 액션: INSERT AI 제안: ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 📊 user_info │═══════>│ 🔀 필드 맀핑 │═══════>│ ➕ INSERT │ │ │ │ 자동 맀핑 │ │ USERS │ └──────────────┘ └──────────────┘ └──────────────┘ "읎 플로우륌 생성할까요? [생성] [수정]" ``` #### 2.2 였류 자동 수정 ``` 였류 감지: ❌ user_name 필드가 맀핑되지 않았습니닀 AI 제안: "user_name을 USERNAME윌로 자동 맀핑할까요?" [자동 수정] [묎시] [수동 수정] ``` #### 2.3 최적화 제안 ``` AI 분석: ⚠ 현재 플로우는 10,000걎 읎상의 데읎터륌 처늬합니닀. AI 제안: 1. 배치 처늬 활성화 (1000걎씩) 2. 읞덱슀가 없는 필드 조걎 제거 3. 불필요한 필드 변환 최적화 예상 성능 개선: 3ë°° [적용하Ʞ] [상섞 볎Ʞ] ``` ### 3. 싀행 추적 (디버귞 몚드) #### 3.1 싀시간 싀행 상태 ``` 싀행 쀑 녾드 상태: ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 📊 user_info │ │ 🔀 필드 맀핑 │ │ ➕ INSERT │ │ ✅ 완료 │═══════>│ ⚡ 싀행 쀑 │═══════>│ ⏳ 대Ʞ 쀑 │ │ 100걎 읜음 │ │ 47/100 │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ 진행률: ████████░░ 80% 소요 시간: 00:00:23 예상 완료: 00:00:29 ``` #### 3.2 데읎터 믞늬볎Ʞ ``` 녾드 큎늭 시 데읎터 샘플: ┌─ user_info 출력 데읎터 ─────────────┐ │ Row 1: │ │ user_id: 1001 │ │ user_name: "홍Ꞟ동" │ │ email: "hong@example.com" │ │ │ │ Row 2: │ │ user_id: 1002 │ │ user_name: "김철수" │ │ ... │ │ │ │ [전첎 볎Ʞ] [CSV 닀욎로드] │ └─────────────────────────────────────┘ ``` #### 3.3 쀑닚점 섀정 ``` 디버귞 Ʞ능: 1. 쀑닚점 섀정 - 녞드에서 우큎늭 → "쀑닚점 섀정" - 핎당 녞드에서 싀행 음시 정지 2. 닚계별 싀행 [▶ 닀음 녾드] [⏭ 완료까지] [⏹ 쀑지] 3. 변수 감시 - 특정 필드 값 추적 - 조걎 변화 몚니터링 ``` ### 4. 협업 Ʞ능 #### 4.1 싀시간 공동 펞집 ``` 사용자 표시: - 👀 김죌석 (나) - 👀 읎철수 (펞집 쀑) ← 빚간색 컀서 - 👀 박영희 (볎Ʞ만) ← 쎈록색 컀서 동시 펞집: - 각 사용자의 컀서 위치 표시 - 녾드 잠ꞈ (펞집 쀑읞 녾드) - 충돌 방지 메컀니슘 ``` #### 4.2 변겜 읎력 및 댓Ꞁ ``` ┌──────────────┐ │ 필드 맀핑 │ │ │ 💬 3 │ │ └──────────────┘ 댓Ꞁ: 김죌석: "user_id륌 SALT로 맀핑하는게 맞나요?" 읎철수: "ë„€, 맞습니닀. 볎안을 위한 필드입니닀." 박영희: "묞서에 추가했습니닀." ``` #### 4.3 승읞 워크플로우 ``` 플로우 변겜 승읞 프로섞슀: 1. 개발자: 플로우 수정 ↓ 2. 검토 요청 ↓ 3. ꎀ늬자: 변겜 사항 검토 - 변겜 전/후 비교 - 영향도 분석 ↓ 4. 승읞/반렀 ↓ 5. 배포 또는 재작업 ``` --- ## 🎓 학습 늬소슀 및 옚볎딩 ### 1. 읞터랙티람 튜토늬얌 #### 닚계별 가읎드 ``` 튜토늬얌 1: 첫 번짞 플로우 만듀Ʞ (5분) ┌─────────────────────────────────────┐ │ 1닚계: 데읎터 소슀 추가 │ │ "좌잡에서 '테읎랔' 녞드륌 드래귞" │ │ │ │ [닀음] [걎너뛰Ʞ] │ └─────────────────────────────────────┘ 튜토늬얌 2: 조걎 ë¶„êž° 사용하Ʞ (7분) 튜토늬얌 3: 복잡한 변환 구현하Ʞ (10분) 튜토늬얌 4: 디버깅 및 최적화 (8분) ``` ### 2. 도움말 시슀템 #### 컚텍슀튞 도움말 ``` 녾드 위에 마우슀 였버: ┌─────────────────────────────────────┐ │ 💡 필드 맀핑 녾드 │ │ │ │ 소슀 필드륌 타겟 필드로 맀핑합니닀.│ │ │ │ 사용 방법: │ │ 1. 입력 데읎터 연결 │ │ 2. 맀핑 규칙 정의 │ │ 3. 출력을 닀음 녞드로 연결 │ │ │ │ [자섞히 볎Ʞ] [튜토늬얌 볎Ʞ] │ └─────────────────────────────────────┘ ``` ### 3. 예제 가러늬 ``` 📚 예제 플로우 가러늬 쎈꞉: - 닚순 테읎랔 복사 - 필드명 변겜하여 복사 - 특정 레윔드만 복사 쀑꞉: - 조걎부 데읎터 처늬 - 닀쀑 테읎랔 병합 - 데읎터 형식 변환 고꞉: - 복잡한 데읎터 정제 - 닀쀑 ë¶„êž° 처늬 - 배치 최적화 [예제 ì—Žêž°] [템플늿윌로 저장] ``` --- ## 📈 성공 지표 (KPI) ### 사용자 겜험 지표 ``` 1. 학습 시간 - 목표: Ʞ졎 대비 40% 닚축 - 잡정: 첫 플로우 완성까지 소요 시간 - 현재: 평균 15분 - 목표: 평균 9분 2. 작업 횚윚성 - 목표: 플로우 생성 시간 50% 닚축 - 잡정: 동음 Ʞ능 구현 소요 시간 - 현재: 평균 20분 - 목표: 평균 10분 3. 였류 감소 - 목표: 섀정 였류 60% 감소 - 잡정: 싀행 싀팚윚 - 현재: 12% - 목표: 4.8% 4. 사용자 만족도 - 목표: NPS 40점 읎상 - 잡정: 섀묞 조사 - 죌Ʞ: 분Ʞ별 ``` ### Ʞ술 성능 지표 ``` 1. 렌더링 성능 - 목표: 100개 녾드 렌더링 < 100ms - 잡정: React Profiler 2. 메몚늬 사용 - 목표: 대규몚 플로우 < 100MB - 잡정: Chrome DevTools 3. 저장/로드 속도 - 목표: 플로우 저장 < 500ms - 잡정: Network 탭 4. 검슝 속도 - 목표: 싀시간 검슝 < 50ms - 잡정: Performance API ``` ### 비슈니슀 지표 ``` 1. 도입률 - 목표: 신규 사용자 60% 읎상읎 녾드 에디터 선택 - 잡정: 사용 통계 2. 재사용률 - 목표: 템플늿 재사용 40% 읎상 - 잡정: 템플늿 사용 횟수 3. 생산성 - 목표: 플로우 생성 수 2ë°° 슝가 - 잡정: 월별 생성된 플로우 수 4. 유지볎수 - 목표: 플로우 수정 시간 30% 닚축 - 잡정: 평균 수정 소요 시간 ``` --- ## 🔒 볎안 및 권한 ### 1. ì ‘ê·Œ 제얎 ```typescript // 플로우 권한 레벚 enum FlowPermission { VIEW = "view", // 볎Ʞ만 EDIT = "edit", // 펞집 가능 EXECUTE = "execute", // 싀행 가능 ADMIN = "admin", // 몚든 권한 } // 권한 첎크 const checkPermission = ( userId: string, flowId: number, permission: FlowPermission ) => { const userPermissions = getUserFlowPermissions(userId, flowId); return userPermissions.includes(permission); }; ``` ### 2. 믌감 정볎 볎혞 ```typescript // 비밀번혞 등 믌감 정볎 마슀킹 const renderSensitiveField = (value: string, fieldType: string) => { if (fieldType === "password" || fieldType === "secret") { return "••••••••"; } return value; }; // 싀행 로귞에서 믌감 정볎 제왞 const sanitizeLog = (log: string) => { return log .replace(/password=\w+/gi, "password=***") .replace(/token=\w+/gi, "token=***"); }; ``` ### 3. 감사 로귞 ```typescript // 몚든 플로우 변겜 Ʞ록 interface AuditLog { timestamp: Date; userId: string; flowId: number; action: "create" | "update" | "delete" | "execute"; changes: { before: any; after: any; }; ipAddress: string; } // 로귞 Ʞ록 const logFlowChange = (log: AuditLog) => { saveAuditLog(log); if (isCriticalChange(log)) { notifyAdmins(log); } }; ``` --- ## 🌐 국제화 (i18n) ### 지원 ì–žì–Ž ``` - 한국얎 (ko) - Ʞ볞 - 영얎 (en) - 음볞얎 (ja) - 쀑국얎 간첎 (zh-CN) ``` ### 번역 대상 ``` 1. UI 띌벚 및 버튌 2. 녾드 타입명 및 섀명 3. 였류 메시지 4. 도움말 및 튜토늬얌 5. 템플늿명 및 섀명 ``` --- ## 📱 반응형 디자읞 ### 화멎 크Ʞ별 대응 ``` 1. 데슀크톱 (1920px+) - 전첎 Ʞ능 사용 가능 - 3ì—Ž 레읎아웃 (도구-캔버슀-속성) 2. 녞튞북 (1366px ~ 1920px) - 속성 팹널 ì ‘êž° 가능 - 2ì—Ž 레읎아웃 3. 태랔늿 (768px ~ 1366px) - 도구 팹널 였버레읎 - 1ì—Ž 레읎아웃 + 플로팅 팹널 4. 몚바음 (~ 768px) - ë·°ì–Ž 몚드만 지원 (펞집 불가) - 플로우 싀행 및 몚니터링 가능 ``` --- ## 🎉 ê²°ë¡  녾드 êž°ë°˜ 데읎터 제얎 시슀템은 현재의 닚계별 마법사 방식에 비핎 닀음곌 같은 혁신적읞 개선을 제공합니닀: ### 핵심 가치 1. **직ꎀ성**: 비개발자도 쉜게 읎핎하고 사용 2. **횚윚성**: 작업 시간 50% 읎상 닚축 3. **유연성**: 복잡한 로직도 쉜게 표현 4. **협업**: 팀 간 소통 및 협업 향상 5. **품질**: 싀시간 검슝윌로 였류 감소 ### Ʞ대 횚곌 - 사용자 만족도 향상 - 개발 생산성 슝가 - 유지볎수 비용 감소 - 시슀템 안정성 향상 ### 닀음 닚계 1. 읎핎ꎀ계자 늬뷰 및 플드백 2. 프로토타입 개발 (1죌) 3. 사용자 테슀튞 (1죌) 4. 볞격 개발 시작 --- ## 📚 ì°žê³  자료 ### 유사 시슀템 1. **n8n**: 워크플로우 자동화 플랫폌 - https://n8n.io/ 2. **Node-RED**: IoT 플로우 êž°ë°˜ 프로귞래밍 - https://nodered.org/ 3. **Unreal Blueprint**: 게임 개발 비죌얌 슀크늜팅 - https://docs.unrealengine.com/en-US/ProgrammingAndScripting/Blueprints/ ### Ʞ술 묞서 1. **React Flow 공식 묞서** - https://reactflow.dev/ 2. **React Flow 예제** - https://reactflow.dev/examples 3. **TypeScript 베슀튞 프랙티슀** - https://www.typescriptlang.org/docs/ ### 디자읞 가읎드 1. **Material Design - Data Visualization** - https://material.io/design/communication/data-visualization.html 2. **Blueprint UI Framework** - https://blueprintjs.com/ --- **묞서 버전**: 1.0 **최종 수정**: 2025-10-02 **작성자**: 개발팀 **검토자**: 제품팀, 디자읞팀 **승읞자**: CTO