9.2 KiB
9.2 KiB
🎨 제어관리 - 데이터 연결 설정 UI 재설계 계획서
📋 프로젝트 개요
목표
- 기존 모달 기반 필드 매핑을 메인 화면으로 통합
- 중복된 테이블 선택 과정 제거
- 시각적 필드 연결 매핑 구현
- 좌우 분할 레이아웃으로 정보 가시성 향상
현재 문제점
- ❌ 이중 작업: 테이블을 3번 선택해야 함 (더블클릭 → 모달 → 재선택)
- ❌ 혼란스러운 UX: 사전 선택의 의미가 없어짐
- ❌ 불필요한 모달: 연결 설정이 메인 기능인데 숨겨져 있음
- ❌ 시각적 피드백 부족: 필드 매핑 관계가 명확하지 않음
🎯 새로운 UI 구조
레이아웃 구성
┌─────────────────────────────────────────────────────────────┐
│ 제어관리 - 데이터 연결 설정 │
├─────────────────────────────────────────────────────────────┤
│ 좌측 패널 (30%) │ 우측 패널 (70%) │
│ - 연결 타입 선택 │ - 단계별 설정 UI │
│ - 매핑 정보 모니터링 │ - 시각적 필드 매핑 │
│ - 상세 설정 목록 │ - 실시간 연결선 표시 │
│ - 액션 버튼 │ - 드래그 앤 드롭 지원 │
└─────────────────────────────────────────────────────────────┘
🔧 구현 단계
Phase 1: 기본 구조 구축
- 좌우 분할 레이아웃 컴포넌트 생성
- 기존 모달 컴포넌트들을 메인 화면용으로 리팩토링
- 연결 타입 선택 컴포넌트 구현
Phase 2: 좌측 패널 구현
- 연결 타입 선택 (데이터 저장 / 외부 호출)
- 실시간 매핑 정보 표시
- 매핑 상세 목록 컴포넌트
- 고급 설정 패널
Phase 3: 우측 패널 구현
- 단계별 진행 UI (연결 → 테이블 → 매핑)
- 시각적 필드 매핑 영역
- SVG 기반 연결선 시스템
- 드래그 앤 드롭 매핑 기능
Phase 4: 고급 기능
- 실시간 검증 및 피드백
- 매핑 미리보기 기능
- 설정 저장/불러오기
- 테스트 실행 기능
📁 파일 구조
새로 생성할 컴포넌트
frontend/components/dataflow/connection/redesigned/
├── DataConnectionDesigner.tsx # 메인 컨테이너
├── LeftPanel/
│ ├── ConnectionTypeSelector.tsx # 연결 타입 선택
│ ├── MappingInfoPanel.tsx # 매핑 정보 표시
│ ├── MappingDetailList.tsx # 매핑 상세 목록
│ ├── AdvancedSettings.tsx # 고급 설정
│ └── ActionButtons.tsx # 액션 버튼들
├── RightPanel/
│ ├── StepProgress.tsx # 단계 진행 표시
│ ├── ConnectionStep.tsx # 1단계: 연결 선택
│ ├── TableStep.tsx # 2단계: 테이블 선택
│ ├── FieldMappingStep.tsx # 3단계: 필드 매핑
│ └── VisualMapping/
│ ├── FieldMappingCanvas.tsx # 시각적 매핑 캔버스
│ ├── FieldColumn.tsx # 필드 컬럼 컴포넌트
│ ├── ConnectionLine.tsx # SVG 연결선
│ └── MappingControls.tsx # 매핑 제어 도구
└── types/
└── redesigned.ts # 타입 정의
수정할 기존 파일
frontend/components/dataflow/connection/
├── DataSaveSettings.tsx # 새 UI로 교체
├── ConnectionSelectionPanel.tsx # 재사용을 위한 리팩토링
├── TableSelectionPanel.tsx # 재사용을 위한 리팩토링
└── ActionFieldMappings.tsx # 레거시 처리
🎨 UI 컴포넌트 상세
1. 연결 타입 선택 (ConnectionTypeSelector)
interface ConnectionType {
id: "data_save" | "external_call";
label: string;
description: string;
icon: React.ReactNode;
}
const connectionTypes: ConnectionType[] = [
{
id: "data_save",
label: "데이터 저장",
description: "INSERT/UPDATE/DELETE 작업",
icon: <Database />,
},
{
id: "external_call",
label: "외부 호출",
description: "API/Webhook 호출",
icon: <Globe />,
},
];
2. 시각적 필드 매핑 (FieldMappingCanvas)
interface FieldMapping {
id: string;
fromField: ColumnInfo;
toField: ColumnInfo;
transformRule?: string;
isValid: boolean;
validationMessage?: string;
}
interface MappingLine {
id: string;
fromX: number;
fromY: number;
toX: number;
toY: number;
isValid: boolean;
isHovered: boolean;
}
3. 매핑 정보 패널 (MappingInfoPanel)
interface MappingStats {
totalMappings: number;
validMappings: number;
invalidMappings: number;
missingRequiredFields: number;
estimatedRows: number;
actionType: "INSERT" | "UPDATE" | "DELETE";
}
🔄 데이터 플로우
상태 관리
interface DataConnectionState {
// 기본 설정
connectionType: "data_save" | "external_call";
currentStep: 1 | 2 | 3;
// 연결 정보
fromConnection?: Connection;
toConnection?: Connection;
fromTable?: TableInfo;
toTable?: TableInfo;
// 매핑 정보
fieldMappings: FieldMapping[];
mappingStats: MappingStats;
// UI 상태
selectedMapping?: string;
isLoading: boolean;
validationErrors: ValidationError[];
}
이벤트 핸들링
interface DataConnectionActions {
// 연결 타입
setConnectionType: (type: "data_save" | "external_call") => void;
// 단계 진행
goToStep: (step: 1 | 2 | 3) => void;
// 연결/테이블 선택
selectConnection: (type: "from" | "to", connection: Connection) => void;
selectTable: (type: "from" | "to", table: TableInfo) => void;
// 필드 매핑
createMapping: (fromField: ColumnInfo, toField: ColumnInfo) => void;
updateMapping: (mappingId: string, updates: Partial<FieldMapping>) => void;
deleteMapping: (mappingId: string) => void;
// 검증 및 저장
validateMappings: () => Promise<ValidationResult>;
saveMappings: () => Promise<void>;
testExecution: () => Promise<TestResult>;
}
🎯 사용자 경험 (UX) 개선점
Before (기존)
- 테이블 더블클릭 → 화면에 표시
- 모달 열기 → 다시 테이블 선택
- 외부 커넥션 설정 → 또 다시 테이블 선택
- 필드 매핑 → 텍스트 기반 매핑
After (개선)
- 연결 타입 선택 → 목적 명확화
- 연결 선택 → 한 번에 FROM/TO 설정
- 테이블 선택 → 즉시 필드 정보 로드
- 시각적 매핑 → 드래그 앤 드롭으로 직관적 연결
🚀 구현 우선순위
🔥 High Priority
- 기본 레이아웃 - 좌우 분할 구조
- 연결 타입 선택 - 데이터 저장/외부 호출
- 단계별 진행 - 연결 → 테이블 → 매핑
- 기본 필드 매핑 - 드래그 앤 드롭 없이 클릭 기반
🔶 Medium Priority
- 시각적 연결선 - SVG 기반 라인 표시
- 실시간 검증 - 타입 호환성 체크
- 매핑 정보 패널 - 통계 및 상태 표시
- 드래그 앤 드롭 - 고급 매핑 기능
🔵 Low Priority
- 고급 설정 - 트랜잭션, 배치 설정
- 미리보기 기능 - 데이터 변환 미리보기
- 설정 템플릿 - 자주 사용하는 매핑 저장
- 성능 최적화 - 대용량 테이블 처리
📅 개발 일정
Week 1: 기본 구조
- 레이아웃 컴포넌트 생성
- 연결 타입 선택 구현
- 기존 컴포넌트 리팩토링
Week 2: 핵심 기능
- 단계별 진행 UI
- 연결/테이블 선택 통합
- 기본 필드 매핑 구현
Week 3: 시각적 개선
- SVG 연결선 시스템
- 드래그 앤 드롭 매핑
- 실시간 검증 기능
Week 4: 완성 및 테스트
- 고급 기능 구현
- 통합 테스트
- 사용자 테스트 및 피드백 반영
🔍 기술적 고려사항
성능 최적화
- 가상화: 대용량 필드 목록 처리
- 메모이제이션: 불필요한 리렌더링 방지
- 지연 로딩: 필요한 시점에만 데이터 로드
접근성
- 키보드 네비게이션: 모든 기능을 키보드로 접근 가능
- 스크린 리더: 시각적 매핑의 대체 텍스트 제공
- 색상 대비: 연결선과 상태 표시의 명확한 구분
확장성
- 플러그인 구조: 새로운 연결 타입 쉽게 추가
- 커스텀 변환: 사용자 정의 데이터 변환 규칙
- API 확장: 외부 시스템과의 연동 지원
🎯 다음 단계
이 계획서를 바탕으로 Phase 1부터 순차적으로 구현을 시작하겠습니다.
첫 번째 작업: 좌우 분할 레이아웃과 연결 타입 선택 컴포넌트 구현
구현을 시작하시겠어요? 🚀