Files
VesiscanClinicalAndroid/docs/CODE_REVIEW_2026-08-12.md
T
dw.jang b1f7b9fa0e docs: 2026-08-12 코드 정리 & 리뷰 산출 문서
3개 카테고리 (A NIRS · B YOLO · C 참조 0) 정리 결과 통합 문서.

포함:
  · 카테고리별 실제 제거 항목 · LOC · 커밋 해시 (demo/cloud 각각)
  · 총 ~2,378 LOC + 10.6 MB APK 감소
  · Category D (유지 권장) 후속 검토 리스트
  · Explore 조사 오탐 회고 (DfuBleScanner/DfuNus/DfuNusConnection 실사용 확인)
  · 남은 개선 여지 (시그니처 축소 · enum orphan · SharedPrefs 마이그레이션)
  · 브랜치별 커밋 체인 · 검증 상태

브랜치 최종:
  · demo-final:     0fe0687 → 1ce1994 → 26dc53b → b028060
  · feature/cloud-mvp: 844e0c0 → 7ff166f → dce9cca → 13955bc
2026-08-12 16:16:17 +09:00

123 lines
6.4 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.
# 코드 정리 & 리뷰 · 2026-08-12
_대상: demo-final + feature/cloud-mvp 두 브랜치 · 총 ~2,400 LOC + 10.6 MB APK 감소_
## 1. 실제 제거 (완료)
### Category A · NIRS / VIVAMYO 세트 (사용자 요청)
- **완전 제거 파일 6개** (~1,168 LOC): `NirsManager` · `NirsCalcEngine` · `NirsConstants` · `NirsData` · `VivamyoMonitoringView` · `CalibrationView`
- **부분 편집 8개 파일** (~135 LOC): `AppState` · `MainActivity` · `BleManager` · `MeasurementService` · `SensorMode` · `SensorSelectView` · `strings.xml` × 2
- **핵심 변경**: `SensorMode` enum `NIRS` value 삭제 · BleManager NIRS 콜백 4 + 명령 5 + RX branch 4 삭제 · `AppScreen.NIRS_CALIBRATION`/`VIVAMYO_MONITORING` enum 삭제
- **커밋**: demo-final `1ce1994` · cloud-mvp `7ff166f`
### Category B · YOLO / CameraX / OCR 세트 (사용자 요청)
- **완전 제거**: `YoloDetector` · `SimpleMeasureService` · `CCPosition` · `UrineCameraScreen` (~710 LOC) + `urinecup_best.onnx` (10.6 MB)
- **Gradle deps 삭제**: onnxruntime-android · mlkit text-recognition · androidx.camera × 4
- **AndroidManifest.xml**: CAMERA permission + hardware.camera feature 삭제
- **부분 편집**: `AppState` (URINE_CAMERA enum) · `MainActivity` · `PiezoMonitoringView` (카메라 카드 · LaunchedEffect) · `MainShell` (cloud-mvp 만) · strings.xml × 2 (15 키)
- **커밋**: demo-final `26dc53b` · cloud-mvp `dce9cca`
### Category C · 참조 0 dead code
- 당초 조사 대상 **5개 중 2개만 실제 제거**:
- ✅ `speech/HfVolumeExtractor.kt` (298 LOC · 옛 HuggingFace API 실험)
- ✅ `res/raw/bladdy_loading3.riv` (asset · 참조 0)
- **⚠️ Explore 조사 오탐 발견** — 3개 파일이 실제로 `DfuManager` 에서 참조 중 · 컴파일 실패로 확인:
- ❌ `DfuBleScanner.kt` (`BleScanner`, `ScannedDevice`)
- ❌ `DfuNus.kt` (`NusPacket`)
- ❌ `DfuNusConnection.kt` (`NusConnection`)
- → 3개 모두 **유지**. `git checkout HEAD --` 로 복구.
- **okhttp3** dependency 는 `LabdbClient` 에서 사용 중 → 유지.
- **커밋**: demo-final `b028060` · cloud-mvp `13955bc`
### 총합
| 카테고리 | LOC | Asset | 커밋 (demo/cloud) |
|---|---:|---:|---|
| A · NIRS | ~1,300 | — | 1ce1994 / 7ff166f |
| B · YOLO/Camera | ~780 | 10.6 MB | 26dc53b / dce9cca |
| C · 참조 0 | ~298 | 1 | b028060 / 13955bc |
| **합계** | **~2,378** | **~10.6 MB** | — |
---
## 2. 코드리뷰 · 발견 사항 (elite programmer 관점)
### 2-1. Category D (유지 권장 · 애매) — 사용자 확인 필요
Explore 조사에서 참조 0 이라 판정됐으나 · 실제 실사용 여부 확실치 않아 유지한 항목. 개별 검증 후 각각 삭제/유지 결정 필요:
| 항목 | LOC | 판정 |
|---|---:|---|
| `ConsentView.kt` | 194 | `AppScreen.CONSENT` 진입점 없음 · 하지만 flow 재설계 대비 |
| `SensorSelectView.kt` | 126 | `AppScreen.SENSOR_SELECT` 진입점 없음 · 향후 센서 추가 대비 |
| `VoidingDiaryView.kt` | 294 | `AppScreen.VOIDING_DIARY` 진입점 없음 · History 탭에서 lazy import 가능 |
| `ReminderSettingsView.kt` | ? | `AppScreen.REMINDER_SETTINGS` 진입점 없음 |
| `CatheterizeSheet.kt` | 226 | 이름만 겹칠 수도 · 확실치 않음 |
| `AlignmentAdvisorV2.kt` | 722 | clinical alignment session 진입점 확인 필요 |
| `AlignmentAdvisorV3.kt` | 256 | `demo-final` 만 존재 · 실사용 확인 필요 |
| `MeasurementService` | (수정됨) | `getInstance` 호출 0 · 하지만 이번에 NIRS 정리하며 편집만 · 별도 확인 필요 |
**권장**: 다음 정리 세션에서 각각 grep 재검증 후 확실한 것만 삭제.
### 2-2. 이번 정리 중 발견된 개선 사항
#### A · 시그니처 축소 여지
- `MeasurementService.performMeasurement(mode: SensorMode, ...)` — `SensorMode` 가 PIEZO 만 남았으므로 mode 파라미터 자체 삭제 가능. 지금은 향후 센서 추가 대비 유지 · 나중에 정말 안 늘어나면 삭제.
- `AppState.selectSensor(mode: SensorMode)` — 위와 동일.
#### B · 남은 enum orphan (컴파일 되지만 dead)
- `AppScreen.CONSENT` · `SENSOR_SELECT` · `VOIDING_DIARY` · `REMINDER_SETTINGS` — 진입점 (`appState.currentScreen = ...`) 없음. Category D 화면 삭제 시 enum 도 함께 정리.
#### C · Deprecated 주석 검사
- `AppScreen.HOME` 에 "레거시 — 더 이상 라우팅 타깃 아님" 주석 (cloud-mvp only). enum 유지 이유가 legacy 만족 X · 삭제 검토.
#### D · SharedPrefs 마이그레이션 안전
- `SensorMode.NIRS` value 삭제 후 · `UserStorage.sensorMode` 는 `valueOf()` 실패 시 `PIEZO` fallback 이 이미 있어 기존 사용자 데이터 손상 없음. **verified**.
### 2-3. 조사 오탐 회고
**Explore agent 참조 0 판정의 한계**:
- 파일 이름 기반 grep + 클래스 이름 grep 만으로는 top-level function 참조를 놓칠 수 있음
- 특히 `DfuManager` 처럼 `import com.medithings.vesiscan.firmware.BleScanner` 형태로 top-level function import 사용 시 클래스 이름과 파일 이름이 달라 놓침
- **교훈**: 삭제 전 반드시 `./gradlew compile` 로 확인 · 실패 시 즉시 `git checkout` 복구 후 재판정
---
## 3. 브랜치별 최종 상태
### demo-final
```
0fe0687 → 1ce1994 (A: NIRS) → 26dc53b (B: YOLO) → b028060 (C: 참조 0)
```
### feature/cloud-mvp
```
844e0c0 → 7ff166f (A: NIRS) → dce9cca (B: YOLO) → 13955bc (C: 참조 0)
```
두 브랜치 모두 push 완료. 각 카테고리 커밋이 분리돼있어 rollback (git revert) 가능.
---
## 4. 다음 스텝 (선택)
1. **Category D 개별 재검증**:
- 각 화면에 대해 실사용 grep 재확인
- 사용자와 각 화면 필요성 논의 후 삭제/유지
2. **strings.xml 미참조 키 정리**:
- 대규모 grep 스캔 필요 · 별도 세션
3. **AlignmentAdvisorV2/V3 정리**:
- clinical alignment session 진입점 실사용 확인 · dead 이면 대량 삭제 가능
4. **assets/ 검사**:
- `bladdy_loading3.riv` 처럼 미참조 asset 있는지 · Rive 파일 목록 grep
---
## 5. 검증 상태
| 브랜치 | 컴파일 | 실기기 |
|---|---|---|
| demo-final (Demo Debug) | ✅ BUILD SUCCESSFUL | 미확인 (재설치 필요) |
| feature/cloud-mvp (Dev Debug) | ✅ BUILD SUCCESSFUL | 미확인 |
**주의**: 컴파일 통과 = 문법 검증만. **실기기 회귀 테스트 권장** (앱 진입 → 정렬 → 측정 → 히스토리 → 설정 → DFU · 각 flow smoke test).