예약·설정·유지보수 · 시간과 영속 데이터 — 상세 구조도
기준 커밋:
1398d109c391c4044cae26d0e9aea4d3f08d9670. 도식은 기존 구현을 설명한다. 제품 이미지 설치·실기기 성공을 증명하지 않는다.
예약 저장과 실행 admission, 설정 적용, 오류·보고 데이터의 소유권
SVG 원본 크게 열기 · Mermaid 원본 · 모듈 분석 본문
읽는 순서와 연결 의미
행은 책임·실행 경로별 묶음이며 별도 프로세스라는 뜻은 아니다. 같은 행의 인접 연결은 화살표로, 행을 넘거나 떨어진 상자 사이 연결은 동일한 E 번호의 출력·입력 포트로 표시한다. 아래 표는 방향과 의미를 모두 풀어 쓴 것이다. 그림의 코드 파일명을 눌러 저장소로 이동하는 기능은 없으며, 아래 경로로 지정 커밋을 조회할 수 있다.
| 연결 | 출발 → 도착 | 동작 | 종류 |
|---|---|---|---|
| E01 | ScheduleManager → ScheduleDao | insert / update | 데이터·구성 의존 |
| E02 | ScheduleManager → ScheduleAlarmReceiver | AlarmManager 전달 | 호출·명령 |
| E03 | ScheduleInitRunner → ScheduleDao | 활성 예약 조회 | 데이터·구성 의존 |
| E04 | Settings → SettingPreferences | 설정 저장 | 데이터·구성 의존 |
| E05 | DeviceAgentProvider → SettingPreferences | query 우선 | 데이터·구성 의존 |
| E06 | SensorCalibrationManager → Settings | settingChanged | 호출·명령 |
구성요소별 책임과 코드 근거
| 상자 | 구성요소 | 책임·상태 | 지정 커밋의 소스 경로 |
|---|---|---|---|
| N01 | ScheduleManager | setSchedule / exact alarm / 예약 생성·수정 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/schedule/ScheduleManager.java |
| N02 | ScheduleDao | SQLite 예약 저장 / 부팅 시 재등록 입력 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/schedule/db/ScheduleDao.java |
| N03 | ScheduleAlarmReceiver | 활성·요일·시간·GPS·공휴일 / 30초 메모리 중복 억제 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/schedule/ScheduleAlarmReceiver.java |
| N04 | ScheduleInitRunner | 활성 예약 재등록 / 재등록 알람 초기화 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/schedule/ScheduleInitRunner.java |
| N05 | Settings | volume / language / LED 등 / 저장 + 변경 side effect | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/settings/Settings.java |
| N06 | SettingPreferences | 설정 저장 / SKMPreferences와 구분 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/data/pref/SettingPreferences.java |
| N07 | DeviceAgentProvider | query: Setting 우선 / write: SKMPreferences | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/provider/DeviceAgentProvider.java |
| N08 | SensorCalibrationManager | 14일 보정 주기 / alarm / MCU 설정 후 10초 done | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/calibration/SensorCalibrationManager.java |
| N09 | AlertDao | alert.db / 최근 30일 조회 / 최대 200개 trim | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/alert/AlertDao.java |
| N10 | ErrorHistoryManager | 외부 errors URI / insert / resolved update | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/maintenance/ErrorHistoryManager.java |
| N11 | DeviceUsageManager | 사용량 lazy read / 증가 writer는 이 클래스 밖 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/maintenance/DeviceUsageManager.java |
| N12 | PartReplacementManager | 허용 부품 key의 교체일 / 날짜 reset / 저장 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/maintenance/PartReplacementManager.java |
해석 경계와 변경 시 검토
- AlarmManager와 SQLite는 Android 플랫폼이다. 저장 성공·알람 발화·정책 통과·물리 완료를 구분한다.
- 30초 중복 억제는 메모리 Map이다. 재부팅을 넘는 영속 idempotency가 아니다.
- Alert DB upgrade는 DROP/recreate다. DeviceAgentProvider의 읽기·쓰기 저장소 불일치는 검토 항목이다.