SSL 연결 없이 HTML5 Geolocation 활용하기
HTML5의 Geolocation API는 사용자의 현재 위치(위도와 경도)를 파악할 때 사용됩니다. 일반적으로 브라우저의 Geolocation 기능은 보안상의 이유로 HTTPS(SSL) 연결이 필요하지만, Google Maps Geolocation API를 활용하면 SSL 연결 없이도 사용자의 위치 정보를 얻을 수 있습니다.
1. 성공 콜백 함수 작성
먼저 위치 조회에 성공했을 때 결과를 처리할 콜백 함수를 정의합니다. 아래 예제에서는 apigeo 변수가 성공적인 위치 조회를 담당하며, 획득한 위도(latitude)와 경도(longitude)를 알림 창으로 표시합니다.
// apigeo 변수는 성공적인 위치 조회를 나타냅니다.
var apigeo = function(position) {
alert("API geolocation success!\n\nlat = " + position.coords.latitude + "\nlng = " + position.coords.longitude);
};
var tryapigeo = function() {
jQuery.post("check the location on google map", function(success) {
apiGeolocationSuccess({coords: {latitude: success.location.lat, longitude: success.location.lng}});
}) // 주어진 지리적 위치에 대해 성공 시 실행
.failure(function(err) { // 실패 시 오류 알림 표시
alert("error while showing geolocation! \n\n" + err);
});
};2. 브라우저 Geolocation 호출하기
다음으로, 브라우저 자체의 navigator.geolocation 객체를 사용해 현재 위치를 조회하는 함수를 작성합니다. 아래 코드에서 tryloc 변수는 현재 위치를 가져오는 역할을 하며, 높은 정확도(high accuracy) 옵션을 설정하여 더 정밀한 결과를 얻습니다.
var tryloc = function() { // tryloc 변수는 현재 위치를 표시합니다.
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
browserGeolocationSuccess,
browserGeolocationFail,
{
maximumAge: 70000, // 캐시된 위치의 최대 유효 시간(ms)
timeout: 40000, // 위치 조회 제한 시간(ms)
enableHighAccuracy: true // 높은 정확도로 결과 표시
});
}
};3. 오류 코드별 예외 처리
위치 조회 과정에서는 다양한 이유로 오류가 발생할 수 있습니다. 예를 들어 사용자가 권한 요청을 거부하거나(PERMISSION_DENIED), 위치를 확인할 수 없거나(POSITION_UNAVAILABLE), 제한 시간이 초과되는(TIMEOUT) 경우입니다.
따라서 마지막 단계에서는 오류 코드(error code)별로 switch 문을 구성하여, 발생한 오류의 종류에 따라 서로 다른 메시지나 대체 동작을 처리하면 됩니다. 이렇게 하면 어떤 상황에서 실패했는지 명확하게 구분할 수 있어 디버깅과 사용자 안내에 큰 도움이 됩니다.
정리
SSL 연결 없이 HTML5 Geolocation을 사용하려면 ① 성공 콜백 함수 정의 → ② 브라우저 또는 외부 API를 통한 위치 조회 → ③ 오류 코드별 예외 처리의 세 단계를 순서대로 구현하면 됩니다. 특히 타임아웃과 정확도 옵션을 적절히 조정하면 다양한 환경에서 안정적으로 위치 정보를 얻을 수 있습니다.