# 노드 플로우 데이터 소스 설정 가이드 ## 개요 노드 플로우 편집기에서 **테이블 소스 노드**와 **외부 DB 소스 노드**에 데이터 소스 타입을 설정할 수 있습니다. 이제 버튼에서 전달된 데이터를 사용할지, 아니면 테이블의 전체 데이터를 직접 조회할지 선택할 수 있습니다. ## 지원 노드 ### 1. 테이블 소스 노드 (내부 DB) - **위치**: 노드 팔레트 > 데이터 소스 > 테이블 소스 - **용도**: 내부 데이터베이스의 테이블 데이터 조회 ### 2. 외부 DB 소스 노드 - **위치**: 노드 팔레트 > 데이터 소스 > 외부 DB 소스 - **용도**: 외부 데이터베이스의 테이블 데이터 조회 ## 데이터 소스 타입 ### 1. 컨텍스트 데이터 (기본값) ``` 💡 컨텍스트 데이터 모드 버튼 실행 시 전달된 데이터(폼 데이터, 테이블 선택 항목 등)를 사용합니다. 사용 예시: • 폼 데이터: 1개 레코드 • 테이블 선택: N개 레코드 ``` **특징:** - ✅ 버튼에서 제어한 데이터만 처리 - ✅ 성능 우수 (필요한 데이터만 사용) - ✅ 사용자가 선택한 데이터만 처리 - ⚠️ 버튼 설정에서 데이터 소스를 올바르게 설정해야 함 **사용 시나리오:** - 폼 데이터로 새 레코드 생성 - 테이블에서 선택한 항목 일괄 업데이트 - 사용자가 선택한 데이터만 처리 ### 2. 테이블 전체 데이터 ``` 📊 테이블 전체 데이터 모드 선택한 테이블의 **모든 행**을 직접 조회합니다. ⚠️ 대량 데이터 시 성능 주의 ``` **특징:** - ✅ 테이블의 모든 데이터 처리 - ✅ 버튼 설정과 무관하게 동작 - ✅ 자동으로 전체 데이터 조회 - ⚠️ 대량 데이터 시 메모리 및 성능 이슈 가능 - ⚠️ 네트워크 부하 증가 **사용 시나리오:** - 전체 데이터 통계/집계 - 일괄 데이터 마이그레이션 - 전체 데이터 검증 - 백업/복원 작업 ## 설정 방법 ### 1단계: 노드 추가 1. 노드 플로우 편집기 열기 2. 좌측 팔레트에서 **테이블 소스** 또는 **외부 DB 소스** 드래그 3. 캔버스에 노드 배치 ### 2단계: 테이블 선택 1. 노드 클릭하여 선택 2. 우측 **속성 패널** 열림 3. **테이블 선택** 드롭다운에서 테이블 선택 ### 3단계: 데이터 소스 설정 1. **데이터 소스 설정** 섹션으로 스크롤 2. **데이터 소스 타입** 드롭다운 클릭 3. 원하는 모드 선택: - **컨텍스트 데이터**: 버튼에서 전달된 데이터 사용 - **테이블 전체 데이터**: 테이블의 모든 행 조회 ### 4단계: 저장 - 변경 사항은 **즉시 노드에 반영**됩니다. - 별도 저장 버튼 불필요 (자동 저장) ## 사용 예시 ### 예시 1: 선택된 항목만 처리 (컨텍스트 데이터) **시나리오**: 사용자가 테이블에서 선택한 주문만 승인 처리 **플로우 구성:** ``` [테이블 소스: orders] └─ 데이터 소스: 컨텍스트 데이터 └─ [조건: status = 'pending'] └─ [업데이트: status = 'approved'] ``` **버튼 설정:** - 제어 데이터 소스: `table-selection` (테이블 선택 항목) **실행 결과:** - 사용자가 선택한 3개 주문만 승인 처리 - 나머지 주문은 변경되지 않음 ### 예시 2: 전체 데이터 일괄 처리 (테이블 전체 데이터) **시나리오**: 모든 고객의 등급을 재계산 **플로우 구성:** ``` [테이블 소스: customers] └─ 데이터 소스: 테이블 전체 데이터 └─ [데이터 변환: 등급 계산] └─ [업데이트: grade = 계산된 등급] ``` **버튼 설정:** - 제어 데이터 소스: 무관 (테이블 전체를 자동 조회) **실행 결과:** - 모든 고객 레코드의 등급 재계산 - 1,000개 고객 → 1,000개 모두 업데이트 ### 예시 3: 외부 DB 전체 데이터 동기화 **시나리오**: 외부 ERP의 모든 제품 정보를 내부 DB로 동기화 **플로우 구성:** ``` [외부 DB 소스: products] └─ 데이터 소스: 테이블 전체 데이터 └─ [Upsert: 내부 DB products 테이블] ``` **실행 결과:** - 외부 DB의 모든 제품 데이터 조회 - 내부 DB에 동기화 (있으면 업데이트, 없으면 삽입) ## 노드 실행 로직 ### 컨텍스트 데이터 모드 실행 흐름 ```typescript // 1. 버튼 클릭 // 2. 버튼에서 데이터 전달 (폼, 테이블 선택 등) // 3. 노드 플로우 실행 // 4. 테이블 소스 노드가 전달받은 데이터 사용 { nodeType: "tableSource", config: { tableName: "orders", dataSourceType: "context-data" }, // 실행 시 버튼에서 전달된 데이터 사용 input: [ { id: 1, status: "pending" }, { id: 2, status: "pending" } ] } ``` ### 테이블 전체 데이터 모드 실행 흐름 ```typescript // 1. 버튼 클릭 // 2. 노드 플로우 실행 // 3. 테이블 소스 노드가 직접 DB 조회 // 4. 모든 행을 반환 { nodeType: "tableSource", config: { tableName: "orders", dataSourceType: "table-all" }, // 실행 시 DB에서 전체 데이터 조회 query: "SELECT * FROM orders", output: [ { id: 1, status: "pending" }, { id: 2, status: "approved" }, { id: 3, status: "completed" }, // ... 수천 개의 행 ] } ``` ## 성능 고려사항 ### 컨텍스트 데이터 모드 - ✅ **성능 우수**: 필요한 데이터만 처리 - ✅ **메모리 효율**: 선택된 데이터만 메모리에 로드 - ✅ **네트워크 효율**: 최소한의 데이터 전송 ### 테이블 전체 데이터 모드 - ⚠️ **대량 데이터 주의**: 수천~수만 개 행 처리 시 느려질 수 있음 - ⚠️ **메모리 사용**: 모든 데이터를 메모리에 로드 - ⚠️ **네트워크 부하**: 전체 데이터 전송 **권장 사항:** ``` • 데이터가 1,000개 이하: 테이블 전체 데이터 사용 가능 • 데이터가 10,000개 이상: 컨텍스트 데이터 + 필터링 권장 • 데이터가 100,000개 이상: 배치 처리 또는 서버 사이드 처리 필요 ``` ## 디버깅 ### 콘솔 로그 확인 **데이터 소스 타입 변경 시:** ``` ✅ 데이터 소스 타입 변경: table-all ``` **노드 실행 시:** ```typescript // 컨텍스트 데이터 모드 🔍 테이블 소스 노드 실행: orders 📊 입력 데이터: 3건 (컨텍스트에서 전달됨) // 테이블 전체 데이터 모드 🔍 테이블 소스 노드 실행: orders 📊 테이블 전체 데이터 조회: 1,234건 ``` ### 일반적인 문제 #### Q1: 컨텍스트 데이터 모드인데 데이터가 없습니다 **A**: 버튼 설정을 확인하세요. - 버튼 설정 > 제어 데이터 소스가 올바르게 설정되어 있는지 확인 - 폼 데이터: `form` - 테이블 선택: `table-selection` - 테이블 전체: `table-all` #### Q2: 테이블 전체 데이터 모드가 느립니다 **A**: 1. 데이터 양 확인 (몇 개 행인지?) 2. 필요하면 컨텍스트 데이터 + 필터링으로 변경 3. WHERE 조건으로 범위 제한 #### Q3: 외부 DB 소스가 오래 걸립니다 **A**: 1. 외부 DB 연결 상태 확인 2. 네트워크 지연 확인 3. 외부 DB의 인덱스 확인 ## 버튼 설정과의 관계 ### 버튼 데이터 소스 vs 노드 데이터 소스 | 버튼 설정 | 노드 설정 | 결과 | |---------|---------|-----| | `table-selection` | `context-data` | 선택된 항목만 처리 ✅ | | `table-all` | `context-data` | 전체 데이터 전달됨 ⚠️ | | 무관 | `table-all` | 노드가 직접 전체 조회 ✅ | | `form` | `context-data` | 폼 데이터만 처리 ✅ | **권장 조합:** ``` 1. 선택된 항목 처리: 버튼: table-selection → 노드: context-data 2. 테이블 전체 처리: 버튼: 무관 → 노드: table-all 3. 폼 데이터 처리: 버튼: form → 노드: context-data ``` ## 마이그레이션 가이드 ### 기존 노드 업데이트 기존에 생성된 노드는 **자동으로 `context-data` 모드**로 설정됩니다. **업데이트 방법:** 1. 노드 선택 2. 속성 패널 열기 3. 데이터 소스 설정 섹션에서 `table-all`로 변경 ## 베스트 프랙티스 ### ✅ 좋은 예 ```typescript // 시나리오: 사용자가 선택한 주문 취소 [테이블 소스: orders] dataSourceType: "context-data" // ✅ 선택된 주문만 처리 ↓ [업데이트: status = 'cancelled'] ``` ```typescript // 시나리오: 모든 만료된 쿠폰 삭제 [테이블 소스: coupons] dataSourceType: "table-all" // ✅ 전체 조회 후 필터링 ↓ [조건: expiry_date < today] ↓ [삭제] ``` ### ❌ 나쁜 예 ```typescript // 시나리오: 단일 주문 업데이트인데 전체 조회 [테이블 소스: orders] dataSourceType: "table-all" // ❌ 불필요한 전체 조회 ↓ [조건: id = 123] // 한 개만 필요한데 전체를 조회함 ↓ [업데이트] ``` ## 요약 ### 언제 어떤 모드를 사용해야 하나요? | 상황 | 권장 모드 | |------|----------| | 폼 데이터로 새 레코드 생성 | 컨텍스트 데이터 | | 테이블에서 선택한 항목 수정 | 컨텍스트 데이터 | | 전체 데이터 통계/집계 | 테이블 전체 데이터 | | 일괄 데이터 마이그레이션 | 테이블 전체 데이터 | | 특정 조건의 데이터 처리 | 테이블 전체 데이터 + 조건 | | 외부 DB 동기화 | 테이블 전체 데이터 | ### 핵심 원칙 1. **기본은 컨텍스트 데이터**: 대부분의 경우 이것으로 충분합니다. 2. **전체 데이터는 신중히**: 성능 영향을 고려하세요. 3. **버튼과 노드를 함께 설계**: 데이터 흐름을 명확히 이해하세요. ## 관련 문서 - [제어관리_데이터소스_확장_가이드.md](./제어관리_데이터소스_확장_가이드.md) - 버튼 데이터 소스 설정 - 노드 플로우 기본 가이드 (준비 중) ## 업데이트 이력 - **2025-01-24**: 초기 문서 작성 - 테이블 소스 노드에 데이터 소스 타입 추가 - 외부 DB 소스 노드에 데이터 소스 타입 추가 - `context-data`, `table-all` 모드 지원