내비게이션은 막히는 길을 어떻게 알까? 실시간 교통정보의 원리

6 분 소요

퇴근길에 내비게이션이 갑자기 경로를 바꾸자고 제안합니다. 라디오 교통방송에도 아직 사고 소식이 없는데, 내비는 이미 몇 킬로미터 앞 도로가 막히기 시작했다는 것을 알고 있습니다. 전국 도로에 카메라가 빈틈없이 설치된 것도 아니고, 누가 일일이 전화로 알려 주는 것도 아닌데 어떻게 아는 걸까요? 이번 글에서는 내비게이션이 실시간 교통정보를 만들어 내는 원리를 코드 없이 정리하겠습니다.

지도가 어떻게 화면에 뜨고 내 위치가 파란 점으로 어떻게 표시되는지는 지도와 내 위치는 어떻게 표시될까 글에서 다뤘습니다. 이번 글은 그 다음 단계입니다. 내 위치를 아는 것과 도로 전체의 상황을 아는 것은 전혀 다른 문제이기 때문입니다.

내비를 켠 차들이 곧 속도 센서입니다 #

답부터 말하면, 교통정보의 가장 큰 출처는 도로 위의 차들 자신입니다. 내비게이션 앱을 켜고 달리는 차는 몇 초마다 자신의 위치와 속도를 서버로 보냅니다. 길 안내를 받으려면 어차피 내 위치를 계속 알려야 하는데, 그 데이터가 동시에 도로 상황을 재는 재료로 쓰이는 것입니다. 이렇게 모이는 데이터를 프로브 데이터라고 부릅니다. 탐침(probe)이라는 이름 그대로, 차 한 대 한 대가 도로 곳곳에 꽂힌 익명의 온도계 역할을 하는 셈입니다.

차 한 대의 데이터만으로는 판단할 수 없습니다. 그 차가 느린 것이 정체 때문인지, 운전자가 원래 천천히 가는 사람인지 구분할 수 없기 때문입니다. 하지만 같은 도로를 달리는 수백, 수만 대의 데이터가 모이면 이야기가 달라집니다. 한 구간을 지나는 차들의 속도가 일제히 시속 20km로 떨어졌다면 그것은 운전 습관이 아니라 도로의 상태입니다.

빨간 선의 정체는 구간 평균입니다 #

서버는 도로를 짧은 구간 단위로 잘라서 관리합니다. 교차로에서 다음 교차로까지, 나들목에서 다음 나들목까지가 한 구간입니다. 각 구간에 대해 최근 몇 분 사이에 지나간 차들의 속도를 평균 내면, 그것이 그 구간의 현재 속도가 됩니다. 지도 위의 초록, 주황, 빨강 선은 이 구간 속도를 색으로 바꾼 것입니다. 제한 속도에 가깝게 흐르면 초록, 절반쯤이면 주황, 거의 멈춰 있으면 빨강이 되는 식입니다.

개별 차가 아니라 구간이 단위라는 점이 중요합니다. 누가 지나갔는지는 색을 정하는 데 필요하지 않고, 몇 대가 어떤 속도로 지나갔는지만 필요합니다. 한계도 같은 구조에서 나옵니다. 차가 거의 다니지 않는 새벽의 한적한 길은 표본이 부족해서, 정보가 비거나 과거 통계로 채워집니다. 내비가 대로의 정체는 잘 맞히면서 골목길 상황에는 둔한 이유입니다.

도착 예정 시간은 거리 나누기가 아닙니다 #

남은 거리를 지금 속도로 나누면 도착 시간이 나올 것 같지만, 그렇게 계산하면 자주 틀립니다. 내가 30분 뒤에 지나갈 도로의 상황은 지금과 다르기 때문입니다. 지금은 한산해도 퇴근 시간이 겹치면 막힐 길이 있고, 지금은 빨간색이어도 30분 뒤면 풀릴 길이 있습니다.

그래서 도착 예정 시간에는 예측이 들어갑니다. 재료는 두 가지입니다. 하나는 과거 패턴입니다. 이 도로의 화요일 오후 6시 속도가 지난 몇 달간 어땠는지는 이미 통계로 쌓여 있습니다. 다른 하나는 실시간 변화입니다. 오늘이 평소와 다르게 흘러가고 있다면, 과거 패턴을 그만큼 보정합니다. 운전 중에 도착 예정 시간이 몇 분씩 늘었다 줄었다 하는 것은 계산이 허술해서가 아니라, 이 예측이 새로 들어오는 실시간 데이터로 계속 수정되고 있기 때문입니다.

길찾기는 지하철 환승 안내와 같은 문제입니다 #

이제 경로를 고르는 차례입니다. 길찾기는 지하철 환승 안내를 떠올리면 이해하기 쉽습니다. 역과 역 사이마다 걸리는 시간이 정해져 있고, 출발역에서 도착역까지 그 시간의 합이 가장 작은 조합을 고르는 문제입니다. 갈아타는 횟수가 많아도 합이 작으면 그 경로가 이깁니다.

도로도 똑같습니다. 교차로가 역이고, 교차로 사이의 도로가 노선입니다. 다른 점은 하나뿐입니다. 구간마다 적힌 숫자가 고정된 거리가 아니라, 방금 본 구간 속도로 계산한 지금 통과하는 데 걸리는 시간이라는 점입니다. 그래서 내비가 고르는 길은 최단 거리가 아니라 최단 시간이고, 막히는 직선 대로보다 한산한 우회로가 이길 수 있습니다. 어느 구간이 빨갛게 변해 숫자가 커지면, 합이 더 작은 다른 조합이 생기는 순간 내비는 경로를 갈아탑니다. 운전 중에 안내가 갑자기 바뀌는 순간이 바로 이 순간입니다.

모두에게 같은 우회로를 주면 그 길이 막힙니다 #

여기에는 흥미로운 역설이 하나 있습니다. 수십만 명이 같은 앱을 쓰는데 사고가 난 도로의 모든 운전자에게 똑같은 우회로를 안내하면, 이번에는 그 우회로가 막힙니다. 정체가 사라지는 것이 아니라 옆 길로 옮겨 갈 뿐입니다.

그래서 서비스들은 우회 차량을 한 길로 몰지 않고 여러 갈래로 나눠 안내하거나, 우회로로 빠진 차들이 보내오는 프로브 데이터를 다시 보면서 그 길이 막히기 시작하면 안내를 줄입니다. 교통정보는 한 방향 방송이 아니라 순환입니다. 안내가 도로 상황을 바꾸고, 바뀐 상황이 다시 안내에 반영됩니다.

사고와 통제는 두 경로로 들어옵니다 #

평소 패턴으로 설명되지 않는 갑작스러운 사고나 도로 통제는 두 가지 방법으로 잡아냅니다. 하나는 이용자 제보입니다. 내비 앱의 사고 신고 버튼을 누르거나, 경찰과 도로 관리 기관이 통제 정보를 보내 주는 경로입니다. 다른 하나는 데이터 스스로가 보내는 신호입니다. 평소 시속 80km로 흐르던 구간이 몇 분 만에 10km로 떨어지면, 제보가 한 건도 없어도 무언가 일어났다는 뜻입니다.

둘은 서로를 보완합니다. 제보는 빠르지만 장난이나 착오가 섞일 수 있고, 속도 급락 감지는 확실하지만 차들이 실제로 느려진 뒤에야 잡힙니다. 그래서 제보가 들어오면 그 구간의 속도 데이터로 사실 여부를 확인하고, 속도가 급락하면 제보가 없어도 정체로 표시하는 식으로 둘을 합쳐서 씁니다.

개별 차를 추적하는 것은 아닙니다 #

내 위치와 속도가 계속 서버로 올라간다는 설명에서 불편함을 느꼈을 수 있습니다. 그래서 교통정보 시스템은 두 단계로 데이터를 가공합니다. 수집 단계에서는 누가 보낸 데이터인지 알 수 없도록 식별 정보를 떼어 내고, 활용 단계에서는 구간 평균이라는 집계 값만 남깁니다. 지도의 빨간 선에는 어떤 차가 거기 있었는지에 대한 정보가 남아 있지 않습니다.

물론 위치 기록 자체가 민감한 개인정보라는 사실은 변하지 않습니다. 앱이 위치 권한을 묻는 이유, 그리고 수집과 활용의 원칙이 중요한 이유는 지도와 위치를 다룬 글에서 설명한 그대로입니다.

마무리 #

정리하면 이렇습니다. 내비를 켠 차들이 보내는 위치와 속도가 프로브 데이터가 되고, 도로 구간 단위로 평균 내면 초록과 빨강의 색깔 선이 됩니다. 여기에 과거 패턴을 합치면 도착 예정 시간이 되고, 구간마다 걸리는 시간을 가중치로 둔 탐색이 경로가 됩니다. 안내 자체가 도로 상황을 바꾸기 때문에 우회는 분산되고, 사고는 제보와 속도 급락 감지가 함께 잡아냅니다. 다음에 내비가 한적한 골목으로 안내할 때, 그 안내 뒤에 같은 길을 조금 먼저 지나간 수만 대의 차가 남긴 데이터가 있다는 것을 떠올려 보시기 바랍니다.

X