docs: sam_stat Phase 5 완료 - 계획 문서 업데이트
- Phase 5 항목 5.1~5.5 전부 ✅ 완료 처리 - 진행률 67% → 83% (5/6 Phase) - 변경 이력에 Phase 5 상세 내역 추가 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,9 +11,9 @@
|
||||
|
||||
| 항목 | 내용 |
|
||||
|------|------|
|
||||
| **마지막 완료 작업** | Phase 4: P2 도메인 + API + 대시보드 전환 완료 (건설/시스템 통계, 이벤트/스냅샷, StatController API, DashboardService 전환) |
|
||||
| **다음 작업** | Phase 5: 최적화 및 안정화 |
|
||||
| **진행률** | 4/6 Phase (67%) |
|
||||
| **마지막 완료 작업** | Phase 5: 최적화 및 안정화 완료 (백필/검증 커맨드, 파티셔닝 준비, Redis 캐싱, 모니터링 알림) |
|
||||
| **다음 작업** | Phase 6: 문서화 및 마무리 |
|
||||
| **진행률** | 5/6 Phase (83%) |
|
||||
| **마지막 업데이트** | 2026-01-29 |
|
||||
|
||||
---
|
||||
@@ -1112,11 +1112,11 @@ docker compose exec mysql mysql -u root -proot sam_stat \
|
||||
### Phase 5: 최적화 및 안정화
|
||||
| # | 작업 항목 | 상태 | 구체적 작업 내용 |
|
||||
|---|----------|:----:|-----------------|
|
||||
| 5.1 | 백필 스크립트 | ⏳ | `stat:backfill --from=2024-01-01 --to=2026-01-28` 커맨드 구현 |
|
||||
| 5.2 | 정합성 검증 | ⏳ | `stat:verify --date=2026-01-28` 원본 vs 통계 교차 검증 커맨드 |
|
||||
| 5.3 | 파티셔닝 | ⏳ | 일간 테이블 연도별 RANGE 파티셔닝 적용 (2년 이상 데이터 축적 후) |
|
||||
| 5.4 | 캐싱 | ⏳ | 대시보드 조회 시 Redis 캐싱 (TTL 5분, 집계 완료 시 캐시 무효화) |
|
||||
| 5.5 | 모니터링 | ⏳ | 집계 실패 시 stat_alerts + FCM 알림 연동 |
|
||||
| 5.1 | 백필 스크립트 | ✅ | `StatBackfillCommand` - `stat:backfill --from= --to= --domain= --tenant= --skip-monthly --skip-dimensions`. CarbonPeriod 일간 순회 + 월간 집계 + 프로그레스바 + 에러 리포트. 테스트: 7도메인 0.2초 |
|
||||
| 5.2 | 정합성 검증 | ✅ | `StatVerifyCommand` - `stat:verify --date= --tenant= --domain= --fix`. sales(수주건수/매출금액), finance(입금액/출금액), system(API요청수/감사로그수) 교차 검증. --fix 시 자동 재집계. 테스트: 6건 전부 일치 |
|
||||
| 5.3 | 파티셔닝 준비 | ✅ | `2026_01_29_300001_prepare_partitioning_daily_tables.php` - 7개 일간 테이블 RANGE COLUMNS(stat_date) 파티셔닝. PK에 stat_date 포함, p2024~p2028 + p_future. 기존 파티션 여부 체크 후 스킵 |
|
||||
| 5.4 | Redis 캐싱 | ✅ | `StatQueryService` - Cache::remember TTL 5분. 키 패턴: `stat:{daily\|monthly\|dashboard}:{tenantId}:...`. `invalidateCache()` 정적 메서드: Redis keys 패턴 매칭 삭제. 집계 완료 시 StatAggregatorService에서 자동 호출 |
|
||||
| 5.5 | 모니터링 알림 | ✅ | `StatMonitorService` - recordAggregationFailure(critical), recordMissingData(warning), recordMismatch(critical), resolveAlerts(). StatAggregatorService catch 블록에서 자동 호출. stat_alerts 테이블 연동 검증 완료 |
|
||||
|
||||
---
|
||||
|
||||
@@ -1279,6 +1279,7 @@ StatSalesDaily::updateOrCreate(
|
||||
| 2026-01-29 | Phase 2 완료 | P0 도메인: 매출/재무/생산 일간+월간 테이블 6개, 모델 6개, 서비스 3개, 스케줄러 2개 등록. 실데이터 집계 검증 완료 |
|
||||
| 2026-01-29 | Phase 3 완료 | P1 도메인: dim_client/dim_product 차원 + 재고/견적/인사 일간 3개 + KPI/알림 2개 = 테이블 7개, 모델 7개, 서비스 4개(Dimension/Inventory/Quote/Hr/KpiAlert), 커맨드 1개, 스케줄러 1개. 실데이터 검증 완료. products→items, client_groups.name→group_name 수정 |
|
||||
| 2026-01-29 | Phase 4 완료 | P2 도메인 + API + 대시보드: stat_project_monthly/stat_system_daily/stat_events/stat_snapshots 테이블 4개, 모델 4개, 서비스 4개(Project/System/StatEvent/StatQuery), StatController + FormRequest 3개 + routes/stats.php, StatEventObserver(6모델), DashboardService sam_stat 전환(폴백 패턴). 버그: whereHas→DB Builder 제거, User모델경로 수정. sam_stat 총 20테이블 |
|
||||
| 2026-01-29 | Phase 5 완료 | 최적화 및 안정화: StatBackfillCommand(백필), StatVerifyCommand(정합성 검증+자동 재집계), 파티셔닝 준비 마이그레이션(7테이블 RANGE), StatQueryService Redis 캐싱(TTL 5분+invalidateCache), StatMonitorService(집계 실패/누락/불일치 알림→stat_alerts), StatAggregatorService에 모니터링+캐시 무효화 연동. severity enum 수정(high→critical). 전체 테스트 통과 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user