[Telemetry API Server] 세션 기반 텔레메트리 집계 API 및 쿼리 파이프라인 최적화
• 2 min read
수집된 방대한 시계열 데이터를 기반으로 차량의 평균 및 최대 속도, 급가속/감속 횟수, 브레이크 조작 횟수, 객체 감지 빈도 등 주행 통계 리포트를 도출하는 집계 시스템을 구축했다. 그러나 여러 클라이언트에서 동시다발적으로 분석 요청을 수행할 때 애플리케이션 계층에 심각한 메모리 부하가 발생하는 문제가 대두되었다. 이를 해결하기 위해 데이터베이스 엔진 내부에서 대규모 연산을 직접 처리하도록 아키텍처를 재설계했다.
[InfluxDB / Query Engine] 데이터베이스 내부 집계 최적화 및 타입 충돌 해결
- 평균, 최대값, 빈도수 등 대규모 연산을 애플리케이션 메모리에 올리는 대신 데이터베이스 엔진 단에서 병렬로 수행한 뒤, 다중 쿼리 결과를 단일 스트림으로 병합(Union)하도록 데이터 처리 파이프라인을 최적화했다.
- 서로 다른 연산 함수의 반환형(정수 및 부동소수점)이 병합될 때 발생하는 스키마 충돌 오류를 방지하기 위해, 쿼리 파이프라인 단계에서 모든 연산 결과의 데이터 타입을 실수형으로 강제 캐스팅하는 추상화 레이어를 적용했다.
- 1시간 단위의 적분(Integral) 연산을 시계열 쿼리에 통합하여 텔레메트리로부터 총 주행 거리를 역산해내고, 세션 지속 시간과 결합하여 포괄적인 통계 리포트를 산출했다.
[Spring Boot / Infrastructure] 타임스탬프 스키마 정합성 및 네트워크 타임아웃 튜닝
- 쿼리 엔진에 원시 타임스탬프(Millisecond)를 직접 주입할 경우 윈도우 스캔 범위가 잘못 인식되어 전체 샤드를 풀스캔하는 성능 버그를 식별했다. 이를 회피하기 위해 애플리케이션 단에서 입력 타임스탬프를 국제 표준 포맷(ISO-8601)으로 선변환하여 주입함으로써 디스크 I/O 리소스를 절약했다.
- 방대한 데이터 세트를 병합 연산할 때 발생하는 소켓 연결 끊김 현상을 해결하기 위해, 데이터베이스 클라이언트의 HTTP 커넥션 풀 설정을 오버라이드하고 타임아웃 임계값을 대폭 상향 조정하여 배치 분석의 안정성을 확보했다.
- 불필요한 분석 요청으로 인한 시스템 부하를 차단하기 위해 관리자 계정 인증 레이어를 추가하여 무분별한 쿼리 접근을 제어했다.
[Algorithm / Aggregation] 다중 채널 비전 센서 집계 고도화
- 복수의 카메라 채널에서 비동기적으로 수집되는 객체 인식 데이터를 단일 차량 식별자 기준으로 동기화 취합하기 위해, 다중 채널 병렬 쿼리 및 결과 합산 알고리즘을 구현했다.
- 탐지된 객체의 종류(보행자, 이륜차 등)와 전방 위험도 단계(Warning, Danger)에 따라 시계열 데이터를 그룹핑하여 집계 리포트의 해상도를 극대화했다.