IotAgent · MQTT·DeviceAgent 왕복 — 상세 구조도
기준 커밋:
1398d109c391c4044cae26d0e9aea4d3f08d9670. 도식은 기존 구현을 설명한다. 제품 이미지 설치·실기기 성공을 증명하지 않는다.
소스는 분석 가능하지만 AOSP Android.mk는 IotAgent.apk prebuilt를 선택
SVG 원본 크게 열기 · Mermaid 원본 · 모듈 분석 본문
읽는 순서와 연결 의미
행은 책임·실행 경로별 묶음이며 별도 프로세스라는 뜻은 아니다. 같은 행의 인접 연결은 화살표로, 행을 넘거나 떨어진 상자 사이 연결은 동일한 E 번호의 출력·입력 포트로 표시한다. 아래 표는 방향과 의미를 모두 풀어 쓴 것이다. 그림의 코드 파일명을 눌러 저장소로 이동하는 기능은 없으며, 아래 경로로 지정 커밋을 조회할 수 있다.
| 연결 | 출발 → 도착 | 동작 | 종류 |
|---|---|---|---|
| E01 | AWS MQTT manager → subscribeToTopic | Connected 후 구독 | 호출·명령 |
| E02 | subscribeToTopic → CmdTopic | JSON 분류 | 호출·명령 |
| E03 | CmdTopic → DeviceControlProxy 사용 | 기기 명령 경로 | 호출·명령 |
| E04 | DeviceControlProxy 사용 → DeviceAgent | IDeviceControl | 호출·명령 |
| E05 | DeviceAgent → handleModuleCallback | callback | 결과·이벤트 |
| E06 | handleModuleCallback → topic publish 경로 | method별 보고 | 호출·명령 |
| E07 | DeviceAgent → IIotControl Stub | IIotControl | 호출·명령 |
| E08 | IIotControl Stub → topic publish 경로 | 상태·응답 분기 | 호출·명령 |
| E09 | AWS MQTT manager → AWSIotMqttHandler | 연결 손실 | 결과·이벤트 |
구성요소별 책임과 코드 근거
| 상자 | 구성요소 | 책임·상태 | 지정 커밋의 소스 경로 |
|---|---|---|---|
| N01 | AWS MQTT manager | connect / Connected / 외부 SDK 연결 callback | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/IotAgent.java |
| N02 | subscribeToTopic | payload bytes → JSON / control / response / jobs | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/IotAgent.java |
| N03 | CmdTopic | setCmdTopic / Respones / topic별 DTO와 요청 처리 | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/mqtt/topic/CmdTopic.java |
| N04 | DeviceControlProxy 사용 | DeviceAgent에 제품 명령 / 포함 API jar에 의존 | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/IotAgent.java |
| N05 | DeviceAgent | MainApi → 제품 도메인 / 실행 결과·상태 callback | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/main/api/MainApi.java |
| N06 | handleModuleCallback | DeviceControl 결과 분기 / method별 topic 변환 | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/IotAgent.java |
| N07 | topic publish 경로 | callTopic_Request / publish / 클라우드 상태·응답 송신 | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/mqtt/topic/CmdTopic.java |
| N08 | IIotControl Stub | DA → IoT의 별도 입구 / command switch | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/IotAgent.java |
| N09 | WifiMonitor | Wi-Fi 상태 관찰 / 연결과 AWS ready 구분 | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/WifiMonitor.java |
| N10 | AWSIotMqttHandler | 연결 손실 후 지연 재연결 / subscription 복원 경로 | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/IotAgent.java |
| N11 | IotAgent.onCreate | foreground / Handler / DeviceControl 연결 준비 | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/IotAgent.java |
| N12 | job 메시지 처리 | handleJobMessage / 일반 control topic과 구별 | apps/IotAgent/app/src/main/java/com/sk/airbot/iotagent/IotAgent.java |
해석 경계와 변경 시 검토
- MQTT ACK는 장치 기능 완료가 아니다. 구독·dispatch·물리 결과·업무 응답을 나눠 관찰한다.
- prebuilt APK와 여기 있는 Java 소스가 일치하는지는 검증하지 않았다.
- endpoint·인증서·credential 값은 구조도에 포함하지 않는다.