Green Stop: 뭄바이 통근 시간을 재설정하는 로컬 오픈 웨이트 모델 기반 프로젝트
요약
뭄바이의 극심한 통근 시간 문제를 해결하기 위해 'Green Stop'이라는 로컬 오픈 웨이트 기반 프로젝트를 개발했습니다. 이 앱은 사용자의 현재 위치와 시간을 받아, 도보로 접근 가능한 녹지 공간을 찾아 상세 정보(주소, 소요 시간, AQI 등)를 제공합니다. 핵심적으로 Python이 사실 정보를 처리하고, LLM은 친근한 메모 작성에만 활용하여 개인정보 보호와 신뢰성을 높였습니다.
핵심 포인트
- 통근 시간을 줄이는 대신 '녹색 휴식'을 제안하는 혁신적인 접근입니다.
- OpenStreetMap과 로컬 오픈 웨이트 모델(gemma3:4b)을 사용하여 데이터의 정확성과 프라이버시를 확보했습니다.
- Python이 사실 정보를 처리하고 LLM은 메모 작성에만 사용하도록 역할을 분리한 것이 핵심 설계 결정입니다.
문제점
뭄바이 통근자들은 교통 체증으로 인해 몇 시간씩 시간을 잃습니다. 1시간 걸릴 여정이 3시간이 되기도 합니다. 이런 상황에서 지친 사람들에게 '풀밭에 가서 쉬라'고 말하는 것은 효과가 없습니다. 아무도 우회 경로를 원하지 않기 때문입니다. 그래서 저는 이미 존재하는 통근 시간에 녹색 시간을 끼워 넣는 무언가를 만들었습니다.
제가 만든 것
Green Stop은 현재 위치와 사용 가능한 시간을 받아들여, 그 시간 동안 걸어 다녀올 수 있는 녹지 공간을 찾아 다음 정보를 제공합니다:
- 장소의 이름과 전체 주소
- 도보 이동 시간 및 총 소요 시간
- 실시간 온도와 AQI(대기질 지수)
- Google 지도 도보 길찾기 링크
- 로컬 LLM이 영어, 힌디어 또는 마라티어 중 하나로 작성한 짧고 친근한 메모
화면을 보는 데는 약 30초가 걸립니다. 나머지 시간은 걷는 데 사용됩니다.
데모
github-production-user-asset-6210df.s3.amazonaws.com
코드: https://github.com/heyujjwal/green-stop
작동 방식
Place you type
→ OpenStreetMap 지오코딩
→ 제가 직접 선정한 CSV 장소 + OpenStreetMap 공원/정원/해변
...
핵심 설계 결정: Python이 사실(fact)을 찾고, LLM은 인간적인 메모만 추가합니다. 작은 모델들은 자신이 기억해야 할 장소를 요청받으면 지어냅니다. 여기서는 모델에게 사실 정보는 절대 맡기지 않았으므로, 모든 주소, 거리 및 시간은 데이터에서 가져옵니다.
스택: Ollama + gemma3:4b (오픈 웨이트), OpenStreetMap (Nominatim + Overpass), Open-Meteo, Gradio, Python.
오픈이 중요했던 이유
- 개인 정보 보호: 매일 통근하는 경로는 민감한 정보입니다. 모델은 제 노트북에서 실행되며 앱에는 계정, 추적 기능, 클라우드 LLM이 없습니다. 장소 캐시는 로컬에 저장됩니다.
- 신호가 약해도 작동: 인터넷 없이도 모델, 매칭 로직, 캐시된 결과가 실행됩니다. 최초 조회와 Google Maps 내비게이션만 연결이 필요합니다.
- 무료: API 키나 호출당 비용이 없습니다. OpenStreetMap과 Open-Meteo는 오픈 데이터입니다.
- 교체 가능:
config.py에서 한 줄을 편집하여 모델을 변경했습니다. - 로컬 지식: 오픈 맵 데이터에 저만의 CSV를 추가함으로써 큰 지도 앱들이 놓치는 작은 정원이나 그늘진 길을 추가할 수 있습니다.
외부 적용하기
저는 지난 [10월 10일]부터 직접 통근하는 동안 Green Stop을 테스트했습니다. 실제 사용 기록은 다음과 같습니다:
입력: Marine Lines Station, Mumbai, [50]분, 영어
앱이 반환한 결과:
- 장소: Marine Drive Promenade (바닷가)
- 도보 시간: 편도 약 3분 (0.3km)
- 총 필요 시간: 약 11분 (현지에서 휴식 5분, 돌아오는 시간 포함)
- 대안 장소: SK Patil Garden (7분), Navi Wadi Garden (8분)
- 길 안내: 결과에서 바로 Google Maps 도보 링크가 열렸습니다.
- 로컬 모델의 메모: 바닷가 벽에 앉아 숨을 쉬라는 짧고 친근한 제안이었습니다.
| 날짜 | 출발지 | 절약된 시간 | 추천 장소 | 방문 여부 | 기분 (전 → 후) |
|---|---|---|---|---|---|
| 1일차 | Marine Lines Station | [11분] | Marine Drive Promenade (도보 3분) | [예/아니오] | [예: 피곤함 → 차분함] |
잘 작동한 점
- 장소까지 역에서 도보로 단 3분밖에 걸리지 않아 추가 시간이 거의 들지 않았습니다. 이것이 핵심 아이디어입니다. 이미 가지고 있던 통근 시간 내에 녹색 시간을 확보하는 것입니다.
- Google Maps 링크를 통해 원터치로 도보 길 안내가 열렸습니다.
- 결과가 모호한 조언이 아니라 구체적(장소, 거리, 총 시간)으로 제시되었습니다.
잘못된 점
- 주소의 정확도가 낮았습니다. OpenStreetMap의 역방향 조회(reverse lookup)는 'Marine Drive' 대신 'Mumbai Coastal Road - Phase I, Navjeevan Wadi, Kalbadevi...'를 반환했습니다. 핀이 산책로 가장자리에 위치해 있어, 시스템이 근처 도로를 선택한 것입니다. 해결책: 앱이 먼저 사용하는 CSV에 제가 검증된 주소를 직접 입력할 수 있습니다.
- 실시간 날씨와 AQI가 '알 수 없음 (오프라인)'을 표시했습니다.
- 모델의 주의 경고 문구가 일반적이었습니다. 조건이 불확실했음에도 불구하고, 여전히 'AQI가 150을 초과하거나 비가 올 경우...'라는 내용을 추가했습니다. 이는 정보라기보다는 노이즈입니다. 해결책: 실제 데이터가 존재하는 경우에만 주의 경고를 요청하도록 수정해야 합니다.
솔직한 한계점 (Honest limitations)
- 모델은 제 노트북에서 실행되므로, 앱은 노트북 전원이 켜져 있을 때만 작동합니다. 다음 단계는 홈 미니 PC나 휴대폰 네이티브 빌드(phone-native build)입니다.
- 공원 핀은 입구가 아닌 공원의 중앙 지점을 가리킵니다.
- OpenStreetMap 데이터가 고르지 않기 때문에, 제가 실제로 사용하는 장소에 대해서는 직접 스팟을 선별하여 추가합니다.
- 도보 시간은 실시간 경로(live routing)가 아니라 추정치입니다 (직선 거리 × 1.3 @ 5 km/h).
다음 계획 (What's next)
온디바이스 모델이 탑재된 휴대폰 네이티브 버전, 자동 게이트/입구 감지 기능, 그늘 및 혼잡도 정보, 그리고 더 많은 도시로 확장하는 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기