애플리케이션(PHP, 화면) 개선 결과 반영

This commit is contained in:
2026-09-15 21:50:58 +09:00
parent e87e38dbac
commit ded12332d5
2 changed files with 10 additions and 2 deletions
@@ -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개)
@@ -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개 테이블)