ICT·ErrorProvider·StartupService · 지원 모듈 — 상세 구조도
기준 커밋:
1398d109c391c4044cae26d0e9aea4d3f08d9670. 도식은 기존 구현을 설명한다. 제품 이미지 설치·실기기 성공을 증명하지 않는다.
검사 UI·설비 socket, 오류 DB, 부팅 reset은 독립적인 세 책임
SVG 원본 크게 열기 · Mermaid 원본 · 모듈 분석 본문
읽는 순서와 연결 의미
행은 책임·실행 경로별 묶음이며 별도 프로세스라는 뜻은 아니다. 같은 행의 인접 연결은 화살표로, 행을 넘거나 떨어진 상자 사이 연결은 동일한 E 번호의 출력·입력 포트로 표시한다. 아래 표는 방향과 의미를 모두 풀어 쓴 것이다. 그림의 코드 파일명을 눌러 저장소로 이동하는 기능은 없으며, 아래 경로로 지정 커밋을 조회할 수 있다.
| 연결 | 출발 → 도착 | 동작 | 종류 |
|---|---|---|---|
| E01 | LineTest UI / ViewModel → ICT Repository | 시험 요청 | 호출·명령 |
| E02 | Ict / IctSocket → ICT Repository | 설비 명령 | 호출·명령 |
| E03 | ICT Repository → DeviceControlResolver | resolve | 호출·명령 |
| E04 | ErrorProvider → DatabaseHelper | CRUD | 데이터·구성 의존 |
| E05 | ErrorProvider → ContentResolver.notifyChange | 변경 알림 | 결과·이벤트 |
| E06 | Startup BootReceiver → StartupService | startService | 호출·명령 |
| E07 | StartupService → UpdatePreferences | 파일 조건 조회 | 데이터·구성 의존 |
| E08 | UpdatePreferences → 10초 Handler → reset | 조건 충족 시 예약 | 호출·명령 |
구성요소별 책임과 코드 근거
| 상자 | 구성요소 | 책임·상태 | 지정 커밋의 소스 경로 |
|---|---|---|---|
| N01 | LineTest UI / ViewModel | test state / result 표시 / Application에서 DA 연결 | apps/ICT/app/src/main/java/com/sk/airbot/ict/ui/linetest/LineTestViewModel.kt |
| N02 | Ict / IctSocket | 설비 command dispatch / heartbeat 50초 timeout | apps/ICT/app/src/main/java/com/sk/airbot/ict/server/Ict.kt |
| N03 | ICT Repository | 충전·구동·센서·소음·음성 / sendModuleCommand adapter | apps/ICT/app/src/main/java/com/sk/airbot/ict/data/CommonRepository.kt |
| N04 | DeviceControlResolver | 연결 확인 후 IDeviceControl / DeviceAgent 검사 명령 | apps/ICT/app/src/main/java/com/sk/airbot/ict/data/DeviceControlResolver.java |
| N05 | ErrorProvider | errors / errors/# URI / caller permission 경계 | apps/ErrorProvider/src/com/sk/airbot/providers/error/ErrorProvider.java |
| N06 | DatabaseHelper | errors.db / WAL / upgrade DROP + create | apps/ErrorProvider/src/com/sk/airbot/providers/error/ErrorProvider.java |
| N07 | ContentResolver.notifyChange | insert / update / delete 후 / 등록 observer 통지 | apps/ErrorProvider/src/com/sk/airbot/providers/error/ErrorProvider.java |
| N08 | ErrorDataCleanupService | action 검사만 존재 / 실제 삭제·retention 없음 | apps/ErrorProvider/src/com/sk/airbot/providers/error/ErrorDataCleanupService.java |
| N09 | Startup BootReceiver | BOOT_COMPLETED / startService | apps/StartupService/app/src/main/java/com/sk/airbot/startupservice/receiver/BootReceiver.java |
| N10 | StartupService | foreground / overlay popup / captive_portal_mode=0 | apps/StartupService/app/src/main/java/com/sk/airbot/startupservice/StartupService.java |
| N11 | UpdatePreferences | persist / OTA / data2 파일 / 버전·marker 조건 판정 | apps/StartupService/app/src/main/java/com/sk/airbot/startupservice/util/UpdatePreferences.java |
| N12 | 10초 Handler → reset | android FACTORY_RESET broadcast / 실제 wipe는 framework | apps/StartupService/app/src/main/java/com/sk/airbot/startupservice/StartupService.java |
해석 경계와 변경 시 검토
- StartupService의 onBind는 null이다. IIotControl action 이름으로 IoT Binder 서버라고 해석하지 않는다.
- UpdatePreferences는 SharedPreferences가 아닌 파일 I/O다. onDestroy에 Handler/overlay 정리가 없다.
- ErrorProvider cleanup service는 삭제 엔진이 아니다. 시험 결과·권한·reset은 실기기 검증이 필요하다.