feat: 프로젝트 개요 및 컴포넌트별 명세, 로드맵 등 문서 추가
This commit is contained in:
149
components/phase1/scheduler.md
Normal file
149
components/phase1/scheduler.md
Normal file
@@ -0,0 +1,149 @@
|
||||
# scheduler - 실행 스케줄러
|
||||
|
||||
## 개요
|
||||
|
||||
**scheduler** 컴포넌트는 전략 실행 자동화, 리밸런싱, 승인 워크플로우를 관리합니다.
|
||||
|
||||
### 책임
|
||||
|
||||
- 컨테이너별 실행 일정 관리
|
||||
- 실행 트리거 및 리밸런싱 스케줄링
|
||||
- 승인 요청 및 실행 흐름 제어
|
||||
- 실행 이력 저장 및 알림
|
||||
|
||||
### 의존성
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
Scheduler[scheduler] --> Mgmt[mgmt]
|
||||
Scheduler --> Strategy[strategy]
|
||||
Scheduler --> Risk[risk]
|
||||
Scheduler --> Balance[balance]
|
||||
Scheduler --> Monitor[monitor]
|
||||
Scheduler --> DB[(Database)]
|
||||
|
||||
style Scheduler fill:#FF9800,color:#fff
|
||||
```
|
||||
|
||||
## 주요 기능
|
||||
|
||||
### 1. 스케줄 관리
|
||||
|
||||
```typescript
|
||||
createSchedule(containerId: string, schedule: ScheduleConfig): Schedule
|
||||
updateSchedule(scheduleId: string, config: Partial<ScheduleConfig>): Schedule
|
||||
pauseSchedule(scheduleId: string): boolean
|
||||
resumeSchedule(scheduleId: string): boolean
|
||||
```
|
||||
|
||||
- Cron/interval/이벤트 기반 트리거를 지원합니다.
|
||||
- 시장 시간 및 휴일을 고려해 다음 실행 시점을 계산합니다.
|
||||
|
||||
### 2. 실행 트리거
|
||||
|
||||
```typescript
|
||||
executeStrategy(containerId: string, mode: 'AUTO' | 'MANUAL'): Execution
|
||||
scheduleRebalancing(containerId: string): void
|
||||
```
|
||||
|
||||
- 신호 생성 → 리스크 체크 → 주문 생성 → 승인 처리 순서로 실행합니다.
|
||||
|
||||
### 3. 승인 워크플로우
|
||||
|
||||
```typescript
|
||||
requestApproval(execution: Execution): ApprovalRequest
|
||||
approveExecution(requestId: string, approved: boolean): boolean
|
||||
autoExecuteWithNotification(execution: Execution): ExecutionResult
|
||||
```
|
||||
|
||||
- 승인 모드에서는 예상 주문 내역과 비용을 사용자에게 제공합니다.
|
||||
|
||||
### 4. 실행 이력 관리
|
||||
|
||||
```typescript
|
||||
getExecutionHistory(containerId: string, from: Date): Execution[]
|
||||
getExecutionDetail(executionId: string): ExecutionDetail
|
||||
```
|
||||
|
||||
## 데이터 모델
|
||||
|
||||
```typescript
|
||||
interface Schedule {
|
||||
id: string
|
||||
containerId: string
|
||||
trigger: {
|
||||
type: 'CRON' | 'INTERVAL' | 'EVENT'
|
||||
expression?: string
|
||||
intervalMinutes?: number
|
||||
event?: 'MARKET_OPEN' | 'MARKET_CLOSE'
|
||||
}
|
||||
executionMode: 'AUTO' | 'APPROVAL_REQUIRED'
|
||||
constraints: {
|
||||
marketHoursOnly: boolean
|
||||
skipHolidays: boolean
|
||||
minIntervalHours?: number
|
||||
}
|
||||
isActive: boolean
|
||||
nextRun?: Date
|
||||
lastRun?: Date
|
||||
}
|
||||
|
||||
interface Execution {
|
||||
id: string
|
||||
containerId: string
|
||||
strategyId: string
|
||||
status: 'PENDING' | 'APPROVED' | 'REJECTED' | 'RUNNING' | 'COMPLETED' | 'FAILED'
|
||||
signals: Signal[]
|
||||
plannedOrders: Order[]
|
||||
executedOrders: Order[]
|
||||
estimatedCost: {
|
||||
commission: number
|
||||
totalValue: number
|
||||
}
|
||||
approvalRequest?: ApprovalRequest
|
||||
startedAt?: Date
|
||||
completedAt?: Date
|
||||
error?: string
|
||||
}
|
||||
|
||||
interface ApprovalRequest {
|
||||
id: string
|
||||
executionId: string
|
||||
summary: {
|
||||
numOrders: number
|
||||
buyValue: number
|
||||
sellValue: number
|
||||
estimatedCommission: number
|
||||
}
|
||||
orders: Order[]
|
||||
requestedAt: Date
|
||||
expiresAt: Date
|
||||
approvedAt?: Date
|
||||
approvedBy?: string
|
||||
decision?: 'APPROVED' | 'REJECTED'
|
||||
}
|
||||
```
|
||||
|
||||
## API 명세
|
||||
|
||||
### POST /api/schedules
|
||||
스케줄 생성
|
||||
|
||||
### POST /api/executions/:executionId/approve
|
||||
승인/거부 처리
|
||||
|
||||
## 구현 고려사항
|
||||
|
||||
- 승인 만료 처리 및 재요청 정책을 정의해야 합니다.
|
||||
- 실행 실패 시 재시도/중단 기준을 명확히 둡니다.
|
||||
|
||||
## 관련 문서
|
||||
|
||||
- [주요 워크플로우](../../docs/04-workflows.md)
|
||||
- [공통 데이터 모델](../../docs/03-data-models.md)
|
||||
|
||||
### 관련 컴포넌트
|
||||
- [mgmt - 컨테이너 관리](./mgmt.md)
|
||||
- [strategy - 전략 관리](./strategy.md)
|
||||
- [risk - 리스크 관리](./risk.md)
|
||||
- [balance - 계좌 관리](./balance.md)
|
||||
Reference in New Issue
Block a user