[Telemetry Data Transmitter] 엣지 환경을 위한 다중 로컬 센서 데이터 동기화 및 원격 전송 워커 구축
• 2 min read
이기종 센서 데이터를 수집하는 차량용 데이터베이스 환경에서, 로컬 데이터의 변경 사항을 추적하고 이를 텔레메트리 서버로 안전하게 전송하는 코어 파이프라인을 Rust로 신규 구현했다.
[Rust / Persistence] 다중 데이터베이스 커넥션 및 커서 지속성 관리
- 주행 데이터 원본을 제공하는 읽기 전용(Read-Only) 메인 데이터베이스와, 커서 정보(
table_name,last_processed_row,is_completed) 상태를 추적하는 읽기/쓰기 커서 데이터베이스의 커넥션을 물리적으로 분리하여 아키텍처를 설계했다. - 단일 타임스탬프에 여러 채널의 데이터가 존재할 경우, 식별용 메타데이터를 동적인 접미사 형태로 결합하여 데이터 고유성을 유지한 채 그룹화하는 병합 로직을 추가했다.
- 별도의 외부 센서(예: GPS) 데이터베이스를 메인 데이터베이스와 타임스탬프 기준으로 병합(As-of Join)하여 단일 페이로드로 구성하는 연동 기능을 구현했다.
[Rust / Concurrency] 완전 독립형 다중 스레드 워커 구현
- 개별 수집 대상(이벤트, 시스템 상태, 객체 인식 등)마다 격리된 백그라운드 스레드를 생성하여, 단일 서비스 내에서 여러 데이터소스 스트림을 동시에 병렬 전송하는 멀티스레딩 아키텍처를 도입했다.
- 초기 구동 시 특정 데이터베이스 파일이 마운트되지 않은 상태더라도, 워커 스레드가 종료되지 않고 연결을 지속적으로 재시도하는 내결함성(Fault Tolerance)을 확보하여 데이터 파이프라인의 생존성을 높였다.
서버 측과의 네트워크 통신 파이프라인을 안정적으로 구축하고, 향후 프로토콜 확장에 대비하기 위해 데이터 전송 계층을 추상화했다.
[Network / HTTP] HTTP 통신 파이프라인 및 인증 헤더 주입
- 동기식 HTTP 클라이언트 라이브러리를 사용하여 텔레메트리 서버로 JSON 형태의 배치(Batch) 데이터를 전송하는 로직을 구축했다.
- 터널 등 통신 음영 지역에 진입하여 네트워크 연결이 끊어졌을 때를 대비해, 지연된 데이터를 분리하고 재연결 시 밀린 데이터를 일괄 배치 전송하도록 제어 로직을 고도화했다.
- 각 전송 요청에 타겟별로 부여된 API Key 헤더를 안전하게 주입하는 인증(Authentication) 계층을 통신 파이프라인에 통합했다.
- 네트워크 계층을 인터페이스(Trait) 형태로 추상화하여, 유닛 테스트 시 모의(Mock) 객체를 활용해 실제 서버 통신 없이도 데이터 무결성을 검증할 수 있는 환경을 마련했다.
시스템 라이브러리 환경이 상이한 다수의 엣지 디바이스(ARM64 등)에 단일 실행 파일을 안정적으로 배포하기 위해 빌드 파이프라인을 대폭 개선했다.
[Rust / Compiler] 의존성 내장 및 컴파일러 최적화
- 데이터베이스 드라이버의 빌드 환경을 수정하여 SQLite 코어 엔진을 실행 파일 내부에 내장(Bundled)함으로써, 호스트 OS의 라이브러리 버전 파편화로 인한 의존성 문제를 원천 차단했다.
glibc대신musllibc를 기반으로 정적(Static) 크로스 컴파일을 수행하도록 타겟을 전환하여, 외부 라이브러리 종속성이 없는 완전 독립형 바이너리를 생성했다.- 릴리스 프로파일에 LTO(Link-Time Optimization) 및 바이너리 스트립(Strip) 옵션을 활성화하여 실행 파일의 용량을 축소하고 런타임 실행 속도를 최적화했다.