diff --git a/doc/plan/db/260915-improve-stage/result/FINAL-REPORT.md b/doc/plan/db/260915-improve-stage/result/FINAL-REPORT.md index 46cb9c1..a4d932e 100644 --- a/doc/plan/db/260915-improve-stage/result/FINAL-REPORT.md +++ b/doc/plan/db/260915-improve-stage/result/FINAL-REPORT.md @@ -26,14 +26,20 @@ | `ranking_record_hour.php` | `get_ranking_record_hour()` | YEAR/MONTH/HOUR → 범위 조건 | ✅ 완료 | | `ranking_record_day.php` | `get_ranking_record_day()` | YEAR/MONTH/DAYOFMONTH → 범위 조건 | ✅ 완료 | | `ranking_record_month.php` | `get_ranking_record_month()` | YEAR/MONTH → 범위 조건 | ✅ 완료 | -| `history_record.php` | `get_history_record()` | DATE 함수 제거 + SQL Injection 방지 | ✅ 완료 | -| `typing_exam_collection.php` | 8개 함수 | 시간/일간/월간 조건 개선 | ✅ 완료 | +| `history_record.php` | `get_history_record()` | DATE 함수 제거 + SQL Injection 방지 (상한 조건만 사용, 아래 ⚠️ 참고) | ✅ 완료 (후속 수정) | +| `typing_exam_collection.php` | 8개 함수 | 시간/일간/월간 조건 개선 (`getHistoryRecord()`는 아래 ⚠️ 참고) | ✅ 완료 (후속 수정) | **검증 결과:** - ✅ 결과 동일성: 모든 쿼리 일치 (EXCEPT로 확인) - ✅ 성능 개선: 읽는 행 5,804행 → 1행 (5,804배), 비용 8.634 → 0.00488 (1,770배) - ✅ 인덱스 활용: access_type ALL → range, key_length 8 → 13 +> ⚠️ **후속 수정 (2026-09-15, 커밋 629c8ff 검토)** +> - **문제:** `history_record.php` `get_history_record()`와 `typing_exam_collection.php` `getHistoryRecord()`에 하한 조건 `RecordDateTime >= DATE(?) - INTERVAL 7 DAY`가 추가되어, 히스토리가 "기록이 있는 최근 7일"에서 "최근 8일(달력) 안의 기록"으로 바뀜 → 일주일 넘게 쉰 학생은 시작 화면 그래프와 결과 화면 히스토리가 비어 보임 +> - **근거:** 요구사항 "마지막으로 플레이한 7일은 보여준다"([01-improvement-overview.md](../../01-improvement-overview.md)), 원래 계획([02-option1 D·E절](../../02-option1-index-and-query-rewrite.md))에도 상한 조건만 있었음 +> - **수정:** 하한 조건 삭제, `RecordDateTime < DATE(?) + INTERVAL 1 DAY`만 유지 → 기존 `DATE(RecordDateTime) <= ?`와 결과 동일, 인덱스 `(MaestroID, PlayerID, AppID/WritingID, RecordDateTime)` 사용 유지. `bind_param` `'iisss'` → `'iiis'` (정수 ID를 문자열로 바인딩하던 타입도 정리) +> - **재검증 필요:** 8일보다 전 기록만 있는 학생 계정으로 변경 전 쿼리와 결과 비교, 일반 앱·긴글의 시작·결과 화면 히스토리 표시 확인 + --- ### 1️⃣ 인덱스 추가 (5개) diff --git a/doc/plan/db/260915-improve-stage/result/full-compatibility-check.md b/doc/plan/db/260915-improve-stage/result/full-compatibility-check.md index dd2ce8a..249a64d 100644 --- a/doc/plan/db/260915-improve-stage/result/full-compatibility-check.md +++ b/doc/plan/db/260915-improve-stage/result/full-compatibility-check.md @@ -26,6 +26,8 @@ **검증 결과:** ✅ 모든 쿼리 결과 동일, 성능 1,770배 개선 +> ⚠️ **후속 수정 (2026-09-15):** 6번 `get_history_record()`와 7번 `getHistoryRecord()`에 하한 조건(`>= DATE(?) - INTERVAL 7 DAY`)이 추가되어 "기록이 있는 최근 7일" 동작이 "최근 8일 안의 기록"으로 달라졌던 것을 확인하고, 상한 조건만 남기도록 수정함 (`bind_param` `'iiis'`). 자세한 내용은 [FINAL-REPORT.md](FINAL-REPORT.md) 참고. 두 히스토리 쿼리는 재검증 필요 + --- ### 1️⃣ 인덱스 추가 (4개 테이블)