Files
vexplor/frontend/docs/CLI_컴포넌트_생성_가이드.md
2025-09-12 16:47:02 +09:00

217 lines
6.7 KiB
Markdown

# 컴포넌트 자동 생성 CLI 가이드
화면 관리 시스템의 컴포넌트를 자동으로 생성하는 CLI 도구 사용법입니다.
## 사용법
```bash
node scripts/create-component.js <컴포넌트이름> <표시이름> <설명> <카테고리> [웹타입]
```
### 파라미터
| 파라미터 | 필수 | 설명 | 예시 |
|---------|-----|------|------|
| 컴포넌트이름 | ✅ | kebab-case 형식의 컴포넌트 ID | `text-input`, `date-picker` |
| 표시이름 | ✅ | 한글 표시명 | `텍스트 입력`, `날짜 선택` |
| 설명 | ✅ | 컴포넌트 설명 | `텍스트를 입력하는 컴포넌트` |
| 카테고리 | ✅ | 컴포넌트 카테고리 | `input`, `display`, `action` |
| 웹타입 | ⭕ | 기본 웹타입 (기본값: text) | `text`, `number`, `button` |
### 카테고리 옵션
| 카테고리 | 설명 | 아이콘 |
|---------|-----|-------|
| `input` | 입력 컴포넌트 | Edit |
| `display` | 표시 컴포넌트 | Eye |
| `action` | 액션/버튼 컴포넌트 | MousePointer |
| `layout` | 레이아웃 컴포넌트 | Layout |
| `form` | 폼 관련 컴포넌트 | FormInput |
| `chart` | 차트 컴포넌트 | BarChart |
| `media` | 미디어 컴포넌트 | Image |
| `navigation` | 네비게이션 컴포넌트 | Menu |
| `feedback` | 피드백 컴포넌트 | Bell |
| `utility` | 유틸리티 컴포넌트 | Settings |
### 웹타입 옵션
| 웹타입 | 설명 | 적용 대상 |
|-------|-----|----------|
| `text` | 텍스트 입력 | 기본 텍스트 필드 |
| `number` | 숫자 입력 | 숫자 전용 필드 |
| `email` | 이메일 입력 | 이메일 검증 필드 |
| `password` | 비밀번호 입력 | 패스워드 필드 |
| `textarea` | 다중행 텍스트 | 텍스트 영역 |
| `select` | 선택박스 | 드롭다운 선택 |
| `button` | 버튼 | 클릭 액션 |
| `checkbox` | 체크박스 | 불린 값 선택 |
| `radio` | 라디오 버튼 | 단일 선택 |
| `date` | 날짜 선택 | 날짜 피커 |
| `file` | 파일 업로드 | 파일 선택 |
## 사용 예시
### 1. 기본 텍스트 입력 컴포넌트
```bash
node scripts/create-component.js text-input "텍스트 입력" "기본 텍스트 입력 컴포넌트" input text
```
### 2. 숫자 입력 컴포넌트
```bash
node scripts/create-component.js number-input "숫자 입력" "숫자만 입력 가능한 컴포넌트" input number
```
### 3. 버튼 컴포넌트
```bash
node scripts/create-component.js action-button "액션 버튼" "사용자 액션을 처리하는 버튼" action button
```
### 4. 차트 컴포넌트
```bash
node scripts/create-component.js bar-chart "막대 차트" "데이터를 막대 그래프로 표시" chart
```
### 5. 이미지 표시 컴포넌트
```bash
node scripts/create-component.js image-viewer "이미지 뷰어" "이미지를 표시하는 컴포넌트" media
```
## 생성되는 파일들
CLI를 실행하면 다음 파일들이 자동으로 생성됩니다:
```
lib/registry/components/[컴포넌트이름]/
├── index.ts # 컴포넌트 정의 및 메타데이터
├── [컴포넌트이름]Component.tsx # 메인 컴포넌트 파일
├── [컴포넌트이름]Renderer.tsx # 자동 등록 렌더러
├── [컴포넌트이름]ConfigPanel.tsx # 설정 패널 UI
├── types.ts # TypeScript 타입 정의
└── README.md # 컴포넌트 문서
```
## 자동 처리되는 작업들
### ✅ 자동 등록
- `lib/registry/components/index.ts`에 import 구문 자동 추가
- 컴포넌트 레지스트리에 자동 등록
- 브라우저에서 즉시 사용 가능
### ✅ 타입 안전성
- TypeScript 인터페이스 자동 생성
- 컴포넌트 설정 타입 정의
- Props 타입 안전성 보장
### ✅ 설정 패널
- 웹타입별 맞춤 설정 UI 자동 생성
- 공통 설정 (disabled, required, readonly) 포함
- 실시간 설정 값 업데이트
### ✅ 문서화
- 자동 생성된 README.md
- 사용법 및 설정 옵션 문서
- 개발자 정보 및 CLI 명령어 기록
## CLI 실행 후 확인사항
### 1. 브라우저에서 확인
```javascript
// 개발자 도구에서 확인
__COMPONENT_REGISTRY__.get("컴포넌트이름")
```
### 2. 컴포넌트 패널에서 테스트
1. 화면 디자이너 열기
2. 컴포넌트 패널에서 새 컴포넌트 확인
3. 드래그앤드롭으로 캔버스에 추가
4. 속성 편집 패널에서 설정 테스트
### 3. 설정 패널 동작 확인
- 속성 변경 시 실시간 반영 여부
- 필수/선택 설정들의 정상 동작
- 웹타입별 특화 설정 확인
## 트러블슈팅
### import 자동 추가 실패
만약 index.ts에 import가 자동 추가되지 않았다면:
```typescript
// lib/registry/components/index.ts에 수동 추가
import "./컴포넌트이름/컴포넌트이름Renderer";
```
### 컴포넌트가 패널에 나타나지 않는 경우
1. 브라우저 새로고침
2. 개발자 도구에서 오류 확인
3. import 구문 확인
4. TypeScript 컴파일 오류 확인
### 설정 패널이 제대로 작동하지 않는 경우
1. 타입 정의 확인 (`types.ts`)
2. ConfigPanel 컴포넌트 확인
3. 웹타입별 설정 로직 확인
## 고급 사용법
### 사용자 정의 옵션
```bash
# 크기 지정
node scripts/create-component.js my-component "내 컴포넌트" "설명" display --size=300x50
# 태그 추가
node scripts/create-component.js my-component "내 컴포넌트" "설명" display --tags=tag1,tag2,tag3
# 작성자 지정
node scripts/create-component.js my-component "내 컴포넌트" "설명" display --author="개발자명"
```
### 생성 후 커스터마이징
1. **컴포넌트 로직 수정**: `[컴포넌트이름]Component.tsx`
2. **설정 패널 확장**: `[컴포넌트이름]ConfigPanel.tsx`
3. **타입 정의 확장**: `types.ts`
4. **렌더러 로직 수정**: `[컴포넌트이름]Renderer.tsx`
## 베스트 프랙티스
### 네이밍 규칙
- **컴포넌트이름**: kebab-case (예: `text-input`, `date-picker`)
- **표시이름**: 명확한 한글명 (예: "텍스트 입력", "날짜 선택")
- **설명**: 구체적이고 명확한 설명
### 카테고리 선택
- 컴포넌트의 주된 용도에 맞는 카테고리 선택
- 일관성 있는 카테고리 분류
- 사용자가 찾기 쉬운 카테고리 구조
### 웹타입 선택
- 컴포넌트의 데이터 타입에 맞는 웹타입 선택
- 기본 동작과 검증 로직 고려
- 확장 가능성 고려
## 결론
이 CLI 도구를 사용하면 화면 관리 시스템에 새로운 컴포넌트를 빠르고 일관성 있게 추가할 수 있습니다. 자동 생성된 템플릿을 기반으로 비즈니스 로직에 집중하여 개발할 수 있습니다.
더 자세한 정보는 [컴포넌트 시스템 가이드](./컴포넌트_시스템_가이드.md)를 참조하세요.