Files
hanarang-dashboard/.qa/SPRINT-008-review-1.md

44 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SPRINT-008 QA Review — Iteration 1
- **검증일시:** 2026-04-04 16:35 KST
- **검증자:** 다랑이 (Evaluator)
- **결과:** ❌ FAILED (blocking 3건)
## 검증 항목
| 항목 | 결과 |
|------|------|
| npm install | ✅ |
| prisma generate | ✅ |
| npm test | ✅ 26/26 pass |
| npm run build (BE) | ✅ |
| npm run build (FE) | ✅ 16 routes |
## 🔴 Blocking
### B1: SettingsController PUT body 미검증 — 임의 키 주입
- **파일:** settings.controller.ts, settings.service.ts
- **문제:** `Record<string, string>` 그대로 upsert → DEFAULT_SETTINGS에 없는 키도 DB에 삽입
- **수정:** saveAll()에서 DEFAULT_SETTINGS 키만 필터링
### B2: EventsScheduler + SistersScheduler 중복 — SSH 2배 호출
- **파일:** events.module.ts, events.scheduler.ts, sisters.scheduler.ts
- **문제:** 둘 다 providers에 등록, 둘 다 30초마다 broadcastSisterStatus() 실행
- **수정:** EventsScheduler 제거 (SistersScheduler가 대체)
### B3: SistersScheduler에 OnModuleDestroy 없음 — 메모리 누수
- **파일:** sisters.scheduler.ts
- **문제:** clearInterval 없음 → 서버 종료/HMR 시 좀비 타이머
- **수정:** `implements OnModuleDestroy` + `clearInterval(this.timer)`
## Non-blocking (9건)
- N1: avatar @Res() → NotFoundException 대신 res.status(404)
- N2: getSystemInfo null 반환 → 컨트롤러 null 체크 없음
- N3: SSH 커넥션 풀링 없음 (30초×4자매=16개 핸드셰이크)
- N4: top/free/df 파싱 환경 의존성 + disk % 미파싱
- N5: sisters 페이지 15초 폴링 + WS 30초 브로드캐스트 중복
- N6: avatar 캐시 사이즈 제한 없음
- N7: DEFAULT_SETTINGS FE/BE 중복 정의
- N8: sisterEmojis/sisterDisplayNames 여전히 3곳 중복
- N9: SSH 4개 병렬 → 1개 연결 4개 명령으로 최적화 권장