Geolocation 위치 정보 기능

이 글은 Firefox 3.5의 Geolocation 기능을 개발한 Doug Turner가 작성하였습니다.

다양한 위치 정보를 이용하는 것이 현재 인터넷의 큰 화두입니다. 제가 토론토의 한 커피숍에 있고 제가 구글에서 검색을 한다고 하면 제 IP 주소를 기반으로 캐나다의 구글 페이지로 이동 시켜 줍니다. 주변의 제일 가까운 영화관을 찾고자 한다고 하면 나의 우편 번호를 기반으로 찾을 수 있겠지요. 웹 기반 애플리케이션에서 그러한 수고 없이도 나의 위치를 제공할 수 있는 방법이 있을까요?

Firefox 3.5는 간단한 JavaScript API를 이용하여 사용자의 위치 정보를 웹 애플리케이션이 받아 갈 수 있는 기능을 탑재했습니다. 위치 정보를 별도로 타이핑하지 않아도 웹 사이트에 나의 위치를 공유할 수 있습니다. Firefox 3.5의 Geolocation 서비스에 대해 살펴 보고 사용 방법을 알아보겠습니다.

기능 소개
사용자의 위치 정보는 얻어오는 방법은 매우 쉽습니다.

function showPosition(position) {

    alert(position.coords.latitude + “ “ +
    position.coords.longitude);

}
 
navigator.geolocation.getCurrentPosition(showPosition);

getCurrentPosition을 호출해서 사용자의 현재 위치를 얻고 이를 알림창에 표시하는 것으로 위치는 위도와 경도 값으로 표현됩니다.

위치 정보를 얻어오려고 할 때 주소창 아래에 간단한 알림 표시줄이 보이게 됩니다.

요청 하는 웹 사이트에 위치 정보 제공 허가 여부와 기억 여부를 결정할 수 있습니다.

오류 처리
소스 코드에서 2가지 경우 오류를 처리하는 것이 필요합니다.

먼저 사용자가 위치 정보 요청에 대해 응답하지 않거나 거부하는 경우 API는 오류 콜백을 제공합니다. 사용자가 공유를 거부하면 콜백이 만들어지지만 응답하지 않는 경우 제공되지 않습니다. 이러한 콜백 오류를 처리하려면 시간 초과(timeout) 기능을 이용하여 getCurrentPosition 호출을 특정 시간 이후에 만료 시켜야 합니다.

navigator.geolocation.getCurrentPosition(successCallback,

                                         errorCallback,
                                         {timeout:30000});

위의 코드에서 errorCallback 함수는 사용자가 취소할 경우 실행 되는데 30초 후에도 응답이 없으면 요청이 취소 됩니다.

두번째는 사용자 위치가 시간에 따라 변해서 위치의 정확성이 떨어지는 경우 입니다. 그 이유에는 몇 가지가 있습니다.

  • 사용자의 위치를 파악하는 데 필요한 방법의 정확성에서 차이가 날 때.
  • 사용자가 정확한 위치 정보를 제대로 공유해 주고 있지 않을 때.
  • GPS 기기의 정확성은 대개 위성 위치에 따라 차이가 나는데 시간에 따라 이동에 의해 위성 정보가 좀 더 나빠질 경우.
  • GPS 기기가 위치를 잡을 때 길게는 수십초가 걸리는데 이 때 위치 이동 시 정보에 차이가 발생 할때.

이들 경우 공유된 위치 정보가 차이가 날 수 있으며 이는 서비스의 사용자 경험에 영향을 줄수 있습니다. 만약 위치 정보의 변화를 주시하고자 한다면 watchPosition 콜백 API를 사용할 수 있습니다.

navigator.geolocation.watchPosition(showPosition);

showPosition 역시 위치가 변경될 때 호출 합니다. 이 때 getCurrentPosition을 이용하여 위치 정보를 다시 얻어올 수 있습니다. 하지만, 성능 등 여러 문제 때문에 watchPosition을 이용하는 것이 좋습니다. 콜백 API는 일반적으로 호출될 때만 사용되므로 성능에 도움을 줍니다. 이는 브라우저의 짐을 덜어주고 좀 더 빠른 응답이 가능합니다. 더 자세한 사항은 API 명세 초안을 참고하시면 다양한 예제들이 있습니다.

위치 정보 수집 방식
위치 정보를 정확히 어떻게 얻어 낼수 있을까요. 가장 흔한 방법이 무선 AP의 위치와 IP 주소 정보 그리고 GPS 기기를 이용하는 것입니다. Firefox 3.4에서는 WiFi 네트웍 및 IP 주소를 이용하여 정보를 얻어내게 되지만 정확도에서는 차이가 많이 납니다.

또한, 아직까지는 이러한 정보를 이용해서 위치 정보를 제공해 주는 회사가 몇 군데 없습니다. 데이터의 크기가 매우 크고 복잡한 저장 단계를 거쳐야 하기 때문입니다. WiFi AP 정보가 없다면 IP 주소를 이용하기도 하는데 IP 주소를 위치 정보로 변환해 주는 역 데이터베이스를 이용합니다. 예를 들어 제가 토론토에 있다면 WiFi를 이용한 위치는 150m의 정확성을 보이지만 IP 주소의 경우 25km 이상 차이가 납니다.

개인 정보 보호
개인 정보를 보호하는 것은 Mozilla의 중요한 사명 중에 하나입니다. 사용자 실명을 수집하는 것이나 위치 정보를 공유하는 것 모두 매우 민감한 문제 입니다. 실제로 유럽 연합에서는 위치 정보를 개인 식별 정보로 취급하고 있습니다. 우리는 사용자가 이러한 정보를 정확하게 제어할 수 있어야 한다고 믿고 있으며 파이어폭스가 위치 정보 공유를 요청하는 웹 사이트의 정보를 제공하고 이에 대한 판단을 할 수 있도록 하고 있습니다. 이들 웹 사이트의 페이지 정보를 이용하면 현재 제공 정보를 거부할 수 있는 기능도 제공합니다.

Firefox는 사용자의 개인 정보를 보호해 줄 뿐만 아니라 W3C의 Geolocation 워킹 그룹이 제안하는 개인 정보 고려 사항 역시 준수하도록 하고 있습니다.

  • 위치 정보 수신자는 위치 정보만을 요청 받아야 한다.
  • 수신자는 위치 정보 요청 시 제공하는 작업에만 이 정보를 이용해야 한다.
  • 수신자는 작업이 완료되면 수신한 위치 정보는 사용자의 별도의 동의가 아니면 저장하지 않고 파기해야 한다.
  • 위치 정보를 저장할 경우 사용자에게 이 정보를 업데이트하거나 삭제할 수 있는 권한을 주어야 한다.
  • 수신자는 사용자의 동의 없이 위치 정보를 재송신해서는 안되며, 만약 동의를 얻어 재송신할 경우에는 HTTPS 암호 통신을 사용하도록 한다.
  • 수신자는 명백하고 양심적으로 정보를 수집하고 이용해야 하며 정보 수집의 목적과 데이터 저장 기간, 데이터 보안 방법, 재공유 사유 및 방법 및 사용자의 갱신 및 삭제 방법 등을 명시해야 한다. 이러한 가이드라인은 사용자가 쉽게 인지할 수 있도록 해야 한다.\

이러한 자발적인 준수 규약이 있지만 사용자들이 믿을 만한 웹 사이트를 잘 판단하여 개인 정보를 제공하는 것이 더 중요하다고 생각 합니다. 따라서 웹 사이트 개발자들이 안심하고 서비스를 이용할 수 있도록 해야 합니다.

호환성 이슈
우리는 W3C에서 Geolocation 표준 초안을 만들었습니다. 약간의 변경은 있겠지만 하위 호환성을 유지하는 그룹의 활동을 지원하고 있습니다. 여러분이 알고 있어야 할 이슈 중에 하나는 enableHighAccuracy라는 기능인데 useLowPower라는 이름을 쓰기도 합니다. Firefox 3.5에서는 enableHighAccuracy를 호환성 이유로 사용하고 있으며 여러 버전의 호환성 문제 때문에 이름이 변경되지 않을 것 같습니다.

맺으면서
Firefox 3.5는 Geolocation 서비스를 제공하는 첫번째 단계에 접어들었습니다. 여러 단체들이 비슷한 종류의 다양한 표준 작업을 시작하고 있습니다. 이 첫 단계의 서비스를 통해 사용자들이 트위터나 페이스북에 사진을 올리고 주변의 사람들을 만나고 정보를 공유하고 하는 것에 이어 비슷한 지역의 정보를 이용함으로서 웹 서비스의 큰 역할을 하리라고 기대해 봅니다.

작성자: Channy Yun

Channy Yun가 작성한 문서들…


댓글이 없습니다.

댓글 쓰기