키와 가입이 필요 없는 8가지 무료 지오코딩 (Geocoding) API (2026)
요약
API 키나 가입 없이 사용할 수 있는 8가지 무료 지오코딩(Geocoding) API를 소개합니다. Nominatim을 포함하여 주소를 좌표로 변환하거나 그 반대의 작업을 수행할 수 있는 도구들의 실제 작동 사례와 특징을 다룹니다.
핵심 포인트
- API 키와 신용카드 등록 없이 즉시 사용 가능한 무료 API 목록 제공
- Nominatim(OSM)을 포함한 다양한 지오코딩 도구의 실제 curl 테스트 결과 공유
- 무료 API 사용 시 속도 제한(Rate Limit) 및 출처 표기 의무 주의 필요
- 데이터 스크래핑 및 데이터 강화(Enrichment) 단계에서의 활용 가치
데이터에 좌표를 표시하기 위해 Google Maps 키나 신용카드가 필요하지는 않습니다. 저는 오늘 아침 키 없이 8개의 API를 통해 주소를 지오코딩 (Geocoding) 했으며, 모든 API가 일반 HTTP GET 방식으로 응답했습니다. 문제는 가격이 아닙니다. 바로 속도 제한 (rate limit)과 OpenStreetMap에 제공해야 하는 한 줄의 출처 표기입니다.
무료 지오코딩 (Geocoding) API는 유료 벤더 없이 주소를 위도/경도로 변환하거나, 좌표를 다시 주소로 변환합니다. 아래의 8가지는 API 키와 가입이 필요하지 않습니다. 저는 2026년 7월 2일에 실제 curl 명령어를 통해 각각을 재검증했으며 (HTTP 200), 여기에 보이는 모든 응답은 길이를 줄였을 뿐 의역하지 않은 실제 출력값입니다. 제가 하는 것처럼 디렉토리나 리뷰를 스크래핑 (scraping) 한다면, 행 데이터에는 지저분한 주소들이 포함되어 돌아옵니다. 지오코딩 (Geocoding)은 이러한 문자열을 지도에 표시하거나, 위치별로 중복을 제거하거나, 지역별로 필터링할 수 있는 데이터로 변환하는 강화 (enrichment) 단계입니다.
이 내용은 실제적인 공백에서 비롯되었습니다. 이곳에 올린 저의 지난 포스트는 에이전트가 웹을 읽기 위해 사용할 수 있는 키 없는 API 모음이었으며, 저는 글을 마치며 독자들에게 제가 계속 놓치고 있는 한 가지, 즉 실제 트래픽을 견뎌낼 수 있는 좋은 무료 지오코더 (geocoder)를 요청했습니다. 이것이 제 질문에 대한 저의 답변입니다. 저는 이 API들이 각각 저의 2,190회 프로덕션 스크래퍼 (production scraper) 실행 과정 내에서 작동했다고 주장하는 것이 아닙니다. 그것은 거짓말이 될 것입니다. 저는 모든 API에 대해 실제 curl을 다시 실행하고 그 결과물을 그대로 붙여넣었다고 주장하는 것입니다.
전체 목록을 한눈에 살펴본 후, 각 섹션별로 자세히 알아보겠습니다.
| # | API | 기능 | 커버리지 (Coverage) | 키 불필요? |
|---|---|---|---|---|
| 1 | Nominatim (OSM) | 주소 → 좌표, 좌표 → 주소, 구조화된 검색 | 글로벌 (Global) | 예 (1 req/s) |
| ... |
1. Nominatim: OpenStreetMap의 핵심 도구 (글로벌, 순방향 + 역방향)
Nominatim은 "무료 지오코더 (geocoder)"에 대한 기본 답변입니다. OpenStreetMap 데이터를 검색하며 세 가지 작업(주소를 좌표로, 좌표를 주소로, 그리고 거리와 도시를 별도의 필드로 전달하는 구조화된 조회)을 모두 수행합니다.
순방향 (Forward). 에펠탑을 요청해 보세요:
순방향 (Forward). 에펠탑을 요청해 보세요:
curl -A "my-app/1.0 (you@example.com)" \
"https://nominatim.openstreetmap.org/search?q=Eiffel+Tower,+Paris&format=jsonv2&limit=1"
[{"place_id":98616190,"osm_type":"way","osm_id":5013364,
"lat":"48.8582599","lon":"2.2945006",
"category":"man_made","type":"tower","name":"Tour Eiffel",
...
역방향 (Reverse). 위도/경도를 전달하면 가장 가까운 주소를 받습니다:
curl -A "my-app/1.0 (you@example.com)" \
"https://nominatim.openstreetmap.org/reverse?lat=48.8584&lon=2.2945&format=jsonv2"
{"lat":"48.8583982","lon":"2.2944933",
"display_name":"Avenue Gustave Eiffel, ... Paris 7e Arrondissement, ... 75007, France",
"address":{"road":"Avenue Gustave Eiffel","suburb":"Paris 7e Arrondissement",
...
구조화된 조회 (Structured). 스크래핑한 행이 이미 거리와 도시를 분리했다면, ?street=1600+Amphitheatre+Parkway&city=Mountain+View&format=jsonv2는 "Google Building 41"에 대해 lat 37.4224858 / lon -122.0855846을 반환합니다. 모든 것을 하나의 q= 문자열에 넣는 것보다 더 깔끔한 매칭입니다.
이것이 무료인 이유, 그리고 실제 비용. 공개 인스턴스는 OpenStreetMap Foundation에서 운영합니다. 그들의 사용 정책을 실제로 준수해야 합니다: 초당 최대 1 요청, 앱을 식별하는 유효한 User-Agent, 결과 캐싱, 그리고 출처 명시(
{"type":"FeatureCollection","features":[{"type":"Feature",
"properties":{"osm_id":23733659,"name":"Google Building 41","housenumber":"1600",
"street":"Amphitheatre Parkway","city":"Mountain View","state":"CA",
...
역지오코딩 (Reverse Geocoding)도 동일한 방식으로 작동합니다: https://photon.komoot.io/reverse?lat=52.5163&lon=13.3777를 호출하면 베를린의 우편번호 10117, "Quadriga mit Victoria"라는 결과가 반환됩니다.
제가 실제로 겪었던 주의사항입니다. 저의 첫 번째 Photon 쿼리는 베를린의 랜드마크를 기대하며 q=Brandenburg+Gate로 보냈습니다. 하지만 대신 다음과 같은 결과가 반환되었습니다:
{"features":[{"properties":{"name":"Brandenburg Gate","osm_value":"residential",
"city":"Stuttgart","county":"Arkansas","state":"Arkansas","country":"United States"},
"geometry":{"type":"Point","coordinates":[-91.556358,34.5155358]}}]}
아칸소(Arkansas)주 슈투트가르트(Stuttgart)에 있는 "Brandenburg Gate"라는 이름의 주거 지역 도로였습니다. 기념물이 아니었죠. 퍼지 이름 매칭 (Fuzzy name matching)은 기꺼이 당신에게 잘못된 반구의 결과를 건네줄 것입니다. 따라서 결과를 신뢰하기 전에 도시와 국가를 기준으로 첫 번째 검색 결과가 맞는지 확인하거나, 쿼리에 국가를 추가하세요. Komoot는 이를 무료로 제공하며 과도한 요청을 자제해 달라고 요청하고 있습니다. 대규모 배치 작업 (Batch work)이 필요하다면 직접 호스팅 (Self-host)하세요.
3. api-adresse.data.gouv.fr: 프랑스 정부 지오코더 (프랑스)
데이터가 프랑스와 관련이 있다면, 이 서비스가 일반적인 지오코더보다 낫습니다. 프랑스 정부가 운영하는 공식 국가 주소 데이터베이스 (Base Adresse Nationale)로, API 키가 필요 없으며 프랑스 주소에 대해 매우 정확합니다.
curl "https://api-adresse.data.gouv.fr/search/?q=8+bd+du+port&limit=1"
{"features":[{"geometry":{"type":"Point","coordinates":[2.062821,49.031624]},
"properties":{"label":"8 Boulevard du Port 95000 Cergy","score":0.4924265550239234,
"housenumber":"8","postcode":"95000","city":"Cergy",
...
해당 score 필드는 실제로 유용합니다. 이 필드는 매칭의 신뢰도 (confidence)를 알려주므로, 데이터베이스에 잘못된 좌표를 기록하는 대신 배치 (batch) 작업 중 신뢰도가 낮은 행을 제외할 수 있습니다. 역 지오코딩 (Reverse geocoding)도 동일하게 작동합니다 (/reverse/?lon=2.2945&lat=48.8584 호출 시 결과로 Avenue Anatole France, 75007 Paris를 반환하며, 결과별 score는 0.9967입니다). 공공 인프라이기 때문에 무료입니다. 다만 속도 제한 (rate limit)이 있으므로, 대량 작업 (bulk job)을 실행하기 전에 adresse.data.gouv.fr에서 현재 제한 수치를 확인하세요.
4. Zippopotam.us: 우편번호를 장소로, 양방향 지원 (~60개국)
때로는 거리 주소 없이 우편번호 (ZIP 또는 postcode)만 있는 경우가 있습니다. Zippopotam은 수십 개의 국가를 지원하며 키 (key)나 가입이 필요하지 않습니다.
curl "https://api.zippopotam.us/us/90210"
{"post code":"90210","country":"United States","country abbreviation":"US",
"places":[{"place name":"Beverly Hills","state":"California",
"state abbreviation":"CA","latitude":"34.0901","longitude":"-118.4065"}]}
반대 방향으로도 작동합니다. https://api.zippopotam.us/us/ca/beverly%20hills는 해당 장소의 모든 우편번호(90209, 90210, 90211 등)를 반환합니다. 정밀도는 거리 번호가 아닌 우편번호 단위이므로, 문 앞까지의 정확도가 아닌 대략적인 매핑 (coarse mapping) 및 지역 필터링 (region filtering) 용도로 적합합니다.
5. Postcodes.io: 방대한 행정 지리 정보를 포함한 영국 우편번호 (UK)
영국 데이터를 다룰 때 제가 가장 먼저 찾는 서비스입니다. 무료이며, 오픈 소스 (open-source)이고, 자체 호스팅 (self-hostable)이 가능하며, 좌표보다 훨씬 더 많은 정보를 반환합니다.
curl "https://api.postcodes.io/postcodes/SW1A1AA"
{"status":200,"result":{"postcode":"SW1A 1AA",
"longitude":-0.141563,"latitude":51.50101,
"region":"London","admin_district":"Westminster","admin_ward":"St James's",
...
내용을 일부 생략했습니다. 전체 응답에는 우편번호당 약 80개의 필드가 포함되어 있습니다: 선거구 (constituencies), 보건 구역 (health areas), 인구 조사 출력 구역 (census output areas), ONS 코드 등. 역 지오코딩 (Reverse geocoding)은 쿼리 문자열 (query string) 하나로 가능합니다 (?lon=-0.141563&lat=51.50101). 스크래핑한 영국 주소를 정부 데이터셋과 결합해야 한다면, 이러한 행정 코드 (admin codes)들이 추가적인 조회 과정을 줄여줄 것입니다.
6. OpenPLZ: 독일어권 유럽(DE/AT/CH/LI)을 위한 우편 및 지역 디렉토리
OpenPLZ는 독일, 오스트리아, 스위스, 리히텐슈타인을 위한 깔끔한 오픈 데이터 (open-data) 디렉토리입니다. 우편번호 (postal code)를 지역 (locality)과 대조하여 검증하거나 행정 계층 구조 (administrative hierarchy)를 추출하는 데 유용합니다.
curl "https://openplzapi.org/de/Localities?postalCode=10117"
[{"postalCode":"10117","name":"Berlin",
"municipality":{"key":"11000000","name":"Berlin, Stadt","type":"Kreisfreie Stadt"},
"federalState":{"key":"11","name":"Berlin"}}]
이것은 전체 주소 지오코더 (street geocoder)가 아닌 디렉토리이므로, Nominatim의 대체재로 보기보다는 DACH(독일, 오스트리아, 스위스) 지역의 우편번호 조회 (postal-lookup) 파이프라인 구성 요소로 취급하십시오. API 키가 필요 없으며, 오픈 데이터 (open data)를 기반으로 합니다.
7. 3geonames.org: 빠른 역 지오코딩 (reverse geocoding), 독특한 형식 (글로벌)
단순히 "이 좌표 근처에 어떤 장소가 있는가"만을 알고 싶을 때, 3geonames는 한 줄의 명령어로 해결 가능합니다. API 키는 필요 없습니다.
curl "https://api.3geonames.org/48.8584,2.2945.json"
{"threegeonames":"PARIS-STURGIS-KULDEEP",
"nearest":{"latt":"48.8627","longt":"2.28858",
"name":"Cité de l'architecture et du patrimoine",
...
네, 최상위 threegeonames 필드에 실제로 "PARIS-STURGIS-KULDEEP"라고 적혀 있습니다. 응답 형태 (response shape)가 특이하고 데이터 양도 많지만, nearest 블록을 통해 단 한 번의 호출로 이름, 지역, 시간대 (timezone), 고도 (elevation)를 얻을 수 있습니다. 저는 이를 기본 지오코더로 쓰기보다는 빠른 역 조회 (reverse lookup) 용도로 사용할 것입니다.
8. 보너스: 주소가 없다면? ip-api.com을 이용한 IP 기반 지오로케이션 (글로벌)
이 항목은 카테고리가 다르므로, 보너스로 솔직하게 나열합니다. 이는 IP 주소를 대략적인 위치로 매핑하며, 주소를 좌표로 변환하는 것과는 다른 작업입니다. 하지만 웹 로그 (web logs)를 풍부하게 만들거나 방문자의 대략적인 국가/도시 정보를 알고 싶다면, API 키가 필요 없는 유용한 도구입니다.
curl "http://ip-api.com/json/24.48.0.1"
{"status":"success","country":"Canada","regionName":"Quebec",
"city":"Montreal","zip":"H1K","lat":45.6085,"lon":-73.5493,
"isp":"Le Groupe Videotron Ltee","query":"24.48.0.1"}
이용 약관을 주의 깊게 읽으십시오. 무료 티어 (Free tier)는 비상업적 용도이며 일반 HTTP (HTTPS 아님)를 통해 제공됩니다. 키 (Key)가 필요 없으나 속도 제한 (Rate-limited)이 있습니다 (문서상 분당 약 45회 요청으로 명시되어 있으나, 실제 구축 전 현재 제한 수치를 확인하십시오). HTTPS 및 상업적 이용은 유료입니다.
언급할 만한 서비스: 무료 티어가 있으나 무료 키가 필요함 (카드 등록 불필요)
신용카드 등록 없이 진정한 무료 티어를 제공하는 세 가지 서비스가 있지만, 무료 API 키를 요구하기 때문에 '키가 필요 없는 (Keyless)' 목록에는 포함하지 않았습니다. 이 서비스들은 실시간 테스트를 거치지 않았으므로 할당량 (Quota)을 인용하지는 않겠습니다. 사용을 결정하기 전에 각 서비스의 가격 페이지에서 현재 수치를 확인하십시오: OpenCage Geocoder (opencagedata.com), Geoapify (geoapify.com), 그리고 LocationIQ (locationiq.com). 세 서비스 모두 OSM (OpenStreetMap)을 기반으로 하며 적당한 규모의 데이터 처리에 적합합니다.
일부 "무료" 지오코더가 선정되지 않은 이유
키가 필요 없다는 약속은 네트워크 상황에 따라 깨질 수 있습니다. 여러분의 소중한 오후 시간을 낭비하지 않도록, 제가 2026년 7월 2일에 테스트했을 때 실패했던 사례들을 정리했습니다:
- US Census Geocoder는 진정으로 무료이며 키가 필요하지 않고, 미국 주소에 대한 권위 있는 출처입니다. 하지만 브라우저 User-Agent를 사용했음에도 불구하고, 두 번의 시도 모두 WAF (Web Application Firewall)에서 데이터센터의 curl 요청을 거부했습니다 ("Request Rejected"). 브라우저나 주거용 IP (Residential IP)에서는 작동합니다. 무료라고 해서 모든 환경에서 호출할 수 있다는 의미는 아닙니다.
- BigDataCloud의 reverse-geocode-client는 키가 필요 없지만, TLS 인증서가 만료되었습니다:
notAfter Jul 1 2026. 그 다음 날 curl은 연결을 거부했습니다. 깨끗한 호출이 가능한지 확인할 수 없었습니다. - GeoNames는 무료이지만, 공유된
demo계정이 일일 제한을 초과했습니다 ("daily limit of 20000 credits for demo has been exceeded"). 본인만의 무료 사용자 이름이 필요하며, 이는 가입을 의미합니다. - geocode.xyz는 키가 필요 없지만, 무료 티어에서
Throttled! See geocode.xyz/pricing메시지를 반환했습니다. - geocode.maps.co는 현재
401 Missing API Key응답을 보냅니다.
제가 의도적으로 제외한 두 가지가 더 있습니다. Open-Meteo geocoding과 Wikipedia GeoSearch는 모두 키가 필요 없고 훌륭하지만, 이 제공업체들은 제 지난 키 없는 API 포스트에서 이미 다루었으므로, 이 목록에는 새로운 이름들만 유지하겠습니다.
차단당하지 않고 많은 주소를 지오코딩 (Geocoding) 하는 방법
무료 지오코더 (Geocoder) 사용 시 실패 모드는 첫 번째 호출에서 발생하지 않습니다. 만 번째 호출에서 발생합니다. 다음 세 가지 습관이 당신을 보호해 줄 것입니다:
공격적으로 캐싱 (Cache) 하세요. 스크래핑된 주소는 끊임없이 반복되므로, 동일한 문자열이 API에 두 번 호출되어서는 안 됩니다. 제가 데이터 보강 (Enrichment) 행을 지오코딩할 때, 캐시 히트율 (Cache hit rate)이 대부분의 작업을 수행하며 API는 트래픽의 아주 일부만 처리하게 됩니다. 정규화된 주소를 해싱 (Hash) 하여 결과를 저장하고 재사용하세요.
실제 큐 (Queue)를 사용하여 속도 제한 (Rate limit)을 준수하세요. Nominatim은 초당 1회의 요청을 의미합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기