GitHub - hyperknot/openfreemap: Free and open-source map hosting solution with custom styles for websites and apps, using OpenStreetMap data
Service

GitHub - hyperknot/openfreemap: Free and open-source map hosting solution with custom styles for websites and apps, using OpenStreetMap data

hyperknot
2026.05.03
·GitHub·by 임근석/부산/NLP
#Map Hosting#Open Source#OpenStreetMap#Self-Hosting#Vector Tiles

핵심 포인트

  • 1OpenFreeMap은 OpenStreetMap 데이터를 활용하여 웹사이트와 애플리케이션을 위한 커스텀 벡터 타일을 무료로 호스팅하는 오픈 소스 프로젝트입니다.
  • 2이 프로젝트는 전통적인 타일 서버 대신, Btrfs 파티션 이미지에 하드링크된 수억 개의 파일을 Nginx를 통해 직접 서빙하여 높은 성능과 효율성을 달성합니다.
  • 3OpenFreeMap은 벡터 타일 호스팅에만 집중하며, 무제한의 무료 사용을 위해 Cloudflare R2와 같은 클라우드 서비스의 높은 비용과 지연 문제를 피하고자 자체 서버 환경을 구축합니다.

OpenFreeMap은 웹사이트와 앱에서 커스텀 지도를 무료로 표시할 수 있도록 지원하는 오픈 소스 프로젝트입니다. 이 프로젝트의 핵심 목표는 기존 도구들을 활용하여 무료의 프로덕션 품질 벡터 타일 호스팅을 제공하는 것입니다. 프로젝트는 OpenStreetMap, OpenMapTiles, Planetiler, MapLibre, Natural Earth, Wikidata와 같은 도구들을 사용합니다.

핵심 방법론 및 아키텍처:
OpenFreeMap의 가장 독특한 특징은 전통적인 타일 서버를 사용하지 않는다는 점입니다. 대신, 약 450 바이트 크기의 수억 개에 달하는 작은 타일 파일들을 효율적으로 처리하기 위해 Btrfs 파티션 이미지와 하드 링크를 직접 활용합니다. 이 접근 방식은 파일 시스템 수준에서 구현되어, 리눅스 커널의 파일 캐싱 기능을 통해 높은 성능을 달성합니다. extract_mbtiles 및 shrink_btrfs와 같은 사용자 정의 스크립트가 MBTiles 파일을 Btrfs 파티션 이미지로 변환하고 최적화하는 데 사용됩니다. 웹 서버는 Ubuntu 기반의 nginx를 사용하며, 최적화된 설정을 통해 Btrfs 이미지에서 직접 타일을 제공합니다.

프로젝트는 크게 세 가지 구성 요소로 나뉩니다:

  1. 배포 서버 (deploy server): ssh_lib와 init-server.py를 통해 깨끗한 Ubuntu 서버에 모든 설정을 자동화합니다. 로컬에서 실행되어 SSH를 통해 서버를 설정합니다.
  2. HTTP 호스트 (HTTP host): modules/http_host 내의 http_host.py가 Btrfs 이미지와 애셋을 다운로드하고 마운트하며, 자동 업데이트를 위한 동기화 작업을 수행합니다.
  3. 타일 생성 (tile generation): modules/tile_gen 스크립트는 OpenStreetMap 데이터 추출본을 다운로드하여 Planetiler를 통해 처리합니다. 생성된 .mbtiles 파일은 extract_mbtiles와 shrink_btrfs를 사용하여 Btrfs 파티션 이미지로 추출 및 축소된 후, rclone을 통해 Cloudflare R2 버킷에 업로드됩니다. 타일 생성은 선택 사항이며, 주간 업데이트되는 전체 행성 Btrfs 및 MBTiles 파일을 공개적으로 다운로드하여 사용할 수 있습니다.

공개 인스턴스는 타일 생성을 위한 1개의 서버와 웹 호스팅을 위한 2개의 서버로 구성됩니다. 웹 서버는 Round-Robin DNS 구성을 통해 로드 밸런싱되며 Let's Encrypt 인증서를 사용합니다. 로드 밸런싱 스크립트는 상태 확인 및 DNS 레코드 업데이트를 관리합니다.

제약 사항:
OpenFreeMap은 특정 목적에 집중하기 위해 다음과 같은 기능을 제공하지 않습니다: 검색 또는 지오코딩, 경로 계산, 정적 이미지 생성, 래스터 타일 호스팅, 위성 이미지 호스팅, 고도 조회, 커스텀 타일 또는 데이터셋 호스팅. 또한, 이 저장소는 로컬 설치용 소프트웨어가 아니라 Ubuntu 서버 배포 스크립트이며, 의도적으로 Docker를 사용하지 않습니다. 자체 호스팅 시 자동 업데이트에 대한 완전한 보장은 제공하지 않으며, Cloudflare의 대용량 파일 범위 요청 지연 시간 문제 및 AWS와 같은 클라우드 제공업체의 데이터 전송 비용 문제로 인해 전통적인 클라우드 서비스를 사용하여 타일을 직접 서빙하는 것을 피합니다.

데이터 및 라이선스:
매주 Btrfs 및 MBTiles 형식의 전체 행성 데이터 다운로드를 제공하며, btrfs.openfreemap.com 및 assets.openfreemap.com과 같은 공개 Cloudflare R2 버킷을 통해 접근 가능합니다. MBTiles 파일은 다른 도구와의 호환성을 위해 제공되지만, 이 프로젝트에서 필수적인 것은 아닙니다.
이 프로젝트의 라이선스는 MIT이며, 지도 데이터는 OpenStreetMap에서 가져옵니다.