Files
goldenChart/frontend_golden/WEEK_3-4_IMPLEMENTATION_SUMMARY.md
T
2026-05-23 15:11:48 +09:00

11 KiB

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:

{
  "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
라우팅 없음 (단일 페이지 앱 내 페이지 전환)

검증 항목

  • 드래그 앤 드롭 동작
  • API 통신 (CRUD)
  • 자연어 변환
  • 전략 저장/로드
  • 기존 화면 정상 동작
  • 다크 모드 지원
  • 반응형 레이아웃
  • TypeScript 타입 안정성
  • 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)

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

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