기록을 밖으로 꺼내기: GPX, KML, CSV는 각각 무엇을 위한 것인가
세 가지 형식, 세 가지 다른 용도. 각각이 실제로 무엇을 담는지, 어떤 일에 무엇을 고르면 되는지, 그리고 애초에 내보낼 수 있다는 성질이 왜 당신의 주행 기록이 당신 것인지를 결정하는지.
한 앱 안에만 존재하는 주행 기록은 빌려 쓰고 있는 기록이다. 앱은 서비스를 접고, 구독료는 오르고, 회사는 팔린다. 그리고 내 기록을 들고 나갈 수 있느냐 하는 질문은 어느 날 갑자기 급해지는 버릇이 있다. 그것을 결정하는 기능이 내보내기이고, 정작 필요해지기 전에 각 형식이 무슨 일을 하는지 알아 둘 만하다.
GPX — 앱 사이로 경로를 옮기는 형식
GPX는 2002년부터 GPS 소프트웨어의 공용어 노릇을 해 온 XML 형식이다. 사실상 모든 것이 이것을 읽는다. 가민 기기, 스트라바, 코무트, 가이아, QGIS, 오픈스트리트맵 편집기, 업로드 상자가 달린 모든 지도 사이트가 그렇다.
여기에는 세 종류의 것이 들어가는데, 이 셋을 헷갈리는 데서 문제가 자주 생긴다.
- 웨이포인트 — 순서 없이 따로 찍힌 지점들. 들머리, 급수 지점 같은 것.
- 루트 — 내가 가려고 하는 곳을 순서대로 늘어놓은 점들의 목록. 계획에 해당한다.
- 트랙 — 시각이 붙은 기록된 점들을 순서대로 늘어놓고 트랙 세그먼트로 나눈 것. 실제로 어디를 지나갔는지의 기록이다.
기록된 주행은 트랙이다. 각 점은 위도와 경도를 갖고, 보통 고도와 시각도 함께 갖는다. 확장 요소로 심박수, 케이던스, 온도 같은 것이 붙을 수도 있는데, 호환성이 들쭉날쭉해지는 지점이 바로 여기다. 확장은 선택 사항이고 업체마다 좋아하는 것이 다르기 때문이다.
터널을 지나는 사람에게 중요한 세부가 하나 있다. GPX 트랙은 여러 개의 트랙 세그먼트를 담을 수 있고, 세그먼트를 끊는 것이야말로 "여기서 기록이 중단되었다"를 이 형식이 표현하는 방식이다. 중단된 주행을 하나의 연속된 세그먼트로 납작하게 눌러 내보내는 프로그램은 그 정보를 버린 것이고, 나중에 그 파일을 읽는 쪽은 양끝을 이어 붙이게 된다.
KML — 구글 어스에서 들여다보기 위한 형식
KML도 XML이다. 구글 어스를 위해 만들어졌고 지금은 개방형 지리공간 컨소시엄 표준이기도 하다. GPX와 겹치는 부분이 있지만 지향점은 교환이 아니라 표현 쪽이다. 스타일, 색, 아이콘, 폴더, 그리고 선을 지형에 덮어씌울지 실제 높이에 그릴지를 정하는 고도 모드 같은 것들이 있다.
경로를 3차원으로 보고 싶을 때, 지형 위에 덮어 보고 싶을 때, 혹은 누군가에게 더블클릭 한 번으로 구글 어스에서 열리는 파일을 건네고 싶을 때 KML을 쓰면 된다. 다만 보관용 사본으로는 쓰지 말 것. 렌더링 지향의 형식이고, 구글 생태계 바깥에서는 지원이 얇으며, KMZ는 그저 압축된 KML일 뿐이다.
CSV — 직접 계산해 보기 위한 형식
CSV는 애초에 GPS 형식이 아니고, 쓸모 있는 이유가 정확히 그것이다. 행과 열일 뿐이라 아무 스프레드시트에서나 열리고, 앱 화면이 대답해 주지 않는 질문을 직접 던져 볼 수 있게 해 준다.
진짜로 다른 두 가지 모양이 있고, 어느 쪽이 필요한지 알아 두면 시간이 많이 절약된다.
- 한 행에 한 점. 그 주행의 모든 측위점이 들어간다. 시각, 위도, 경도, 고도, 속도, 정확도. 이것이 분석용 파일이다. 속도를 경사와 함께 그려 보고, 실제로 어디에서 느려졌는지 찾아보고, 미심쩍은 구간의 정확도 수치를 확인해 볼 수 있다.
- 한 행에 한 트랙. 지금까지 기록한 모든 주행이 한 줄씩 들어간다. 날짜, 거리, 소요 시간, 상승. 한 해를 스프레드시트로 정리할 때 쓰는 파일이다. 월별 총 거리, 활동별 피벗 테이블, 시즌 전체를 한눈에 보는 차트 같은 것.
Roam은 이 네 가지 모양을 모두 내보낸다. GPX, KML, 점 단위 CSV, 트랙 단위 CSV다. FIT은 있으나 절반만 동작하는 상태가 되느니 아예 없는 쪽을 일부러 택했는데, 엉성하게 만들기 쉬운 형식에 대해서는 합리적인 선호라고 할 만하다.
형식 목록보다 더 중요한 두 가지 성질
실행 중인 기록기가 아니라 디스크에서 내보내야 한다
가장 구해 내고 싶은 주행은 잘못된 주행, 즉 기록이 중간에 끊기고 다시 돌아오지 않은 그 주행이다. 앱이 살아 있는 기록기가 들고 있는 것만 내보낼 수 있다면, 바로 그 주행이 앱이 건네줄 수 없는 주행이 된다. Roam의 내보내기는 엔진이 아니라 데이터베이스를 읽기 때문에, 기록 프로세스가 죽은 뒤 다시 돌아오지 않은 트랙도 그 자체로 내보낼 수 있다.
그 파일을 믿어도 되는지 알려 주어야 한다
앱이 어떤 주행에 대해 믿고 있는 것과 실제로 저장된 것이 서로 벌어졌다면, 내보내기는 완결되었는데도 틀릴 수 있다. Roam은 그 둘을 비교한다. 요약이 주장하는 점 개수와 디스크에 실제로 있는 점 개수를 맞춰 보고, 그것들이 일치하는지 알려 준다. 파일은 어느 쪽이든 쓰인다. 일부러 그렇게 했다. 내보내기를 거부하면 나쁜 소식뿐 아니라 데이터까지 같이 빼앗는 셈이고, 그에 대해 아직 무언가를 할 수 있는 사람은 휴대폰을 들고 있는 바로 그 사람이기 때문이다.
실전 메모
- 보관은 GPX로 한다. 10년 뒤에도 읽힐 가능성이 가장 높고, 다른 모든 도구가 받아 주는 형식이다.
- 필요해지기 전에 내보내 둔다. 기록을 꺼내고 싶어지는 순간은 대개 이미 무슨 일이 벌어진 뒤다.
- 끊긴 구간이 있는 주행은 외부 사이트가 알려 주는 거리를 믿기 전에 세그먼트 구조를 확인한다. 그 사이트는 구멍에 대해 자기 나름의 결정을 내릴 것이기 때문이다.
- 한 해를 돌아볼 때는 GPX 파일 200개를 내보내 합계를 내려고 애쓰지 말고 한 행에 한 트랙짜리 CSV를 쓴다.
- 트랙은 당신이 어디에 있었는지의 기록이라는 점을 기억할 것. 집 대문 앞에서 시작하는 트랙을 올리기 전에 한 번 생각해 보자.
Roam에서 내보내기는 Roam Pro에 속한다. 한 번의 주행을 온전히 기록하는 것, 그것을 보는 것, 그리고 다시 재생해 보는 것은 무료이며 앞으로도 그렇게 둘 생각이다.
자주 묻는 질문
GPX와 KML은 무엇이 다른가요?
GPX는 교환용 형식입니다. 거의 모든 GPS 도구가 읽고 쓰며, 보관용으로도 올바른 선택입니다. KML은 표현 지향으로 구글 어스를 위해 만들어졌고, GPX에는 없는 스타일과 고도 모드를 담습니다. 데이터를 옮길 때는 GPX, 3차원으로 들여다볼 때는 KML을 쓰세요.
CSV는 어느 쪽을 내보내야 하나요?
주행 하나를 분석하고 싶다면 한 행에 한 점짜리를 쓰세요. 경로를 따라가며 속도, 고도, 정확도를 볼 수 있습니다. 여러 주행을 스프레드시트로 정리해 월별 합계나 시즌 차트를 만들고 싶다면 한 행에 한 트랙짜리를 쓰세요.
중간에 끊긴 주행도 내보낼 수 있나요?
앱이 살아 있는 기록기가 아니라 저장된 데이터에서 내보낸다면 가능합니다. Roam의 내보내기는 데이터베이스를 읽으므로, 기록이 죽은 뒤 다시 돌아오지 않은 주행도 그대로 파일로 쓸 수 있습니다.
내보낸 파일의 거리가 앱에서 본 것과 왜 다른가요?
대개는 그 파일을 불러들인 쪽이 자기 규칙으로 다시 계산했기 때문입니다. 평활화 방식이 다르고, 신호가 끊긴 구간을 어떻게 처리할지도 스스로 정합니다. 세그먼트 끊김이 보존된 파일은 도구마다 다르게 다뤄지며, 그중 무엇도 서로 일치할 의무가 없습니다.
주행을 잃지 않는 기록 앱
Roam은 측위점이 도착하는 그 순간, 주행 중인 누적 수치와 같은 트랜잭션으로 휴대폰에 기록합니다. 신호가 끊긴 구간은 직선으로 잇지 않고 끊긴 구간 그대로 남깁니다. 누적 상승은 GPS 고도가 아니라 기압 센서에서 읽습니다. 계정도, 로그인도, 동기화도 없습니다. 한 번의 주행을 온전히 기록하고, 보고, 다시 재생하는 것은 무료입니다.