웹에서 위치정보는 여전히 민감하고 실패하기 쉬운 기능이다.
기존 navigator.geolocation 기반 구현은 의도 없는 권한 프롬프트, 자동 차단, 복구 불가 UX라는 구조적 한계를 안고 있었다.
Chrome 144부터 도입된 <geolocation> HTML 요소는 이 문제를 API 레벨이 아니라 상호작용 모델 자체를 바꾸는 방식으로 해결한다.
이 글은 다음을 명확히 정리한다.
<geolocation> 요소가 무엇을 바꿨는가기존 방식은 다음 흐름에 의존했다.
navigator.geolocation.getCurrentPosition(...)
이 구조의 핵심 문제는 명확하다.
사용자는 왜 지금 위치 권한을 묻는지 이해하지 못한 채 차단을 선택한다.
Chrome은 동일한 권한 프롬프트를 여러 번 무시/차단하면:
즉, 기존 방식은 한 번의 실수로 영구적으로 망가지는 UX를 만든다.
개발자는 다음을 모두 직접 처리해야 했다.
보일러플레이트가 많고, 실수 가능성이 높다.
<geolocation> 요소의 핵심 전환점<geolocation>은 명령형 API → 선언적 UI 요소로의 전환이다.
권한 요청은 반드시 “사용자 클릭”으로만 발생한다
즉:
<permission>에서 <geolocation>으로초기에는 범용 <permission type="geolocation"> 요소가 제안되었다.
그러나 브라우저 벤더들의 공통된 결론은 다음이었다.
그 결과:
<geolocation><usermedia><geolocation>은 “권한 중재자”가 아니라 “데이터 중재자”이 차이가 핵심이다.
| 구분 | 기존 Geolocation API | <geolocation> |
|---|---|---|
| 트리거 | JS 호출 | 사용자 클릭 |
| 브라우저 역할 | 프롬프트 결정 | 데이터 중재 |
| 개발자 책임 | 콜백·에러 직접 처리 | 이벤트 수신 |
| UX 복구 | 거의 불가 | 요소 클릭으로 가능 |
<geolocation
onlocation="handleLocation(event)"
autolocate
accuracymode="precise">
</geolocation>
function handleLocation(event) {
if (event.target.position) {
const { latitude, longitude } = event.target.position.coords;
console.log(latitude, longitude);
} else if (event.target.error) {
console.error(event.target.error.message);
}
}
position, error는 DOM 요소의 상태autolocateaccuracymode"precise" / "approximate"enableHighAccuracy 대체watchwatchPosition()과 동일position: GeolocationPositionerror: GeolocationPositionError<geolocation>은 일반 버튼이 아니다.
브라우저는 기만적 UI를 방지하기 위해 제약을 둔다.
:granted 상태 스타일 지원이 제약은 단점이 아니라 신뢰 모델의 일부다.
<geolocation>은 HTMLUnknownElement<geolocation onlocation="updateMap()">
<button onclick="navigator.geolocation.getCurrentPosition(updateMap)">
Use my location
</button>
</geolocation>
if ('HTMLGeolocationElement' in window) {
// modern path
} else {
// legacy path
}
<geolocation>은 단순한 문법 추가가 아니다.
이 모든 것을 HTML 레벨에서 재설계한 요소다.
앞으로 웹 권한 API는 다음 방향으로 간다.
“스크립트가 요청하지 말고
사용자가 직접 행동하게 하라”
Chrome 144의 <geolocation>은 그 전환의 시작점이다.