[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대신musllibc 기반 정적 크로스 컴파일을 수행하도록 타겟을 변경해, 외부 라이브러리 종속성이 없는 바이너리를 생성했다.- 릴리스 프로파일에 LTO(Link-Time Optimization) 및 바이너리 스트립 옵션을 활성화해 실행 파일 용량을 축소하고 런타임 실행 속도를 개선했다.