OSRM(Open Source Routing Machine) 이란?
OSRM(Open Source Routing Machine) 은 C++로 구현된 고성능 오픈소스 경로 탐색 엔진이다.
OSM(OpenStreetMap) 데이터를 기반으로 차량, 자전거, 도보 등의 경로 탐색을 수행할 수 있으며, API 서버 형태로 배포하여 서비스에 쉽게 연동할 수 있다.
주요 특징은 다음과 같다.
- 오픈소스 기반
- OSM(OpenStreetMap) 데이터 활용
- API 형태로 서비스 제공 가능
- 수 ms ~ 수십 ms 수준의 빠른 응답속도
- 차량, 자전거, 도보 등 다양한 프로파일 지원
도입 배경
기존에는 상·하차지 간 거리 정보를 다른 회사 서비스의 API를 통해 조회하고 있었다.
하지만 데이터 사용량이 증가하면서 API 비용 부담이 커졌고, 거리 정보는 머신러닝 모델 학습에서도 핵심 Feature로 활용되고 있어 내재화의 필요성이 생겼다.
기존 문제점
- API 사용 비용 발생
- 호출량 증가에 따른 비용 증가
- 외부 서비스 장애 시 영향 가능
- 모델 학습용 데이터 확보 비용 증가
OSRM을 선택한 이유
- 상용 지도 API(Google, Naver, Kakao) 대비 비용 절감
- API 형태로 쉽게 연동 가능
- 수십 ms 수준의 빠른 응답
- 국내 지도 데이터(OSM) 지원 수준이 우수
- 활발한 오픈소스 커뮤니티
- 거리 데이터 확보 목적이므로 실시간 교통정보 불필요
실제 목적은 내비게이션 서비스가 아니라 모델 학습을 위한 거리 데이터 확보이기 때문에 실시간 교통 정보가 없어도 충분했다.
데이터 비교
NAVER, OSRM 결과를 비교해보았다.
OSRM은 여러 개의 경로를 반환하며, 비교 시에는 첫 번째 경로만 사용하였다.
오픈소스 솔루션이라는 점을 고려하면 실제 서비스에서 활용하기에 나쁘지 않은 결과를 확인할 수 있었다.

성능 테스트
테스트 환경 #1
서버 사양
- CPU : 2 Core
- Memory : 64GB
테스트 도구
- k6
최대 처리량
- 약 700 TPS(RPS), 800 TPS 이상부터 성능 저하 발생

결과
| 항목 | 결과 |
|---|---|
| 총 요청 수 | 42,002건 |
| TPS/RPS | 700/s |
| 성공률 | 100% |
| 실패 건수 | 0건 |
| 평균 응답시간 | 9.83ms |
| 최대 응답시간 | 235.78ms |
| P95 | 28.38ms |
테스트 환경 #2
서버 사양
- CPU : 40 Core
- Memory : 64GB
테스트 도구
- k6
최대 처리량
- 약 4,000 TPS(RPS), 4,100 TPS 이상부터 성능 저하 발생

단순 거리 계산 API 용도로는 충분히 높은 처리량을 보여주었다.
설치 및 구성
디렉토리 구조
| 디렉토리 | 설명 |
|---|---|
| data_current | 현재 서비스 중인 지도 데이터 |
| data_next | 신규 데이터 생성용 작업 디렉토리 |
| data_backups | 이전 지도 데이터 백업 |
| update_osrm_data.sh | 데이터 업데이트 스크립트 |
| .env | 환경 변수 |
docker-compose.yml
update_osrm_data.sh
OSM 최신 데이터를 다운로드하고 무중단에 가깝게 데이터를 교체하기 위한 스크립트이다.
.env
데이터 초기화
최초 1회 실행한다.
./update_osrm_data.sh
컨테이너 실행
docker-compose up -d
데이터 업데이트 자동화
지도 데이터는 주기적으로 변경되므로 Cron을 통해 정기 업데이트를 수행할 수 있다.
예시)
0 3 * * 0 update_osrm_data.sh
매주 일요일 새벽 3시에 최신 지도 데이터를 다운로드하고 교체한다.
API 사용 예시
Route API
GET /route/v1/driving/{lon1},{lat1};{lon2},{lat2}
예시
GET /route/v1/driving/127.0276,37.4979;126.9780,37.5665
응답 예시
마무리
기존에는 외부 API를 통해 데이터를 수집하고 있었지만, OSRM을 도입하면서 다음과 같은 효과를 얻을 수 있었다.
- 거리 계산 비용 절감
- 대량 데이터 수집 가능
- 모델 학습 데이터 품질 향상
- 외부 서비스 의존도 감소
- 안정적인 API 응답속도 확보
특히 실시간 교통 정보가 필요하지 않은 머신러닝 학습용 거리 계산 목적이라면, OSRM은 충분히 검토해볼 만한 선택지라고 생각한다.
참고
- OSRM API Documentation
- OpenStreetMap
- Geofabrik South Korea OSM Dataset
