라떼군 이야기


600MB JSON을 85MB Parquet로: 전 세계 구글 스트리트 뷰 데이터 분석기

TL;DR 전 세계 구글 스트리트 뷰 업데이트 시점 데이터를 담은 647MB 크기의 JSON 파일들을 DuckDB를 활용해 분석한 사례입니다. 이를 공간 정렬된 ZStandard 압축 Parquet 파일로 변환하여 용량을 85MB로 최적화하고, QGIS를 통해 대륙별 데이터 최신화 현황을 시각화했습니다.


공간 데이터(Geospatial data)는 그 크기와 복잡성 때문에 다루기 까다로운 영역으로 꼽힙니다. 하지만 최근 DuckDB 같은 고성능 분석용 데이터베이스의 등장으로 로컬 환경에서도 대규모 공간 데이터를 쉽게 처리할 수 있게 되었습니다. 이 글은 한 개발자가 전 세계 구글 스트리트 뷰의 업데이트 시점 데이터를 수집하고, 이를 효율적인 포맷으로 변환하여 시각화하기까지의 과정을 다룹니다. 빅데이터 처리 도구들이 어떻게 개인의 데스크탑 환경으로 내려오고 있는지 보여주는 흥미로운 사례입니다.

핵심 내용

저자는 약 647MB에 달하는 131개의 JSON 파일을 다운로드하여 전 세계 구글 스트리트 뷰 커버리지 데이터를 확보했습니다. 이 데이터를 처리하기 위해 고성능 워크스테이션(AMD Ryzen 9 9950X, 96GB RAM)과 WSL 환경에서 DuckDB를 사용했습니다. DuckDB의 JSON, Spatial, Parquet 확장 기능을 활용해 복잡한 JSON 구조에서 위경도 좌표와 업데이트 연월을 추출했습니다. 추출된 데이터는 공간 기반으로 정렬(Spatially-sorted)되고 ZStandard로 압축된 Parquet 파일로 저장되었으며, 그 결과 용량이 85MB로 대폭 감소했습니다. 최종적으로 716만 개의 데이터 포인트를 QGIS를 이용해 대륙별로 시각화하여, 어느 지역의 스트리트 뷰가 가장 최근에 업데이트되었는지 한눈에 보여줍니다.

기술적 인사이트

소프트웨어 엔지니어 관점에서 이 글의 가장 큰 인사이트는 ‘로컬 기반의 모던 데이터 스택 활용’입니다. 과거라면 Spark나 PostGIS가 설치된 무거운 서버 환경이 필요했을 700만 건의 공간 데이터 처리를, DuckDB를 통해 단일 머신에서 CLI만으로 가볍게 해결했습니다. 특히 JSON을 파싱해 Parquet로 변환할 때 ‘공간 정렬(Spatial sorting)‘을 적용한 점이 돋보입니다. 이는 단순히 용량을 줄이는 압축 효과뿐만 아니라, 향후 특정 지역을 조회할 때 I/O를 극단적으로 최소화하여 쿼리 성능을 비약적으로 높이는 영리한 엔지니어링 선택입니다. 또한, 저자가 Linux 데스크탑 대신 Windows+WSL을 선택한 이유(Nvidia 드라이버 및 ArcGIS Pro 호환성)는 실무자들이 흔히 겪는 운영체제와 툴링 간의 현실적인 트레이드오프를 잘 보여줍니다.

시사점

이 사례는 데이터 엔지니어나 GIS 개발자들에게 무거운 인프라 없이도 대용량 데이터를 효율적으로 다룰 수 있다는 실용적인 레퍼런스를 제공합니다. 실무에서도 API나 로그를 통해 수집된 방대한 JSON 데이터를 DuckDB를 이용해 Parquet로 변환하여 S3 같은 객체 스토리지에 저장하면, 매우 비용 효율적인 데이터 레이크를 구축할 수 있습니다. 공간 데이터뿐만 아니라 시계열, 로그 데이터 분석 등 다양한 영역에서 이러한 ‘가벼운 데이터 파이프라인’ 아키텍처를 적극적으로 도입해 볼 만합니다.


클라우드 컴퓨팅이 대세인 시대지만, 개인 PC의 하드웨어 발전과 DuckDB 같은 도구의 결합은 로컬 데이터 처리의 르네상스를 불러오고 있습니다. 여러분의 프로젝트에서도 굳이 무거운 클러스터가 필요한지, 아니면 잘 최적화된 로컬 파이프라인으로 충분한지 한 번쯤 고민해 보는 것은 어떨까요?

원문 읽기

협업 및 후원 연락하기 →