Files
vexplor/docs/V2_COMPONENT_MIGRATION_ANALYSIS.md
DDD1542 852de0fb0e feat: V2 레이아웃 처리 개선 및 새로운 V2 레이아웃 데이터 구조 도입
- 기존 레이아웃 처리 로직을 V2 레이아웃에 맞게 수정하였습니다.
- V2 레이아웃에서 layout_data를 조회하고, 변경 여부를 확인하는 로직을 추가하였습니다.
- 레이아웃 데이터의 참조 ID 업데이트 및 flowId, numberingRuleId 수집 기능을 구현하였습니다.
- V2Media 컴포넌트를 통합하여 미디어 관련 기능을 강화하였습니다.
- 레이아웃 처리 시 V2 레이아웃의 컴포넌트 매핑 및 데이터 복사를 효율적으로 처리하도록 개선하였습니다.
2026-01-30 13:38:07 +09:00

357 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 신규 개발 계획 수립