NumTerra
제29회 / 30편 5부 도시로
우리 동네가 먼저 안다/5부 도시로/제29회

NumTerra 해부 — 앱과 데이터 파이프라인

2026-08-21 · 읽는 데 9분

되는 것과 되게 하려는 것

이 편에서는 실제 구조를 정리한다. 그리고 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부

왜 못 잡았나

1~6회
  1. 01그 도로는 어제도 멀쩡했다읽는 데 8분
  2. 02도로를 재는 기술은 이미 오래됐다, 그런데 왜읽는 데 9분
  3. 03포트홀과 싱크홀은 다른 문제다읽는 데 8분
  4. 04표면이 아니라 아래에서 일어나는 일읽는 데 8분
  5. 05공동은 어떻게 자라는가읽는 데 9분
  6. 06비용·주기·깊이 — 기존 방식의 삼중 한계읽는 데 8분
2부

사람이 먼저

1단계7~13회
  1. 07매일 그 길을 지나는 사람읽는 데 8분
  2. 08\"쿵\" 하는 그 순간, 무슨 일이 일어났나읽는 데 9분
  3. 09느낌을 데이터로 바꾸기 — 신고 버튼의 설계읽는 데 9분
  4. 10동네에 깃발을 꽂다읽는 데 8분
  5. 11한 사람의 착각, 백 사람의 확신읽는 데 9분
  6. 12위키는 어떻게 틀린 정보를 걸러내는가읽는 데 9분
  7. 13누구의 신고를 믿을 것인가 — 신뢰 점수읽는 데 9분
3부

신호 읽기

14~21회
  1. 14진동은 무엇을 말하는가읽는 데 9분
  2. 15주머니 속 가속도계라는 센서읽는 데 9분
  3. 16시간을 주파수로 — 푸리에 변환읽는 데 10분
  4. 17라플라스 변환과 시스템의 응답읽는 데 9분
  5. 18가다서다 — 도심 주행이라는 소음읽는 데 9분
  6. 19차량마다 다른 조건, 정규화의 문제읽는 데 9분
  7. 20같은 지점을 수백 번 지나간다는 것읽는 데 9분
  8. 21미약한 신호를 건져 올리는 법읽는 데 9분
4부

physical AI

2단계22~27회
  1. 22드문 재난을 어떻게 학습하는가읽는 데 9분
  2. 23시뮬레이션으로 데이터를 만든다읽는 데 9분
  3. 24physical AI란 무엇인가읽는 데 9분
  4. 25사람의 '물컹함'을 기계에 가르치기읽는 데 10분
  5. 26사람의 신고와 기계의 신호가 만나면읽는 데 9분
  6. 27오경보와 놓침 사이 — 임계값의 윤리읽는 데 9분
5부

도시로

28~30회
  1. 28위험 지도를 그리다읽는 데 9분
  2. 29NumTerra 해부 — 앱과 데이터 파이프라인지금 읽는 중
  3. 30스스로 감지하는 도시읽는 데 9분