13 KiB
13 KiB
플로우 위젯 단계별 컬럼 표시 설정 기능 구현 완료
📋 개요
플로우 위젯에서 각 단계별로 표시할 컬럼을 선택할 수 있는 기능을 하이브리드 방식으로 구현하였습니다.
하이브리드 방식의 장점
- 플로우 에디터에서 각 스텝의 기본 컬럼 설정 정의
- 화면관리에서 특정 화면에만 컬럼 오버라이드 가능
- 우선순위: 화면 설정 > 플로우 기본 설정 > 전체 컬럼 표시
🎯 구현 내용
Phase 1: 데이터베이스 스키마 확장 ✅
파일: db/migrations/023_add_display_config_to_flow_step.sql
flow_step테이블에display_config컬럼 추가 (JSONB 타입)- 인덱스 추가 (GIN 인덱스로 JSONB 검색 최적화)
ALTER TABLE flow_step
ADD COLUMN IF NOT EXISTS display_config JSONB DEFAULT NULL;
CREATE INDEX IF NOT EXISTS idx_flow_step_display_config
ON flow_step USING gin(display_config);
구조:
{
"visibleColumns": ["column1", "column2", ...],
"columnOrder": ["column1", "column2", ...],
"columnLabels": {
"column1": "커스텀 라벨 1"
},
"columnWidths": {
"column1": 150
}
}
Phase 2: 백엔드 타입 정의 업데이트 ✅
파일: backend-node/src/types/flow.ts
새로운 인터페이스:
export interface FlowStepDisplayConfig {
visibleColumns?: string[];
columnOrder?: string[];
columnLabels?: Record<string, string>;
columnWidths?: Record<string, number>;
}
FlowStep 인터페이스 확장:
export interface FlowStep {
// ... 기존 필드
displayConfig?: FlowStepDisplayConfig; // 🆕
}
CreateFlowStepRequest 및 UpdateFlowStepRequest에도 추가됨
Phase 3: 워크플로우 에디터 - 스텝 속성 패널 UI 추가 ✅
파일: frontend/components/flow/FlowStepPanel.tsx
추가된 기능
- 테이블 컬럼 목록 자동 로드
- 스텝의 테이블이 선택되면 해당 테이블의 컬럼 목록을 자동으로 가져옴
- "표시 설정" 카드 추가
- 전체 선택/해제 체크박스
- 개별 컬럼 선택 체크박스
- 선택된 컬럼 개수 표시
// formData에 displayConfig 추가
const [formData, setFormData] = useState({
// ... 기존 필드
displayConfig: step.displayConfig || { visibleColumns: [] }, // 🆕
});
UI 구조
┌─ 표시 설정 카드 ─────────────────────┐
│ 표시할 컬럼 선택 │
│ ┌────────────────────────────┐ │
│ │ ☐ 전체 선택/해제 │ │
│ ├────────────────────────────┤ │
│ │ ☑ id │ │
│ │ ☑ name │ │
│ │ ☐ description │ │
│ │ ☑ created_at │ │
│ └────────────────────────────┘ │
│ │
│ 💡 선택된 컬럼: 3개 │
└───────────────────────────────────────┘
Phase 4: 플로우 위젯 - 컬럼 표시 로직 업데이트 ✅
파일: frontend/components/screen/widgets/FlowWidget.tsx
핵심 로직: getVisibleColumns 함수
/**
* 컬럼 표시 우선순위 결정 함수 (하이브리드 방식)
* 1순위: 화면 위젯 설정 (stepColumnConfig)
* 2순위: 플로우 스텝 기본 설정 (displayConfig)
* 3순위: 모든 컬럼 표시
*/
const getVisibleColumns = (stepId: number, allColumns: string[]): string[] => {
// 1순위: 화면 위젯 설정
const widgetConfig = component.stepColumnConfig;
if (widgetConfig && widgetConfig[stepId]) {
const config = widgetConfig[stepId];
if (config.selectedColumns && config.selectedColumns.length > 0) {
return config.selectedColumns;
}
}
// 2순위: 플로우 스텝 기본 설정
const currentStep = steps.find((s) => s.id === stepId);
if (
currentStep?.displayConfig?.visibleColumns &&
currentStep.displayConfig.visibleColumns.length > 0
) {
return currentStep.displayConfig.visibleColumns;
}
// 3순위: 모든 컬럼 표시
return allColumns;
};
적용된 위치
- 스텝 클릭 시 데이터 로드 (
handleStepClick) - 플로우 새로고침 시 (
refreshStepData)
Phase 5: 화면관리 - 플로우 위젯 설정 패널 UI 추가 ✅
파일: frontend/components/screen/config-panels/FlowWidgetConfigPanel.tsx
추가된 기능
-
스텝 목록 자동 로드
- 플로우가 선택되면 해당 플로우의 스텝 목록을 자동으로 가져옴
-
테이블 컬럼 목록 자동 로드
- 플로우의 테이블 컬럼 목록을 자동으로 가져옴
-
"스텝별 컬럼 설정 (고급)" 섹션 추가
- 토글 버튼으로 표시/숨김 가능
- 각 스텝별로 컬럼 선택 가능
- 커스텀 설정이 있으면 "초기화" 버튼 표시
UI 구조
┌─ 스텝별 컬럼 설정 (고급) ──────── [설정▼] ─┐
│ │
│ ┌─ 스텝 1: 주문 접수 ─────────── [초기화] ─┐ │
│ │ 커스텀 설정 (3개 컬럼) │ │
│ │ ┌──────────────────────────┐ │ │
│ │ │ ☑ id │ │ │
│ │ │ ☑ customer_name │ │ │
│ │ │ ☐ order_date │ │ │
│ │ │ ☑ amount │ │ │
│ │ └──────────────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
│ │
│ ┌─ 스텝 2: 승인 대기 ──────────────────────┐ │
│ │ 기본 설정 사용 │ │
│ │ (플로우 정의에서 설정된 컬럼 표시) │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────┘
Phase 6: 프론트엔드 타입 정의 업데이트 ✅
파일 1: frontend/types/flow.ts
export interface FlowStepDisplayConfig {
visibleColumns?: string[];
columnOrder?: string[];
columnLabels?: Record<string, string>;
columnWidths?: Record<string, number>;
}
export interface FlowStep {
// ... 기존 필드
displayConfig?: FlowStepDisplayConfig; // 🆕
}
파일 2: frontend/types/screen-management.ts
export interface FlowStepColumnConfig {
selectedColumns: string[];
columnOrder?: string[];
}
export interface FlowComponent extends BaseComponent {
type: "flow";
// ... 기존 필드
stepColumnConfig?: {
[stepId: number]: FlowStepColumnConfig; // 🆕
};
}
🔄 사용 시나리오
시나리오 1: 플로우 기본 설정 사용 (일반적인 경우)
- 플로우 관리 페이지에서 플로우 스텝 편집
- "표시 설정" 카드에서 표시할 컬럼 선택 (예: id, name, created_at)
- 저장
- 모든 화면에서 이 플로우를 사용할 때 선택한 컬럼만 표시됨
시나리오 2: 화면별 컬럼 오버라이드 (특수한 경우)
- 화면 설계자 모드에서 플로우 위젯 선택
- 속성 패널 > "스텝별 컬럼 설정 (고급)" 클릭
- 특정 스텝의 컬럼을 다르게 선택 (예: id, amount만 표시)
- 저장
- 이 화면에서만 오버라이드된 컬럼이 표시됨
시나리오 3: 아무 설정도 하지 않은 경우
- 모든 컬럼이 자동으로 표시됨 (기본 동작)
📊 우선순위 다이어그램
데이터 로드
↓
┌────────────────────────────────────────┐
│ 1. 화면 위젯 설정 확인 │
│ (stepColumnConfig[stepId]) │
└────────────────────────────────────────┘
↓ 없음
┌────────────────────────────────────────┐
│ 2. 플로우 스텝 기본 설정 확인 │
│ (step.displayConfig.visibleColumns)│
└────────────────────────────────────────┘
↓ 없음
┌────────────────────────────────────────┐
│ 3. 모든 컬럼 표시 │
│ (Object.keys(data[0])) │
└────────────────────────────────────────┘
↓
테이블 렌더링
🎨 UI/UX 특징
1. 점진적 공개 (Progressive Disclosure)
- 기본적으로는 간단한 UI만 표시
- "스텝별 컬럼 설정 (고급)"은 토글로 숨김/표시
2. 명확한 피드백
- 선택된 컬럼 개수 표시
- "커스텀 설정" vs "기본 설정 사용" 명확히 표시
- 초기화 버튼으로 쉽게 되돌리기 가능
3. 검색 가능한 체크박스 리스트
- 컬럼이 많을 경우 스크롤 가능
- font-mono로 컬럼명 명확히 표시
🧪 테스트 체크리스트
기능 테스트
- 데이터베이스 마이그레이션 실행 (
023_add_display_config_to_flow_step.sql) - 플로우 관리 페이지에서 스텝 속성 패널 열기
- "표시 설정" 카드에서 컬럼 선택 및 저장
- 플로우 위젯에서 선택한 컬럼만 표시되는지 확인
- 화면관리에서 특정 스텝의 컬럼 오버라이드 설정
- 오버라이드가 우선 적용되는지 확인
- 오버라이드 초기화 버튼 동작 확인
우선순위 테스트
- 모든 설정 없음: 전체 컬럼 표시 ✓
- 플로우 기본 설정만: 선택한 컬럼만 표시 ✓
- 화면 오버라이드 설정: 오버라이드된 컬럼만 표시 (최우선) ✓
엣지 케이스
- 컬럼이 없는 테이블 선택 시
- 모든 컬럼 선택 해제 시 (빈 배열) → 전체 표시
- 존재하지 않는 컬럼명 선택 시 (무시)
- 플로우 삭제 후 화면에서 참조하는 경우
📝 주의사항
1. 데이터베이스 마이그레이션
- 운영 환경에 배포하기 전에 반드시 마이그레이션 실행 필요
- 기존 데이터에는 영향 없음 (NULL 허용)
2. 하위 호환성
displayConfig가 없으면 자동으로 전체 컬럼 표시 (기존 동작 유지)stepColumnConfig가 없으면 플로우 기본 설정 사용
3. 성능
- 컬럼 목록 로드는 테이블 선택 시 1회만 실행
- GIN 인덱스로 JSONB 검색 최적화
🚀 향후 개선 방안 (선택사항)
1. 컬럼 순서 변경 기능
- Drag & Drop으로 컬럼 순서 변경
columnOrder필드 활용
2. 컬럼별 커스텀 라벨
- 표시명을 사용자가 직접 지정
columnLabels필드 활용
3. 컬럼 너비 설정
- 각 컬럼의 표시 너비 조정
columnWidths필드 활용
4. 빠른 프리셋
- "기본 정보만", "전체 정보", "요약 정보" 등 프리셋 제공
📚 관련 파일 목록
데이터베이스
db/migrations/023_add_display_config_to_flow_step.sql
백엔드
backend-node/src/types/flow.ts
프론트엔드 (타입)
frontend/types/flow.tsfrontend/types/screen-management.ts
프론트엔드 (컴포넌트)
frontend/components/screen/widgets/FlowWidget.tsxfrontend/components/flow/FlowStepPanel.tsxfrontend/components/screen/config-panels/FlowWidgetConfigPanel.tsx
✅ 구현 완료
모든 Phase가 성공적으로 완료되었습니다!
구현 날짜: 2025-10-24
구현 방식: 하이브리드 (플로우 에디터 기본 설정 + 화면관리 오버라이드)
적용 범위:
- 플로우 관리 시스템 (플로우 정의 편집)
- 화면관리 시스템 (플로우 위젯 설정)
- 실제 화면 표시 (플로우 위젯 렌더링)