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