it-box

Google 타임라인 기록을 내 기기에서 분석하는 법

Google 지도 타임라인 데이터를 내보내는 방법 개요, JSON에 담긴 정보, 위치 기록이 민감한 이유, 브라우저에서만 처리하는 도구의 동작과 한계, 기간별 이동 거리 확인 순서를 정리합니다.

위치 기록은 이동 거리 통계 이상의 정보를 담습니다. 집과 직장의 위치, 자주 가는 장소, 출퇴근 시각, 주말의 동선이 한 파일에 쌓입니다. 그래서 위치 기록을 분석하려면 데이터를 어디서 처리하는지부터 확인해야 합니다. 분석 도구에 파일을 올리는 순간 그 기록은 제3자의 서버에 남을 수 있습니다.

이 글은 Google 지도 타임라인 데이터를 내보내서 직접 살펴보는 흐름을 설명합니다. 또한 it-box의 타임라인 시각화 도구가 실제로 무엇을 읽고, 무엇을 계산하며, 무엇을 하지 않는지 소스 코드와 테스트 기준으로 정리합니다. 도구 설명에서 과장하거나 생략한 부분이 없도록 확인한 내용만 적었습니다.

내보내기 개요

Google 지도 타임라인 데이터는 앱 설정이나 계정의 데이터 관련 메뉴에서 내보낼 수 있습니다. 메뉴 이름과 위치는 기기와 앱 버전에 따라 다를 수 있으므로, 화면 문구를 그대로 찾기보다 설정에서 타임라인이나 위치 기록을 다루는 항목을 검색하는 편이 빠릅니다. 저장 위치와 내보내기 방식도 계정 설정에 따라 달라질 수 있으니, Google의 현재 도움말을 함께 확인하세요.

내보낸 결과는 JSON 파일입니다. 파일을 받은 뒤에는 열어서 구조를 한 번 보는 것이 좋습니다. 파일에 어떤 종류의 기록이 얼마나 담겼는지 알아야 분석 범위를 정할 수 있습니다.

내보낸 JSON에 들어 있는 정보

이 도구가 읽는 필드는 크게 시간과 좌표입니다. 파일에는 이보다 많은 정보가 있을 수 있습니다. 예를 들어 방문한 장소의 이름처럼 도구가 읽지 않는 필드도 들어 있을 수 있습니다. 도구는 이런 값을 정규화 결과에 보존하지 않습니다.

도구가 인식하는 형식은 두 가지입니다. 하나는 세그먼트 객체의 배열이고, 다른 하나는 semanticSegments 배열을 가진 객체입니다. 세그먼트에는 startTime과 endTime이 있을 수 있으며, 활동이나 경로 점은 이 시간을 기준으로 읽습니다. 좌표는 latLng 필드에 "위도,경도" 문자열로 들어 있거나, geo: 접두사가 붙은 문자열로 들어 있습니다. 소수점 뒤에 ° 기호가 붙어도 읽습니다.

아래는 형식을 보여 주기 위해 만든 가상의 예시입니다. 실제 좌표나 시간이 아닙니다.

[
  {
    "startTime": "2042-04-02T10:00:00Z",
    "endTime": "2042-04-02T10:30:00Z",
    "activity": {
      "start": { "latLng": "geo:12.25°,34.5°" },
      "end": { "latLng": "12.75,35" }
    }
  }
]

이 세그먼트에서 도구는 활동의 시작점과 끝점 두 개를 지점으로 만듭니다. 시작점에는 세그먼트의 startTime을, 끝점에는 endTime을 시간으로 씁니다. 방문 기록이라면 visit.topCandidate.placeLocation의 좌표 하나를 지점으로 읽습니다. 경로 점 목록인 timelinePath가 있으면 각 점의 time 또는 시작 시각 기준의 분 단위 offset을 읽습니다.

위치 기록이 민감한 이유

위치 기록은 한 사람의 생활 패턴을 그대로 드러냅니다. 밤마다 머무는 곳이 어디인지, 어느 시간대에 같은 장소를 반복해서 가는지만 봐도 집과 직장을 추정할 수 있습니다. 가족이나 동료가 함께 다닌 기록이라면 그 사람들의 위치까지 노출됩니다.

그래서 위치 기록을 외부 서비스에 올리는 일은 가볍게 판단할 문제가 아닙니다. 업로드한 파일이 어디에 저장되는지, 얼마나 보관되는지, 누가 접근할 수 있는지 확인할 수 없다면 올리지 않는 편이 안전합니다. 분석이 목적이라면 브라우저 안에서만 처리하는 방식을 먼저 찾아보세요.

타인의 기록은 처리하지 마세요. 본인 기록이거나, 처리할 권한이 명확히 있는 데이터만 다루어야 합니다. 이 도구의 첫 화면 고지에도 같은 내용이 있습니다.

it-box 도구가 처리하는 방식

도구의 처리 흐름은 다음과 같습니다. 파일을 고르면 브라우저가 File.text()로 내용을 읽습니다. 읽은 텍스트는 JSON.parse로 객체가 되고, 정규화 함수가 좌표와 시간만 골라 지점 배열을 만듭니다. 이후 날짜 필터, 요약 계산, Canvas 그리기가 모두 브라우저 메모리에서 이루어집니다.

도구 코드에는 fetch를 쓰는 부분이 없고, 파일 내용을 저장소나 URL, 클립보드, 다운로드로 내보내는 기능도 없습니다. 지도 타일이나 지도 API도 쓰지 않습니다. 도구 화면의 첫 부분에는 파일과 위치 좌표가 이 브라우저에서만 처리된다는 고지가 항상 보입니다.

도구의 end-to-end 테스트는 파일을 선택한 뒤 발생한 요청의 주소와 본문에 파일 이름, 좌표, 날짜, 요약 문구가 들어 있지 않은지 확인합니다. 사이트 전체의 페이지 조회 분석은 도구와 별도로 동작하며, 입력 데이터와 분리된 설정이라고 명세에 적혀 있습니다. 파일 내용이 그 분석으로 전송되지 않는다는 점을 이해하고 사용하면 됩니다.

초기화 버튼은 메모리의 파일 내용, 지점 배열, 선택한 날짜를 지우고 파일 입력란도 비웁니다. 다른 파일을 분석하기 전이나 분석을 끝낸 뒤에 사용하세요.

지원하는 형식과 오류

도구는 파일 선택 단계에서 확장자가 .json이거나 MIME 타입이 application/json인지 확인합니다. 그 밖의 파일은 읽기 전에 "JSON 파일만 선택할 수 있습니다."라는 문구로 거부합니다.

JSON은 읽었지만 최상위 구조가 두 지원 형식 중 하나가 아니면 "읽을 수 있는 Timeline JSON 파일이 아닙니다."라는 문구가 나옵니다. 예를 들어 {"invented": true}는 이 오류입니다. 지원하지 않는 구조를 추측해서 결과를 만들지 않는 것이 의도된 동작입니다. JSON 문법이 깨진 경우도 같은 문구로 처리됩니다.

지점 정규화 단계에서는 다음 규칙이 적용됩니다. 위도는 -90부터 90, 경도는 -180부터 180 사이여야 합니다. 범위 밖의 좌표와 해석할 수 없는 좌표는 버립니다. 시간은 날짜와 시각, 시간대가 포함된 ISO 8601 형식이어야 하며, 시간대는 Z나 +09:00처럼 표기되어야 합니다. 같은 시간과 같은 좌표가 반복되면 하나만 남기고, 결과는 시간순으로 정렬합니다.

유효한 지점이 하나도 없으면 "표시할 Timeline 위치 정보가 없습니다."라는 문구가 나옵니다.

거리 계산 방식

이동 거리는 선택한 기간의 지점을 시간순으로 놓고, 연속한 두 지점 사이의 대원 거리를 모두 더한 값입니다. 대원 거리는 Haversine 공식으로 계산하며, 지구 반지름은 6371km를 씁니다. 단위 테스트는 적도에서 경도 1도 차이를 약 111.195km로 검증합니다.

이 방식에서 알아야 할 제한이 세 가지 있습니다.

첫째, 실제 도로나 경로를 따른 거리가 아닙니다. 두 지점을 직선으로 이은 거리입니다. 자동차로 달린 거리는 이보다 길 수 있습니다.

둘째, 지점 사이의 시간 간격을 따지지 않습니다. 두 기록이 몇 시간 떨어져 있어도 그 사이를 직선으로 이은 거리가 더해집니다. 기록 사이에 빠진 이동이 있으면 실제 이동보다 짧게 계산될 수 있습니다.

셋째, 방문 지점도 지점으로 취급합니다. 방문 장소의 좌표는 한 점으로 들어가므로, 같은 장소에 오래 머물러도 이동 거리에는 거의 기여하지 않습니다. 다만 방문 지점 사이를 잇는 직선은 거리에 포함됩니다.

검증 예시를 하나 들겠습니다. 테스트 데이터에서 날짜 범위를 2051년 4월 2일부터 3일까지로 잡으면 지점 4개가 선택됩니다. 이 네 점을 순서대로 이은 거리는 217.9km입니다. 같은 파일 전체의 6개 지점을 모두 이으면 364.1km가 나옵니다. 값은 기간과 지점 수에 따라 달라집니다.

기간별 이동 거리 확인 순서

도구에서 기간별 거리를 확인하는 절차는 다음과 같습니다.

  1. 내보낸 JSON 파일을 파일 선택 영역에서 고릅니다.
  2. 요약 카드의 "분석 가능 기간"을 확인합니다. 파일의 첫 지점 날짜와 마지막 지점 날짜입니다.
  3. 시작일과 종료일을 넣습니다. 두 날짜 모두 포함됩니다.
  4. 날짜 범위가 잘못되면 빨간 문구가 나옵니다. 종료일이 시작일보다 앞이거나, 분석 가능 기간 밖이거나, 선택 기간에 지점이 없는 경우입니다.
  5. 결과의 지점 수, 이동 거리(km), 방문한 날짜 수를 읽습니다.
  6. 미리보기 Canvas에서 경로의 모양을 확인합니다.

날짜는 분석하는 브라우저의 지역 시간대를 기준으로 나눕니다. 그래서 기록이 만들어진 곳과 분석하는 기기의 시간대가 다르면, 자정 근처의 기록이 다른 날짜로 분류될 수 있습니다.

제공하지 않는 기능

이 도구가 하지 않는 일을 분명히 알아 두어야 오해가 없습니다.

  • 지도 타일이나 실제 지도 화면을 보여 주지 않습니다. Canvas는 최소와 최대 좌표를 여백 포함 화면에 선형으로 펼친 그림입니다. 위도와 경도 비율을 맞추지 않으므로 모양이 실제 지도와 다를 수 있습니다.
  • 장소 이름이나 주소를 찾지 않습니다. 좌표 문자열도 화면에 출력하지 않습니다.
  • 이동 수단을 구분하지 않습니다. 도보, 자동차, 대중교통을 나누는 기능이 없습니다.
  • 여러 파일을 합쳐 분석하지 않습니다. 파일 입력에는 한 번에 한 파일만 선택할 수 있습니다.
  • 이미지나 영상으로 내보내지 않습니다. 결과를 파일로 저장하거나 공유 링크를 만들지 않습니다.
  • 로그인, Google API 호출, 위치 권한 요청을 하지 않습니다.

성능 면에서도 제한이 있습니다. 미리보기 Canvas는 최대 2,000개 지점을 골라 그립니다. 지점이 더 많으면 일부만 그려지지만, 지점 수와 이동 거리는 선택한 전체 지점으로 계산합니다. 파일 크기를 제한하는 코드는 없으므로 큰 파일은 전체 내용을 브라우저 메모리에 올리게 됩니다. 기록이 아주 큰 경우에는 기간을 나눠서 파일을 준비하는 편이 낫습니다.

점검 목록

  • 내보내기 메뉴 이름과 저장 방식은 기기와 앱 버전에 따라 다르므로 현재 화면과 도움말을 확인합니다.
  • 분석하려는 파일이 본인 기록인지, 처리 권한이 있는 데이터인지 확인합니다.
  • 파일이 .json이고 두 지원 형식 중 하나인지 확인합니다. 오류가 나면 구조를 열어 보고 판단합니다.
  • 거리는 직선 거리 합계라는 점을 기억하고, 결과를 실제 주행 거리로 해석하지 않습니다.
  • 날짜 범위는 양 끝 날짜를 포함하는지 확인하고, 시간대 차이로 하루가 밀릴 수 있음을 고려합니다.
  • 분석이 끝나면 초기화 버튼으로 메모리의 내용을 지웁니다.
  • 분석 결과를 다른 곳에 옮길 때는 좌표와 시간이 드러나지 않도록 주의합니다.

관련 도구