[Pilot Test Analysis System] 비동기 처리 최적화 및 맵 매칭 복원

2 min read

분석 워커의 동시 처리량을 늘리기 위해 데이터베이스 커넥션 풀을 확장하고, 비동기 런타임의 대기 현상을 방지하는 최적화를 수행했다. 또한 이전에 제거했던 교차로 및 경로 매칭 알고리즘을 모듈화하여 다시 도입했다.

[Rust / Tokio] CPU 집약적 연산의 비동기 런타임 블로킹 방지

  • 무거운 수학 연산이 기본 비동기 스레드에서 실행되어, 다른 I/O 작업들이 대기열에 묶이는 현상을 확인했다.
  • 무거운 수학 계산 로직을 전용 백그라운드 스레드에서 실행되도록 분리하여 런타임 스레드를 즉시 반환하도록 아키텍처를 변경했다.
  • 비동기 런타임의 실행 흐름 차단이 해결되어 네트워크 및 I/O 작업의 응답성이 크게 향상되었다.

[PostgreSQL / Database] 동시 처리량 증가를 위한 커넥션 풀 확장

  • 세션 분석 배치 작업이 병렬화되면서 분석 워커로 인입되는 동시 요청이 급증했으나, 데이터베이스 커넥션 풀이 기본값으로 고정되어 병목이 발생했다.
  • 데이터베이스 커넥션 풀의 최대 크기를 대폭 상향 조정했다.
  • 병렬로 유입되는 분석 요청들이 커넥션을 대기하지 않고 즉시 데이터베이스 I/O를 수행할 수 있게 되었다.

비동기 런타임 및 커넥션 풀 최적화 시너지 결과

비동기 런타임 블로킹 방지와 커넥션 풀 확장이 동시에 적용되면서 전체 분석 파이프라인의 병목이 해결되었다. 실제 대규모 주행 세션 분석 배치 작업 기준으로 업데이트 전 약 16분 51초(00:24:33 ~ 00:41:24) 소요되던 작업이 업데이트 후 약 4분 41초(02:14:51 ~ 02:19:32)로 단축되어, 전체 처리 시간이 72% 감소하는 성능 개선을 달성했다.

[Rust / Architecture] OSRM 맵 매칭 인터페이스 분리 및 복원

  • 기존 외부 API 기반의 맵 매칭 로직이 다른 모듈과 강하게 결합되어 있어 유지보수가 어려워 비활성화된 상태였다.
  • 단일 책임 원칙과 개방 폐쇄 원칙에 따라 맵 매칭 서비스를 별도 트레이트로 추상화하고, 교차로 통과 이벤트 저장 로직을 내부로 캡슐화하여 복원했다.
  • 분석 서비스 코드의 결합도를 낮추고 모듈 간 독립성을 확보한 상태로 맵 매칭 기능을 다시 활성화했다.