# V2 컴포넌트 마이그레이션 분석 보고서

> 작성일: 2026-01-27  
> 목적: 미구현 V1 컴포넌트들의 V2 마이그레이션 가능성 분석

---

## 1. 현황 요약

| 구분 | 개수 | 비율 |
|------|------|------|
| V1 총 컴포넌트 | 7,170개 | 100% |
| V2 마이그레이션 완료 | 5,212개 | 72.7% |
| **미구현 (분석 대상)** | **~520개** | **7.3%** |

---

## 2. 미구현 컴포넌트 상세 분석

### 2.1 ✅ 통합 가능 (기존 V2 컴포넌트로 대체)

#### 2.1.1 `unified-list` (97개) → `v2-table-list`

**분석 결과**: ✅ **통합 가능**

| 항목 | unified-list | v2-table-list |
|------|-------------|---------------|
| 테이블 뷰 | ✅ | ✅ |
| 카드 뷰 | ✅ | ❌ (추가 필요) |
| 검색 | ✅ | ✅ |
| 페이지네이션 | ✅ | ✅ |
| 편집 가능 | ✅ | ✅ |

**결론**: `v2-table-list`에 `cardView` 모드만 추가하면 통합 가능. 또는 DB 마이그레이션으로 `v2-table-list`로 변환.

**작업량**: 중간 (v2-table-list 확장 또는 DB 마이그레이션)

---

#### 2.1.2 `autocomplete-search-input` (50개) → `v2-select`

**분석 결과**: ✅ **통합 가능**

| 항목 | autocomplete-search-input | v2-select |
|------|--------------------------|-----------|
| 자동완성 드롭다운 | ✅ | ✅ (mode: autocomplete) |
| 테이블 데이터 검색 | ✅ | ✅ (dataSource 설정) |
| 표시/값 필드 분리 | ✅ | ✅ |

**결론**: `v2-select`의 `mode: "autocomplete"` 또는 `mode: "combobox"`로 대체 가능.

**작업량**: 낮음 (DB 마이그레이션만)

---

#### 2.1.3 `repeater-field-group` (24개) → `v2-repeater`

**분석 결과**: ✅ **통합 가능**

`v2-repeater`가 이미 다음을 지원:
- 인라인 테이블 모드
- 모달 선택 모드
- 버튼 모드

**결론**: `v2-repeater`의 `renderMode: "inline"`으로 대체.

**작업량**: 낮음 (DB 마이그레이션만)

---

#### 2.1.4 `simple-repeater-table` (1개) → `v2-repeater`

**분석 결과**: ✅ **통합 가능**

**결론**: `v2-repeater`로 대체.

**작업량**: 매우 낮음

---

### 2.2 ⚠️ Renderer 추가만 필요 (코드 구조 있음)

#### 2.2.1 `split-panel-layout2` (8개)

**분석 결과**: ⚠️ **Renderer 추가 필요**

- V1 Renderer: `SplitPanelLayout2Renderer.tsx` ✅ 존재
- V2 Renderer: ❌ 없음
- Component: `SplitPanelLayout2Component.tsx` ✅ 존재

**결론**: V2 형식으로 DB 마이그레이션만 하면 됨 (기존 Renderer가 `split-panel-layout2` ID로 등록됨).

**작업량**: 매우 낮음 (DB 마이그레이션만)

---

#### 2.2.2 `repeat-screen-modal` (7개)

**분석 결과**: ⚠️ **Renderer 추가 필요**

- V1 Renderer: `RepeatScreenModalRenderer.tsx` ✅ 존재
- 정의: `hidden: true` (v2-repeat-screen-modal 사용으로 패널에서 숨김)

**결론**: 기존 Renderer 사용 가능, DB 마이그레이션만.

**작업량**: 매우 낮음

---

#### 2.2.3 `related-data-buttons` (5개)

**분석 결과**: ⚠️ **Renderer 추가 필요**

- V1 Renderer: `RelatedDataButtonsRenderer.tsx` ✅ 존재
- Component: `RelatedDataButtonsComponent.tsx` ✅ 존재

**결론**: 기존 Renderer 사용 가능, DB 마이그레이션만.

**작업량**: 매우 낮음

---

### 2.3 ❌ 별도 V2 개발 필요 (복잡한 구조)

#### 2.3.1 `entity-search-input` (99개)

**분석 결과**: ❌ **별도 개발 필요**

**특징**:
```typescript
// 모달 기반 엔티티 검색
- 테이블 선택 (tableName)
- 검색 필드 설정 (searchFields)
- 모달 팝업 (modalTitle, modalColumns)
- 값/표시 필드 분리 (valueField, displayField)
- 추가 정보 표시 (additionalFields)
```

**복잡도 요인**:
1. 모달 검색 UI가 필요
2. 다양한 테이블 연동
3. 추가 필드 연계 로직

**권장 방안**: 
- `v2-entity-search` 새로 개발
- 또는 `v2-select`에 `mode: "entity"` 추가

**작업량**: 높음 (1-2일)

---

#### 2.3.2 `modal-repeater-table` (68개)

**분석 결과**: ❌ **별도 개발 필요**

**특징**:
```typescript
// 모달에서 항목 검색 + 동적 테이블
- 소스 테이블 (sourceTable, sourceColumns)
- 모달 검색 (modalTitle, modalButtonText, multiSelect)
- 동적 컬럼 추가 (columns)
- 계산 규칙 (calculationRules)
- 고유 필드 (uniqueField)
```

**복잡도 요인**:
1. 모달 검색 + 선택
2. 동적 테이블 행 추가/삭제
3. 계산 규칙 (단가 × 수량 = 금액)
4. 중복 방지 로직

**권장 방안**: 
- `v2-repeater`의 `modal` 모드 확장
- `ItemSelectionModal` + `RepeaterTable` 재사용

**작업량**: 중간 (v2-repeater가 이미 기반 제공)

---

#### 2.3.3 `selected-items-detail-input` (83개)

**분석 결과**: ❌ **별도 개발 필요**

**특징**:
```typescript
// 선택된 항목들의 상세 입력
- 데이터 소스 (dataSourceId)
- 표시 컬럼 (displayColumns)
- 추가 입력 필드 (additionalFields)
- 타겟 테이블 (targetTable)
- 레이아웃 (grid/table)
```

**복잡도 요인**:
1. 부모 컴포넌트에서 데이터 수신
2. 동적 필드 생성
3. 다중 테이블 저장

**권장 방안**: 
- `v2-selected-items-detail` 새로 개발
- 또는 `v2-repeater`에 `mode: "detail-input"` 추가

**작업량**: 중간~높음

---

#### 2.3.4 `conditional-container` (53개)

**분석 결과**: ❌ **별도 개발 필요**

**특징**:
```typescript
// 조건부 UI 분기
- 제어 필드 (controlField, controlLabel)
- 조건별 섹션 (sections: [{condition, label, screenId}])
- 기본값 (defaultValue)
```

**복잡도 요인**:
1. 셀렉트박스 값에 따른 동적 UI 변경
2. 화면 임베딩 (screenId)
3. 상태 관리 복잡

**권장 방안**: 
- `v2-conditional-container` 새로 개발
- 조건부 렌더링 + 화면 임베딩 로직

**작업량**: 높음

---

#### 2.3.5 `universal-form-modal` (26개)

**분석 결과**: ❌ **별도 개발 필요**

**특징**:
```typescript
// 범용 폼 모달
- 섹션 기반 레이아웃
- 반복 섹션
- 채번규칙 연동
- 다중 테이블 저장
```

**복잡도 요인**:
1. 동적 섹션 구성
2. 채번규칙 연동
3. 다중 테이블 저장
4. 반복 필드 그룹

**권장 방안**: 
- `v2-universal-form` 새로 개발
- 또는 기존 컴포넌트 유지 (특수 목적)

**작업량**: 매우 높음 (3일 이상)

---

### 2.4 🟢 V1 유지 권장 (특수 목적)

| 컴포넌트 | 개수 | 이유 |
|----------|------|------|
| `tax-invoice-list` | 1 | 세금계산서 전용, 재사용 낮음 |
| `mail-recipient-selector` | 1 | 메일 전용, 재사용 낮음 |
| `unified-select` | 5 | → v2-select로 이미 마이그레이션 |
| `unified-date` | 2 | → v2-date로 이미 마이그레이션 |
| `unified-repeater` | 2 | → v2-repeater로 이미 마이그레이션 |

---

## 3. 마이그레이션 우선순위 권장

### 3.1 즉시 처리 (1일 이내)

| 순위 | 컴포넌트 | 개수 | 작업 |
|------|----------|------|------|
| 1 | `split-panel-layout2` | 8 | DB 마이그레이션만 |
| 2 | `repeat-screen-modal` | 7 | DB 마이그레이션만 |
| 3 | `related-data-buttons` | 5 | DB 마이그레이션만 |
| 4 | `autocomplete-search-input` | 50 | → v2-select 변환 |
| 5 | `repeater-field-group` | 24 | → v2-repeater 변환 |

**총: 94개 컴포넌트**

---

### 3.2 단기 처리 (1주 이내)

| 순위 | 컴포넌트 | 개수 | 작업 |
|------|----------|------|------|
| 1 | `unified-list` | 97 | → v2-table-list 확장 또는 변환 |
| 2 | `modal-repeater-table` | 68 | v2-repeater modal 모드 확장 |

**총: 165개 컴포넌트**

---

### 3.3 중기 처리 (2주 이상)

| 순위 | 컴포넌트 | 개수 | 작업 |
|------|----------|------|------|
| 1 | `entity-search-input` | 99 | v2-entity-search 신규 개발 |
| 2 | `selected-items-detail-input` | 83 | v2-selected-items-detail 개발 |
| 3 | `conditional-container` | 53 | v2-conditional-container 개발 |
| 4 | `universal-form-modal` | 26 | v2-universal-form 개발 |

**총: 261개 컴포넌트**

---

## 4. 권장 아키텍처

### 4.1 V2 컴포넌트 통합 계획

```
v2-input          ← text-input, number-input, textarea, unified-input ✅ 완료
v2-select         ← select-basic, checkbox, radio, autocomplete ⚠️ 진행중
v2-date           ← date-input, unified-date ✅ 완료
v2-media          ← file-upload, image-widget ✅ 완료
v2-table-list     ← table-list, unified-list ⚠️ 확장 필요
v2-repeater       ← repeater-field-group, modal-repeater-table, 
                    simple-repeater-table, related-data-buttons ⚠️ 진행중
v2-entity-search  ← entity-search-input (신규 개발 필요)
v2-conditional    ← conditional-container (신규 개발 필요)
```

---

## 5. 결론

### 즉시 처리 가능 (Renderer/DB만)
- `split-panel-layout2`, `repeat-screen-modal`, `related-data-buttons`: **20개**
- `autocomplete-search-input` → `v2-select`: **50개**
- `repeater-field-group` → `v2-repeater`: **24개**

### 통합 검토 필요
- `unified-list` → `v2-table-list` 확장: **97개**
- `modal-repeater-table` → `v2-repeater` 확장: **68개**

### 신규 개발 필요
- `entity-search-input`: **99개** (복잡도 높음)
- `selected-items-detail-input`: **83개**
- `conditional-container`: **53개**
- `universal-form-modal`: **26개**

### 유지
- 특수 목적 컴포넌트: **3개** (tax-invoice-list, mail-recipient-selector)

---

## 6. 다음 단계

1. **즉시**: `split-panel-layout2`, `repeat-screen-modal`, `related-data-buttons` DB 마이그레이션
2. **이번 주**: `autocomplete-search-input` → `v2-select`, `repeater-field-group` → `v2-repeater` 변환
3. **다음 주**: `unified-list`, `modal-repeater-table` 통합 설계
4. **이후**: `entity-search-input`, `conditional-container` 신규 개발 계획 수립
