TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 26 READS

샌프란시스코 언덕을 피해 가는 길찾기 FlattenSF, '경사 인식 라우팅'은 어떻게 만들까

샌프란시스코 언덕을 피해 가는 길찾기 FlattenSF, '경사 인식 라우팅'은 어떻게 만들까
SOURCE IMAGE · HACKER NEWS
샌프란시스코 언덕을 피해 가는 길찾기 FlattenSF, '경사 인식 라우팅'은 어떻게 만들까

언덕의 도시에서 '평평한 길'을 찾는다는 것

샌프란시스코는 언덕으로 유명한 도시예요. 경사가 30%를 넘는 거리도 있어요. 그래서 자전거, 휠체어, 유모차, 전동 킥보드를 타는 사람에게는 '가장 빠른 길'보다 '가장 덜 힘든 길'이 훨씬 중요하거든요. 현지 자전거족 사이에는 언덕을 피해 지그재그로 빠져나가는 'The Wiggle'이라는 유명한 경로가 있을 정도예요.

FlattenSF는 이 문제를 정면으로 다룬 웹 서비스예요. 지도에서 출발지와 도착지를 찍으면 그 사이에서 가장 평평한 경로를 찾아줘요. 아이디어는 단순한데, 뜯어보면 그래프 알고리즘과 지형 데이터가 만나는 좋은 교과서 예제예요. 세부 구현은 사이트에서 직접 확인해 보시고, 이 글에서는 이런 '경사 인식 라우팅'이 보통 어떻게 만들어지는지 하나씩 풀어볼게요.

동작 원리: 길은 그래프로, 높이는 비용으로

1단계: 도로를 그래프로 바꾸기. 교차로는 점(노드)으로, 교차로 사이 도로 구간은 선(엣지)으로 표현해요. 데이터는 오픈스트리트맵(OSM)을 많이 써요.

2단계: 각 점에 높이 붙이기. 여기서 DEM(수치표고모델)이 나와요. 땅을 바둑판처럼 격자로 쪼개고 칸마다 해발고도를 기록한 데이터예요. 미국은 USGS가 라이다(LiDAR)로 측량한 고해상도 데이터를 공개하고 있어서 골목 단위 경사까지 꽤 정확하게 계산할 수 있어요.

3단계: 경사를 비용으로 바꾸기. 도로 구간의 경사도는 높이 차이 ÷ 수평 거리로 구해요. 그다음 단순 거리 대신 비용 = 거리 × (1 + α × 경사²) 같은 식을 써서, 가파를수록 비용이 크게 늘어나게 만들어요. 같은 길이라도 오르막과 내리막은 체감이 완전히 다르죠. 그래서 방향마다 비용을 따로 두는 방향 그래프로 모델링하는 게 보통이에요.

4단계: 최소 비용 경로 찾기. 다익스트라나 A* 알고리즘을 돌리면 돼요. 다익스트라는 출발점에서 가까운 곳부터 물결이 퍼지듯, '여기까지 오는 최소 비용'을 하나씩 확정해 나가는 방식이에요.

진짜 어려운 건 '평평함'의 정의예요

여기서 재미있는 질문이 하나 생겨요. '가장 평평한 길'이란 대체 뭘까요? 올라가는 높이의 총합이 가장 작은 길일 수도 있고, 가장 가파른 구간조차 완만한 길일 수도 있어요. 자전거는 누적 오르막이 체력 소모를 좌우하니까 전자가 중요해요. 휠체어는 한 구간만 너무 가팔라도 아예 못 지나가니까 후자가 결정적이고요. 참고로 미국 ADA 기준에서 경사로의 최대 경사는 1:12, 약 8.3%예요.

후자는 '병목 경로 문제(bottleneck path)'라고 불러요. 다익스트라에서 비용을 더하는 대신 최댓값을 취하도록 살짝만 바꾸면 풀 수 있어요. 같은 알고리즘이라도 비용 함수 하나에 따라 전혀 다른 서비스가 되는 거죠.

데이터 함정도 있어요. DEM은 지표면 높이를 기록하니까 다리 위 도로가 계곡 바닥 높이로 잡히는 문제가 생겨요. 샌프란시스코에 많은 계단길도 자전거나 휠체어 경로에서는 빼야 하고요. 이런 예외를 얼마나 잘 처리하느냐가 결과 품질을 크게 좌우해요.

비슷한 도구들과 비교하면

구글 지도는 자전거 경로에 고도 그래프를 보여주긴 하지만, 경로 자체는 시간 기준으로 골라요. 오픈소스 라우팅 엔진 중에서는 Valhalla가 자전거 경로의 언덕 회피 정도를 조절하는 use_hills 옵션을 제공해요. GraphHopper와 자전거 전용 엔진 BRouter도 고도를 반영한 프로파일을 지원하고요. 접근성 쪽에서는 워싱턴대가 만든 AccessMap이 보도 경사를 반영한 휠체어 경로를 제공해 왔어요. FlattenSF의 강점은 범용 엔진의 복잡한 설정 없이 '한 도시, 한 가지 질문'에만 집중해서 누구나 바로 쓸 수 있게 했다는 점이에요.

한국 개발자에게 주는 시사점

언덕이라면 한국도 빠지지 않죠. 부산 산복도로, 서울 해방촌이나 북아현동, 언덕 위 대학 캠퍼스까지요. 공공자전거나 킥보드 이용자, 배달 라이더, 휠체어 이용자 모두에게 이런 길찾기는 실제로 도움이 돼요.

데이터도 생각보다 갖춰져 있어요. 국토지리정보원이 수치표고모델을 제공하고, 도로망은 국토교통부 표준노드링크로 구할 수 있어요. 다만 골목길이나 보행로는 OSM 데이터가 부족할 수 있어서 보완이 필요해요.

주말 사이드 프로젝트로도 딱이에요. 파이썬 osmnx로 동네 도로 그래프를 받고, DEM 래스터로 노드 고도와 엣지 경사를 붙이세요. 그다음 networkx 최단 경로의 가중치만 바꾸면 기본 버전이 완성돼요. 포트폴리오에 넣는다면 '평평함을 어떻게 정의했고 왜 그렇게 정했는지'를 꼭 설명해 보세요. 훨씬 돋보일 거예요.

마무리

한 줄 정리: 최단 경로에서 '최단'을 무엇으로 정의하느냐가 곧 서비스의 성격을 결정해요.

여러분 동네에서 '가장 평평한 길'이 필요했던 순간이 있었나요? 자전거에 좋은 길과 휠체어에 좋은 길이 서로 다를 때, 여러분이라면 사용자에게 선택지를 어떻게 보여주실 건가요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://flattensf.com/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...