[Telemetry Data Transmitter] 엣지 환경을 위한 다중 로컬 센서 데이터 동기화 및 원격 전송 워커 구축

2 min read

이기종 센서 데이터를 수집하는 차량용 데이터베이스 환경에서, 로컬 데이터 변경 사항을 추적해 텔레메트리 서버로 안전 전송하는 코어 파이프라인을 Rust로 신규 구현했다.

[Rust / Persistence] 다중 데이터베이스 커넥션 및 커서 지속성 관리

  • 주행 데이터 원본을 제공하는 읽기 전용 메인 데이터베이스와, 커서 정보(table_name, last_processed_row, is_completed) 상태 추적용 읽기/쓰기 커서 데이터베이스 커넥션을 물리적으로 분리해 아키텍처를 설계했다.
  • 단일 타임스탬프에 다수 채널 데이터가 존재할 경우, 식별 메타데이터를 동적 접미사로 결합해 데이터 고유성을 유지한 채 그룹화하는 병합 로직을 추가했다.
  • 외부 센서(예: GPS) 데이터베이스를 메인 데이터베이스와 타임스탬프 기준으로 병합해 단일 페이로드로 연동하는 기능을 구현했다.

[Rust / Concurrency] 완전 독립형 다중 스레드 워커 구현

  • 개별 수집 대상(이벤트, 시스템 상태, 객체 인식 등)마다 격리된 백그라운드 스레드를 생성해, 단일 서비스 내에서 복수 데이터소스 스트림을 동시 병렬 전송하는 멀티스레딩 아키텍처를 적용했다.
  • 초기 구동 시 특정 데이터베이스 파일이 마운트되지 않은 상태더라도, 워커 스레드 종료 없이 연결을 지속 재시도하는 내결함성을 확보해 파이프라인 안정성을 개선했다.
  • 서버 네트워크 통신 파이프라인을 안정적으로 구축하고 프로토콜 확장에 대비하기 위해 데이터 전송 계층을 추상화했다.

[Network / HTTP] HTTP 통신 파이프라인 및 인증 헤더 주입

  • 동기식 HTTP 클라이언트 라이브러리를 활용해 텔레메트리 서버로 JSON 형태 배치 데이터를 전송하는 로직을 구축했다.
  • 통신 음영 지역에 진입해 네트워크가 단절되는 상황에 대비해, 지연 데이터를 분리하고 재연결 시 밀린 데이터를 일괄 배치 전송하도록 제어 로직을 개선했다.
  • 전송 요청마다 타겟별 API Key 헤더를 주입하는 인증 계층을 통신 파이프라인에 통합했다.
  • 네트워크 계층을 인터페이스(Trait) 형태로 추상화해, 유닛 테스트 시 mock 객체로 실제 서버 통신 없이 데이터 무결성을 검증하는 환경을 구축했다.
  • 시스템 라이브러리 환경이 제각각인 다수 엣지 디바이스(ARM64 등)에 단일 실행 파일을 안정적으로 배포하기 위해 빌드 파이프라인을 개선했다.

[Rust / Compiler] 의존성 내장 및 컴파일러 최적화

  • 데이터베이스 드라이버 빌드 환경을 수정해 SQLite 코어 엔진을 실행 파일 내부에 내장하여, 호스트 OS 라이브러리 버전 파편화에 따른 의존성 문제를 해결했다.
  • glibc 대신 musl libc 기반 정적 크로스 컴파일을 수행하도록 타겟을 변경해, 외부 라이브러리 종속성이 없는 바이너리를 생성했다.
  • 릴리스 프로파일에 LTO(Link-Time Optimization) 및 바이너리 스트립 옵션을 활성화해 실행 파일 용량을 축소하고 런타임 실행 속도를 개선했다.