# 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 `