[Real-Time Intersection Predictor] 실시간 교차로 예측 모듈 및 오프라인 라우팅 데몬 배포 자동화

2 min read

차량의 실시간 GPS 좌표 스트림을 수신하여 다가오는 교차로 지점을 예측하고 이를 다시 발행하는 코어 파이프라인을 구축했다. 단일 노드 환경에서 외부망 의존 없이 독립적으로 동작할 수 있도록 오프라인 라우팅 엔진을 통합하고, 컨테이너 기반의 백그라운드 서비스 데몬화 아키텍처를 구현했다.

[Rust / Pipeline] 실시간 비동기 센서 데이터 스트리밍 파이프라인

  • Tokio 비동기 런타임 및 MQTT 클라이언트를 도입하여 차량 GPS 스트림을 지속적으로 구독하고 처리하는 메인 이벤트 루프를 구성했다.
  • 수신된 JSON 페이로드 스키마를 동적으로 역직렬화하여 내부 데이터 모델로 변환하는 파싱 모듈을 적용했다.
  • SQLite 비동기 커넥션 풀(SQLx)을 통해 예측된 교차로 상태 데이터를 영속화하여, 프로세스 재시작 시에도 차량 진행 상태와 추적 이력을 복구할 수 있는 아키텍처를 구성했다.

[Valhalla / Routing] 라우팅 엔진 맵 매칭 인터페이스 및 측위 최적화

  • HTTP 통신 기반으로 외부 오프라인 라우팅 엔진(Valhalla)과 연동하는 클라이언트 인터페이스를 구현했다. 기존 OSRM 구동 시 98%에 달하던 CPU 점유율을 Valhalla로 마이그레이션하며 30~40% 수준으로 대폭 최적화했다.
  • 하버사인(Haversine) 알고리즘을 적용한 거리 및 방위각 계산 수학 모듈을 별도로 구현하여, 노이즈가 포함된 위치 데이터를 보정하고 라우팅 요청의 정확도를 향상시켰다.
  • 회전 교차로(Roundabout) 등 특수한 도로 구조 타입에 대응할 수 있도록 교차로 탐색 및 맵 매칭 로직을 확장 적용했다.

[Podman / Systemd] Quadlet 기반 서비스 데몬화 및 부트스트랩 자동화

  • 라우팅 엔진과 MQTT 브로커 컨테이너의 라이프사이클 관리를 위해 Podman Quadlet을 도입했다. 전체 서비스 실행 권한을 유저 모드(User Mode)로 제한하여 시스템 보안성을 강화했다.
  • 교차로 예측 코어 애플리케이션과 인프라 컨테이너 간의 실행 순서 의존성(After, WantedBy)을 Systemd 유닛 파일에 명시하여 부팅 시 발생하는 네트워크 소켓 연결 실패 문제를 원천 차단했다.
  • 오픈스트리트맵(OSM) 데이터를 다운로드하고 라우팅 타일로 변환하는 과정을 자동화하는 셸 스크립트를 컨테이너 진입점에 통합하고, 외부 볼륨 마운트를 통해 데이터 리빌드 오버헤드를 제거했다.