피드로 돌아가기
Dev.toBackend
원문 읽기
개발자가 Dijkstra 알고리즘으로 29,000개 간선의 글로벌 송금 경로 그래프를 구축해 기존 서비스 대비 최대 4배 저렴한 라우팅 발견
How I Built a Dijkstra-Based Money Routing Engine with 29K Edges
AI 요약
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))을 적용하면 실제 경로 가격을 정확히 반영할 수 있다.