# Week 3-4: Frontend 구현 완료

## 📋 구현 완료 목록

### 1. API 서비스
- ✅ **strategyDSLApi.ts** (600+ 라인)
  - LogicNode, ConditionDSL, StrategyDSLDto 타입 정의
  - CRUD API 함수 (생성, 조회, 수정, 삭제)
  - 유틸리티 함수 (유효성 검증, 자연어 변환 등)
  - 12개 API 엔드포인트 연동

### 2. 드래그 앤 드롭 컴포넌트 (strategy-tree/)
- ✅ **NodePalette.tsx** (300+ 라인)
  - 드래그 가능한 지표/조건 팔레트
  - 논리 연산자 (AND, OR, NOT)
  - 보조 지표 (CCI, MACD, RSI 등 8개)
  - 사용 가이드 및 예시 표시

- ✅ **TreeNode.tsx** (280+ 라인)
  - 재귀적 트리 노드 렌더링
  - 드래그 앤 드롭 지원 (@dnd-kit)
  - 노드 타입별 색상 및 아이콘
  - 편집/삭제/자식 추가 액션

- ✅ **ConditionEditor.tsx** (350+ 라인)
  - 조건 설정 다이얼로그
  - 지표 타입 선택
  - 조건 타입 선택 (13종류)
  - 기준값, 기간 입력
  - 실시간 미리보기

- ✅ **NaturalLanguagePreview.tsx** (250+ 라인)
  - DSL → 자연어 변환
  - 전략 통계 (노드 수, 조건 수, 깊이, 복잡도)
  - 유효성 검증 알림
  - 복잡도 경고

- ✅ **StrategyTreeBuilder.tsx** (280+ 라인)
  - DndContext 통합
  - 노드 조작 로직 (찾기, 업데이트, 삭제, 추가)
  - 드래그 앤 드롭 이벤트 처리
  - 조건 편집 다이얼로그 통합

### 3. 메인 페이지
- ✅ **StrategyTreeBuilderPage.tsx** (450+ 라인)
  - 3-컬럼 레이아웃
    - 왼쪽: 전략 목록 + 팔레트
    - 중앙: 전략 편집기
    - 오른쪽: 자연어 미리보기
  - 전략 CRUD 기능
  - 저장/삭제 다이얼로그
  - 스낵바 알림

### 4. 기존 파일 수정
- ✅ **App.tsx** (수정)
  - StrategyTreeBuilderPage import 추가
  - 메뉴 항목 추가
    - "전략(기존)" → StrategyRulePage
    - "전략(드래그)" → StrategyTreeBuilderPage
  - renderPage에 'strategy-tree' 케이스 추가

---

## 📊 구현 통계

| 항목 | 개수 | 라인 수 |
|------|------|---------|
| API 서비스 | 1개 | 600+ |
| 컴포넌트 | 5개 | 1,460+ |
| 페이지 | 1개 | 450+ |
| App.tsx 수정 | - | +20 |
| **총계** | **7개 파일** | **2,530+ 라인** |

---

## 🎯 핵심 달성 사항

### ✅ 기존 기능 100% 보존
- `StrategyRulePage.tsx` 수정 없음
- 기존 메뉴 항목 그대로 유지
- 기존 API (`strategyRuleApi.ts`) 영향 없음
- 기존 백테스트 화면 정상 동작

### ✅ 드래그 앤 드롭 UI 완성
- @dnd-kit 라이브러리 활용
- 직관적인 트리 구조 편집
- 실시간 미리보기
- 자연어 설명 자동 생성

### ✅ Material-UI 디자인 일관성
- 기존 테마 시스템 활용
- 다크 모드 완벽 지원
- 반응형 레이아웃 (Grid 시스템)

### ✅ 사용자 경험 최적화
- 드래그 가이드 제공
- 실시간 유효성 검증
- 복잡도 경고
- 스낵바 알림

---

## 🔍 코드 검증 완료

- ✅ **Lint 오류 없음**
- ✅ **TypeScript 타입 안정성 보장**
- ✅ **재사용 가능한 컴포넌트 구조**
- ✅ **명확한 props 인터페이스**

---

## 🎨 UI 구조

```
┌─────────────────────────────────────────────────────────────────┐
│ 🎨 전략 설정 (드래그 방식)           [새로고침] [새 전략] [저장] │
├───────────────┬──────────────────────────┬───────────────────────┤
│               │                          │                       │
│ 📋 전략 목록  │  ✏️ 전략 편집기          │  📝 전략 미리보기      │
│               │                          │                       │
│ □ CCI 전략    │  ┌─────────────────┐   │  📊 통계              │
│ □ MACD 전략   │  │    AND 노드     │   │  - 노드: 3개          │
│ □ RSI 전략    │  └──┬──────────┬───┘   │  - 조건: 2개          │
│               │     │          │        │  - 깊이: 2            │
│ [+ 새 전략]   │  ┌─────┐   ┌─────┐     │  - 복잡도: 간단함     │
│               │  │ CCI │   │ RSI │     │                       │
│ ─────────────  │  └─────┘   └─────┘     │  📝 설명              │
│               │                          │  "다음 조건을 모두    │
│ 🔗 논리 연산자│                          │   만족:              │
│ [AND] [OR]    │                          │   CCI(20)가 -100을   │
│ [NOT]         │                          │   상향 돌파          │
│               │                          │   RSI(14)가 30 이하" │
│ 📊 보조 지표  │                          │                       │
│ [CCI] [MACD]  │                          │  ✅ 전략이 유효합니다 │
│ [RSI] ...     │                          │                       │
└───────────────┴──────────────────────────┴───────────────────────┘
```

---

## 🚀 주요 기능

### 1. 드래그 앤 드롭
- **팔레트에서 노드 드래그**
  - 논리 연산자 (AND/OR/NOT)
  - 보조 지표 (CCI, MACD, RSI 등)
- **트리 구조 생성**
  - 자유로운 계층 구조
  - 재귀적 렌더링
- **드롭 영역 하이라이트**
  - 드롭 가능한 영역 표시
  - 실시간 피드백

### 2. 조건 편집
- **지표 선택**
  - 12종류 보조 지표 지원
  - 권장 기간 자동 설정
- **조건 타입 선택**
  - 13종류 조건 지원
  - 조건별 필수 입력 항목 자동 표시
- **실시간 미리보기**
  - 설정 중인 조건 자연어 표시

### 3. 자연어 변환
- **DSL → 한글 변환**
  - 논리 구조 명확히 표현
  - 들여쓰기로 계층 표시
- **통계 정보**
  - 노드 개수, 조건 개수
  - 트리 깊이, 복잡도 점수
- **유효성 검증**
  - 저장 가능 여부 표시
  - 복잡도 경고

### 4. 전략 관리
- **CRUD 작업**
  - 생성, 조회, 수정, 삭제
- **전략 복제**
  - 기존 전략 복사하여 새 전략 생성
- **활성화 관리**
  - 개별 전략 활성화/비활성화
- **FSM 토글**
  - Finite State Machine 사용 여부 설정

---

## 📝 사용 예시

### 예시 1: CCI 침체 탈출 전략

**구성:**
```
AND 노드
  ├─ CCI 조건: -100 상향 돌파
  └─ RSI 조건: 30 이하
```

**자연어:**
```
다음 조건을 모두 만족:
  CCI(20)가 -100을 상향 돌파
  RSI(14)가 30 이하
```

**DSL JSON:**
```json
{
  "id": "node-1",
  "type": "AND",
  "children": [
    {
      "id": "node-2",
      "type": "CONDITION",
      "condition": {
        "indicatorType": "CCI",
        "conditionType": "CROSS_UP",
        "targetValue": -100,
        "period": 20
      }
    },
    {
      "id": "node-3",
      "type": "CONDITION",
      "condition": {
        "indicatorType": "RSI",
        "conditionType": "BELOW",
        "targetValue": 30,
        "period": 14
      }
    }
  ]
}
```

### 예시 2: 복합 전략 (OR 조건)

**구성:**
```
OR 노드
  ├─ MACD 조건: 골든 크로스
  └─ Stochastic 조건: 과매도
```

**자연어:**
```
다음 조건 중 하나 이상 만족:
  MACD(12) 골든 크로스
  Stochastic(14) 과매도 구간
```

---

## 🔄 데이터 흐름

### 전략 생성 흐름
```
1. 사용자: 팔레트에서 AND 노드 드래그
   ↓
2. Frontend: LogicNode 생성 (type: "AND")
   ↓
3. 사용자: CCI 지표 드래그 → AND 노드에 드롭
   ↓
4. Frontend: CONDITION 노드 생성 → 자식으로 추가
   ↓
5. 사용자: 조건 편집 (기준값 -100, 기간 20)
   ↓
6. Frontend: ConditionDSL 업데이트
   ↓
7. 사용자: 저장 버튼 클릭
   ↓
8. Frontend: LogicNode → JSON.stringify
   ↓
9. Backend API: POST /api/strategies/dsl
   ↓
10. Backend: DSL → Legacy 변환 (StrategyConverterService)
   ↓
11. Database: strategy_rule 테이블에 저장
   ↓
12. Frontend: 스낵바 "전략이 생성되었습니다" 표시
```

### 백테스트 실행 흐름
```
1. 사용자: 투자분석 화면에서 전략 선택 (DSL 전략)
   ↓
2. Frontend: 백테스트 요청
   ↓
3. Backend: StrategyRule 조회 (dsl_json 포함)
   ↓
4. Backend: 기존 BacktestService 사용 (변경 없음)
   ↓
5. Backend: ConditionGroup, StrategyCondition 기반 평가
   ↓
6. Frontend: 매수/매도 마커 표시
```

---

## 🎓 기술 스택

| 항목 | 기술 |
|------|------|
| 언어 | TypeScript |
| UI 프레임워크 | React 18 |
| 디자인 시스템 | Material-UI 5 |
| 드래그 앤 드롭 | @dnd-kit |
| 상태 관리 | React Hooks (useState, useEffect) |
| API 통신 | Axios |
| 라우팅 | 없음 (단일 페이지 앱 내 페이지 전환) |

---

## ✅ 검증 항목

- [x] 드래그 앤 드롭 동작
- [x] API 통신 (CRUD)
- [x] 자연어 변환
- [x] 전략 저장/로드
- [x] 기존 화면 정상 동작
- [x] 다크 모드 지원
- [x] 반응형 레이아웃
- [x] TypeScript 타입 안정성
- [x] Lint 오류 없음

---

## 📦 파일 구조

```
frontend/src/
├── services/
│   └── strategyDSLApi.ts          (신규)
├── components/
│   └── strategy-tree/             (신규)
│       ├── NodePalette.tsx
│       ├── TreeNode.tsx
│       ├── ConditionEditor.tsx
│       ├── NaturalLanguagePreview.tsx
│       └── StrategyTreeBuilder.tsx
├── pages/
│   ├── StrategyRulePage.tsx       (기존, 수정 없음)
│   └── StrategyTreeBuilderPage.tsx (신규)
└── App.tsx                         (수정)
```

---

## 🔧 다음 단계 (선택사항)

### Week 5-6: 고급 기능 추가 (선택)
1. **전략 템플릿**
   - 사전 정의된 전략 템플릿 제공
   - 한 클릭으로 적용
2. **전략 시뮬레이션**
   - 드래그 화면에서 바로 백테스트
   - 실시간 성과 미리보기
3. **전략 공유**
   - 전략 내보내기/가져오기 (JSON)
   - 커뮤니티 전략 라이브러리

### Week 7-8: FSM 엔진 통합 (선택)
1. **Indicator FSM 활성화**
   - useFsm 플래그 활용
   - 성능 비교 대시보드
2. **실시간 상태 추적**
   - FSM 상태 시각화
   - 디버깅 도구

---

## 🎉 Week 3-4 구현 완료!

**모든 Frontend 작업이 완료되었습니다.**

- ✅ 드래그 앤 드롭 UI 완성
- ✅ DSL API 통합 완료
- ✅ 기존 기능 100% 보존
- ✅ 사용자 경험 최적화

**사용자는 이제:**
- 기존 폼 방식 (StrategyRulePage)
- 드래그 앤 드롭 방식 (StrategyTreeBuilderPage)

**두 가지 방법으로 전략을 생성할 수 있습니다!**

모든 전략은 동일한 테이블에 저장되며, 기존 백테스트 엔진에서 정상 동작합니다.
