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

6.4 KiB
Raw Blame History

코드 정리 & 리뷰 · 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).