Files
niro-gen5w/docs/ARCHITECTURE_KO.md
T

3.0 KiB

구조와 경계

이 문서는 개인 접속 주소나 운영 비밀값 없이 전체 설계를 설명합니다. 본 공개본에 모든 구성 요소가 구현·포함돼 있다는 뜻은 아닙니다.

데이터가 흐르는 경로

차량 ECU / MICOM / HSCAN
        ↓ 원래 헤드유닛이 수신하는 정보
Android 4.4 계열 서비스·Binder·순정 앱·내비 native
        ├─ 순정 화면: 날씨 / 캘린더 / 스포츠 / RPM / 위치공유
        ├─ 제한된 HTTPS 연동 → 개인 백엔드 → 외부 데이터 공급자
        └─ 검증된 변화값 → MQTT → Home Assistant / 모니터 / 차계부

핵심은 Android의 root 권한과 차량 ECU의 권한을 구분하는 것입니다. 헤드유닛에서 root를 얻어도 모든 차량 신호가 수신되는 것은 아니며, 모든 ECU 제어가 가능한 것도 아닙니다.

세 가지 코드 계층

계층 역할 공개본의 범위
순정 앱과 ODEX 화면·요청·callback·서비스 진입 설명만, 제조사 원본·수정 전체 앱 제외
내비 네이티브 지도·경로 계산·교통·카메라·렌더링 설명과 과거 단일 변경 생성기 예제
독립 수집·변환 코드 수신 검증·요청 제어·MQTT·서버 계약 변환 검토한 일부 소스와 합성 시험

운영 배포는 동일 버전 확인과 해시 검증을 거친 작은 변경을 우선했습니다. 일부 앱은 원본 APK를 유지하고 ODEX payload를 bind하는 방식, 내비는 해당 엔진에 맞는 제한된 native 변경을 사용했습니다. 이 방법도 버전 의존성이 있으므로 범용 설치법이 아닙니다.

원천값과 표시값

  • RPM decoder는 도착한 프레임을 검증한 뒤 callback을 호출합니다. 이벤트 반영은 화면 렌더링 시간이 0이라는 뜻이 아닙니다.
  • 내비 차속 보정은 내비의 내부 소비값을 바꾸는 것입니다. 차량 ECU·계기판·OBD의 원시 속도를 변경하지 않습니다.
  • MQTT는 이미 확인한 값을 운반하는 수단입니다. 초기값이나 잘못된 해석을 MQTT가 정답으로 만들어 주지 않습니다.
  • 연결이 끊긴 실시간 센서와 마지막 관측값은 서로 구분해야 합니다. 오래된 속도·기어·시동값을 현재 제어 판단에 쓰지 않습니다.

서버 인증과 저장

운영 서버는 차량 인증, 관리자 세션, CSRF, 명령 상태기계, 수신자별 공유 링크와 만료·폐기를 따로 관리합니다. 실제 키·개인정보·DB·원문 요청 로그는 공개하지 않습니다. 백엔드 변환기는 정식 서비스 가입·결제·차량 인증을 대신하지 않으며, SOS·결제의 가짜 성공을 제공하지 않습니다.

헤드유닛의 전원이 완전히 꺼져 Android와 네트워크가 정지하면 이 경로로 원격 명령을 받을 수 없습니다. 별도 저전력 수신기와 검증된 wake 연동은 독립적인 하드웨어 과제입니다.