# V3 메타 컴포넌트 - 자체 데이터 파이프라인 구축 계획 > **핵심 원칙**: V3 메타 컴포넌트는 V2를 래핑하지 않는다. > 자체적으로 완전히 동작하는 렌더링 + 데이터 파이프라인을 가진다. > V2의 좋은 부분(API, EventBus, formData 패턴)은 재사용하되, 렌더러는 새로 만든다. --- ## 아키텍처 ``` [V3 메타 컴포넌트] │ ├─ FieldRenderer ─── formData/onFormDataChange + entityJoinApi + validation ├─ DataViewRenderer ─── entityJoinApi.getTableDataWithJoins + 페이징/정렬/필터 ├─ ActionRenderer ─── ButtonActionExecutor + v2EventBus ├─ SearchRenderer ─── v2EventBus로 DataView 필터링 ├─ LayoutRenderer ─── children 관리 (순수 컨테이너) ├─ DisplayRenderer ─── formData 바인딩 + 포맷팅 └─ ModalRenderer ─── 모달 상태 + 내부 폼 ``` ## 재사용하는 V2 인프라 (수정 없이 그대로 사용) | 모듈 | 파일 | 용도 | |------|------|------| | entityJoinApi | `frontend/lib/api/entityJoin.ts` | 테이블 데이터 조회 (조인 포함) | | DynamicFormApi | `frontend/lib/api/dynamicForm.ts` | 폼 저장/검증 | | screenApi | `frontend/lib/api/screen.ts` | CRUD API (add/edit/delete) | | v2EventBus | `frontend/lib/v2-core/events/EventBus.ts` | 컴포넌트 간 이벤트 통신 | | V2_EVENTS | `frontend/lib/v2-core/events/types.ts` | 이벤트 타입 상수 | | ButtonActionExecutor | `frontend/lib/utils/buttonActions.ts` | 버튼 액션 실행 | | apiClient | `frontend/lib/api/client.ts` | HTTP 클라이언트 | | formData 패턴 | props 전달 | `formData`, `onFormDataChange(fieldName, value)` | ## 새로 만드는 V3 전용 모듈 --- ### Phase 1: FieldRenderer (자체 데이터 바인딩) **목표**: 하나의 FieldRenderer가 webType에 따라 모든 입력 필드를 렌더링 **파일**: `frontend/lib/meta-components/Field/FieldRenderer.tsx` **기능 요구사항**: 1. `formData[columnName]`에서 현재 값 읽기 2. `onFormDataChange(columnName, newValue)` 호출로 값 변경 3. webType별 렌더링: - `text`, `number`, `email`, `tel`, `url`, `password`: shadcn `` 사용 - `textarea`: shadcn `