피드로 돌아가기
How I Built a Dijkstra-Based Money Routing Engine with 29K Edges
Dev.toDev.to
Backend

개발자가 Dijkstra 알고리즘으로 29,000개 간선의 글로벌 송금 경로 그래프를 구축해 기존 서비스 대비 최대 4배 저렴한 라우팅 발견

How I Built a Dijkstra-Based Money Routing Engine with 29K Edges

inge2026년 3월 24일12intermediate

Context

국제 송금 시장에서 개인들은 여러 경로 중 최저가 옵션을 비교할 수 없다. 필리핀 간호사가 같은 서비스로 12년간 송금하면서 월 $18을 절약할 수 있는 2단계 경로를 인식하지 못하는 상황처럼, 정보의 비대칭성으로 인한 비효율이 구조적으로 존재한다.

Technical Solution

  • 글로벌 송금을 방향 그래프로 모델링: 노드는 통화(USD, MXN, BTC, USDT, NGN, GBP 등), 간선은 환율·수수료·예상시간·제공자 정보를 포함
  • 45개 이상 데이터 소스에서 50개 이상 통화로 29,000개 간선 수집: CCXT를 통한 21개 암호화폐 거래소, Wise FX 레이트, 지역 거래소(Bitso, Buda, VALR, CoinDCX, WazirX), Binance P2P, 10개 중앙은행 공식 레이트, 28개 송금 업체 추정 수수료
  • 백그라운드 작업에서 asyncio.gather()를 사용해 모든 간선을 병렬로 3분마다 새로고침(전체 갱신 소요시간 약 30초)
  • 수정된 Dijkstra 알고리즘으로 2-패스 라우팅 수행: 첫 번째는 참고용 FX 브릿지를 포함한 전체 그래프에서, 두 번째는 실제 제공자만으로 순수 암호화폐 다중 홉 경로 탐색
  • 복합 비용 계산(덧셈 아님): 3개의 1% 수수료 연쇄는 1 - (0.99 × 0.99 × 0.99) = 2.97%로 계산
  • 상태 추적에 제공자 집합 포함: 같은 통화를 거쳐도 다른 거래소 조합은 모두 탐색하되, 한 경로 내 같은 제공자는 중복 제외
  • 최대 4 홉 제한 및 200K 힙 팝 안전장치로 성능 제어
  • FastAPI(4개 uvicorn 워커) + SQLite(WAL 모드) + 순수 JavaScript(300KB CDN 대신 Tailwind 34KB)로 단일 VPS에 배포

Impact

예시 경로: INR → USDT(CoinDCX, 0.5%) → BTC(MEXC, 0.1%) → GBP(Kraken, 0.16%) = 총 0.76% 수수료로 기존 Wise 2.8% 대비 약 3.7배 저렴

Key Takeaway

글로벌 시스템에서 알고리즘보다 실시간 데이터 품질이 결과를 좌우한다. 다양한 API 명세와 레이트 제한을 처리하는 45개 데이터 어댑터 구현이 Dijkstra 알고리즘 자체보다 더 큰 도전과제였다.


복잡한 라우팅 문제를 구현할 때 상태 키에 제공자 집합을 포함해 고전적 Dijkstra의 과도한 가지치기를 방지하면, 같은 중간 노드를 거치되 다른 조합의 간선을 탐색할 수 있다. 또한 수수료 합산이 아닌 곱셈 기반 복합 비용 계산(1 - ∏(1 - fee_i/100))을 적용하면 실제 경로 가격을 정확히 반영할 수 있다.

원문 읽기