WSS·Streaming · 전용 IPC와 세션 제어 — 상세 구조도
기준 커밋:
1398d109c391c4044cae26d0e9aea4d3f08d9670. 도식은 기존 구현을 설명한다. 제품 이미지 설치·실기기 성공을 증명하지 않는다.
DeviceAgent APK 내부 — front/remote 역할과 실제 실행 수명을 분리
SVG 원본 크게 열기 · Mermaid 원본 · 모듈 분석 본문
읽는 순서와 연결 의미
행은 책임·실행 경로별 묶음이며 별도 프로세스라는 뜻은 아니다. 같은 행의 인접 연결은 화살표로, 행을 넘거나 떨어진 상자 사이 연결은 동일한 E 번호의 출력·입력 포트로 표시한다. 아래 표는 방향과 의미를 모두 풀어 쓴 것이다. 그림의 코드 파일명을 눌러 저장소로 이동하는 기능은 없으며, 아래 경로로 지정 커밋을 조회할 수 있다.
| 연결 | 출발 → 도착 | 동작 | 종류 |
|---|---|---|---|
| E01 | WssControlStub → WssPackageValidator | caller 검사 | 호출·명령 |
| E02 | WssControlStub → WssManager | 위임 | 호출·명령 |
| E03 | WssManager → WssTransaction | 상태 갱신 | 데이터·구성 의존 |
| E04 | WssManager → WssEventAssetManager | capture 조정 | 호출·명령 |
| E05 | WssEventAssetManager → WssEventAssetVerifyController | 검증 처리 | 호출·명령 |
| E06 | WssEventAssetManager → WssUploadController | 업로드 요청 | 호출·명령 |
| E07 | WssUploadRecoveryController → WssEventAssetManager | 복구 후보 처리 | 호출·명령 |
| E08 | StreamingControlStub → StreamingManager | 위임 | 호출·명령 |
| E09 | StreamingManager → Front callback 계약 | start/stop 요청 | 호출·명령 |
| E10 | StreamingManager → TaskExecutor | enqueue | 호출·명령 |
| E11 | Front callback 계약 → StreamingManager | 응답 후 상태 확정 | 결과·이벤트 |
구성요소별 책임과 코드 근거
| 상자 | 구성요소 | 책임·상태 | 지정 커밋의 소스 경로 |
|---|---|---|---|
| N01 | WssControlStub | IWssControl 메서드 / 여러 입구에서 caller 검사 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/ipc/WssControlStub.java |
| N02 | WssPackageValidator | SYSTEM_UID + PID package / 패키지 이름 hash 허용 목록 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/wss/policy/WssPackageValidator.java |
| N03 | WssManager | TaskExecutor → start/stop / 순찰·Vision·LLM·capture 조정 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/wss/WssManager.java |
| N04 | WssTransaction | area / 진행 상태 / 세션 내 메모리 모델 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/wss/data/WssTransaction.java |
| N05 | WssEventAssetManager | client / state / verify / upload / request ID와 clip 소유 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/wss/eventasset/WssEventAssetManager.java |
| N06 | WssEventAssetVerifyController | 성공 시 clip 삭제 경로 / 실패·timeout은 upload 연계 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/wss/eventasset/WssEventAssetVerifyController.java |
| N07 | WssUploadController | URL expiry / key / correlation / EventAsset 업로드 요청 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/wss/eventasset/WssUploadController.java |
| N08 | WssUploadRecoveryController | network + AWS ready / bind/callback 준비 후 복구 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/wss/WssUploadRecoveryController.java |
| N09 | StreamingControlStub | IStreamingControl / 전용 manager 위임 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/ipc/StreamingControlStub.java |
| N10 | StreamingManager | STARTING / START / STOPPING / LLM·vitalsign·이동 조건 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/streaming/StreamingManager.java |
| N11 | Front callback 계약 | start/stop 요청과 응답 / 응답 후 세션 상태 확정 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/streaming/StreamingManager.java |
| N12 | TaskExecutor | 공유 DA_TASK_QUEUE / WSS/Streaming base=2000 | apps/DeviceAgent/app/src/main/java/com/sk/airbot/deviceagent/ipc/TaskExecutor.java |
해석 경계와 변경 시 검토
- 패키지 이름 hash는 APK 서명 인증서 hash가 아니다. 모든 IPC에 같은 검사가 적용되는 것은 아니다.
- StreamingService의 CALLER_PACKAGE 로그는 인증 증거가 아니다.
- startCapture 시 미연결이면 bind 요청만 하고 반환한다. 실제 준비·세션 결과는 callback으로 확인한다.