NumTerra 해부 — 앱과 데이터 파이프라인
되는 것과 되게 하려는 것
이 편에서는 실제 구조를 정리한다. 그리고 22편에서 정한 원칙에 따라 현재 동작하는 것과 계획을 구분해서 적는다.
이 구분이 흐려지면 나중에 스스로도 무엇을 달성했는지 모르게 된다.
앱의 구조
앱은 네 부분으로 되어 있다.
주행 모드 — 지금 동작
차에 탔음을 감지하면 켜진다. 화면을 보지 않아도 되는 상태.
하는 일 - 가속도와 위치를 기록한다 (15편) - 큰 충격을 자동 감지해 후보로 표시한다 (9편) - 사용자가 버튼을 누르면 그 시점을 표시한다
설계에서 지킨 것 — 11편의 독립성 원칙. 이 모드에서는 다른 사람의 표시를 보여주지 않는다. 남의 판단을 보고 나서 판단하면 데이터의 독립성이 무너지기 때문이다.
이건 편의를 희생한 결정이다. “지금 지나는 길에 뭐가 표시돼 있나”를 보고 싶은 것이 자연스러운 요구인데 막았다.
정리 모드 — 지금 동작
주행이 끝난 뒤 쓰는 화면.
하는 일 — 아까 표시한 지점들이 목록으로 나온다. 하나씩 분류한다. 파인 곳 / 방지턱 / 물컹함 / 기타, 그리고 약간 / 뚜렷.
9편의 시간 분리 설계다. 주행 중에는 버튼 하나, 정보는 나중에 채운다.
자동 감지된 후보도 여기 나온다. 확인하거나 지운다.
지도 모드 — 부분 동작
28편에서 설계한 지도.
지금 되는 것 — 신고 위치와 수, 시간 분포, 알려진 구조물 표시.
아직 안 되는 것 — 신호 기반 판정(26편의 ③ 칸), 데이터 부족 구간 회색 처리의 정확한 계산.
기여 기록 — 부분 동작
내가 표시한 것들과 그 이후를 본다. 12편의 이력 원칙.
지금 되는 것 — 내 표시 목록.
아직 안 되는 것 — 소급 보상(13편). 내 표시가 나중에 다른 사람들에게 인정받았을 때 알려주는 기능.
데이터 파이프라인
데이터가 지나는 경로를 순서대로 보면 이렇다.
① 폰에서 측정
② 폰에서 선별·요약
③ 서버로 전송
④ 위치 정렬·정규화
⑤ 집계
⑥ 우선순위 산출
각 단계의 현재 상태를 정리한다.
① 측정 — 동작
초당 수십~수백 회의 가속도, 위치, 속도. 15편에서 정리한 그대로. 방향 정렬(중력 분리)까지 폰에서 한다.
② 선별·요약 — 부분 동작
18편의 관문이 여기 있다. 속도·가속·조향·폰 자세 조건으로 쓸 수 있는 구간만 남긴다.
지금 되는 것 — 기본적인 선별. 급가감속 구간 제외, 저속 제외.
아직 안 되는 것 — 거치 상태 추정과 분류(19편). 이건 데이터를 보고 기준을 정해야 한다.
요약은 지금 보수적으로 한다. 15편에서 말한 결정 — 신고 주변 구간의 원본을 넉넉히 남기는 것 — 을 따른다. 나중에 어떤 특징이 중요한지 알게 되었을 때 원본이 없으면 다시 볼 수 없기 때문이다.
③ 전송 — 동작
와이파이 연결 시 모아서 전송. 13편의 개인정보 원칙에 따라 전체 경로는 보내지 않는다. 신고 지점과 그 주변 구간, 그리고 구간별 요약값만.
④ 정렬·정규화 — 계획
21편의 신호 기반 위치 정렬, 19편의 속도·차량·거치 정규화.
이 단계가 가장 미완성이다. 그리고 20편에서 말한 대로 정규화 없이는 반복이 소용없으므로, 여기가 2단계로 가는 병목이다.
⑤ 집계 — 부분 동작
10편의 겹침과 시간 변화. 13편의 신뢰 가중.
지금 되는 것 — 독립 신고 수 집계, 시간 분포.
아직 안 되는 것 — 신뢰 점수의 본격 운영. 사용자가 적어서 일치도를 계산할 데이터가 부족하다.
⑥ 우선순위 — 부분 동작
13편의 지점 점수. 겹침 + 시간 추세 + 신호 뒷받침 + 구조물 제외.
지금은 앞의 두 항목만 쓴다. 신호 뒷받침은 ④가 되어야 가능하다.
무엇이 병목인가
정리하면 병목이 두 개다.
병목 1: 정규화(④). 이게 안 되면 여러 차량의 데이터를 겹칠 수 없고, 그러면 반복의 이점을 못 얻는다. 3부에서 만든 도구 대부분이 여기 걸려 있다.
이건 기술 문제이면서 데이터 문제다. 정규화 기준을 정하려면 여러 차종의 실제 데이터가 필요하다.
병목 2: 사용자 수. 신뢰 점수도, 겹침도, 반복도 사용자가 모여야 의미가 생긴다.
두 병목이 서로 얽혀 있다. 사용자가 있어야 정규화 기준을 정할 수 있고, 정규화가 되어야 서비스가 쓸모 있어져 사용자가 늘어난다.
이 얽힘을 푸는 방법은 하나다. 1단계만으로 쓸모 있게 만드는 것. 7편에서 이야기한 그것이다. 정규화가 안 되어도, 신호 분석이 없어도, 사람들의 신고를 모아 지도에 보여주고 민원 근거로 쓸 수 있게 하는 것.
그것만으로 쓰이면 데이터가 쌓이고, 병목이 풀린다.
규모에 대한 현실적 판단
얼마나 필요한가. 10편에서 말한 국지성이 여기서 유리하다.
전국 서비스로 시작하지 않는다. 한 동네, 한 통학로에서 시작한다. 같은 길을 매일 지나는 몇십 명.
그 규모에서 무엇이 되는가. - 겹침 판정 — 된다. 같은 구간을 여러 명이 지나므로 - 시간 변화 — 된다. 몇 달 관측하면 - 신뢰 점수 — 부분적으로. 표본이 작아 불안정 - 신호 정규화 — 어렵다. 차종 다양성이 부족
그래서 초기 목표는 1단계 완성이다. 2단계는 여러 동네로 확장된 뒤의 일이다.
다음 편에서 이 연재를 마무리한다.
다음 편 예고 — 스스로 감지하는 도시. 마지막 편. 서른 편을 정리하고, 이것이 무엇을 향하는지 이야기한다.
「우리 동네가 먼저 안다」는 5부 30편으로 이어집니다. 지금 읽은 글은 5부 도시로의 2번째(전체 제29회)입니다.
연재 전체 목차 펼쳐보기
왜 못 잡았나
1~6회사람이 먼저
1단계7~13회신호 읽기
14~21회physical AI
2단계22~27회도시로
28~30회- 28위험 지도를 그리다읽는 데 9분
- 29NumTerra 해부 — 앱과 데이터 파이프라인지금 읽는 중
- 30스스로 감지하는 도시읽는 데 9분