2013. 3. 29. 14:44

NHN 웹앱개발팀 이현철

가장 많은 스마트폰 플랫폼을 지원하는 하이브리드 앱 개발용 크로스 플랫폼인 PhoneGap. PhoneGap의 특징은 무엇이고 애플리케이션 개발에 어떻게 사용할 수 있는지 간략하게 살펴보겠습니다.

  • 스마트폰 크로스 플랫폼

    스마트폰 플랫폼 벤더에서 제공하는 네이티브 SDK로 제작한 애플리케이션을 네이티브 앱이라고 한다. iOS를 대상으로 하는 애플리케이션은 Object-C로, Android를 대상으로 하는 애플리케이션은 Java로 개발해야 한다. 이렇게 플랫폼별로 개발 언어와 환경이 다르기 때문에 여러 디바이스와 플랫폼을 지원하려면 디바이스와 플랫폼의 개수만큼 시간과 노력을 들여야 하는 문제가 발생한다.

    물론 사용자에게 제공하려는 기능을 표준 웹으로 구현할 수 있다면 애플리케이션 개발 노력을 줄일 수 있지다. 하지만 웹 브라우저에 구현할 수 있는 UX와 기능은 아직 네이티브 앱에 비하여 열악하다. 결정적으로 표준 HTML과 JavaScript로는 카메라나 가속도계를 비롯한 스마트폰의 다양한 기능을 사용할 수 없다.

    현재는 세계적으로 iPhone(iPad), Android, BlackBerry 등이 많이 사용되고 있지만, 앞으로 Window Phone 7이 등장하면 앱 제작사 입장에서는 동일한 기능을 플랫폼별로 제작해야 하는 부담이 더 늘게 된다. 이런 부담을 줄이려는 노력은 자연스럽게 크로스 플랫폼(Cross Platform)의 발전으로 이어졌다.

    현재 많은 종류의 스마트폰 크로스 플랫폼이 있다. 그 중에서 주목할 만한 것 두 가지를 꼽자면 Titanium MobilePhoneGap이 있다.


    참고

    더 다양한 종류의 크로스 플랫폼에 대한 정보는 http://en.wikipedia.org/wiki/Multiple_phone_web_based_application_framework를 참조한다.


    Titanium Mobile은 개발자가 Titanium Mobile에서 제공하는 고유의 JavaScript API로 애플리케이션을 개발하면, 개발 환경이 JavaScript 코드를 네이티브 개발 언어로 치환하는 방식이다.

    PhoneGap(또는 Apache Cordova)은 '하이브리드 앱(Hybrid App)' 부류에 속하는 크로스 플랫폼이다. 하이브리드 앱이란 개발자가 플랫폼에 의존적인 기능(카메라 등의 장치 제어)만 네이티브 라이브러리로 제작하고 HTML과 JavaScript로 네이티브 기능을 이용할 수 있도록 한 것이다. 그래서 하이브리드 앱 개발자는 HTML5, CSS, JavaScript만으로도 애플리케이션을 개발할 수 있다.

    PhoneGap을 이용한 하이브리드 앱을 개발하는 과정을 간략하게 나타내면 다음 그림과 같다. 먼저, 웹 표준 기술을 이용하여 애플리케이션을 개발한다. 그리고 PhoneGap을 이용하여 각 플랫폼별 프로젝트를 구성한 다음 애플리케이션을 앱스토어에 배포한다.

    p01.png

    그림 1 PhoneGap 앱 제작 과정(원본 출처: http://phonegap.com/about)


    참고

    Adobe사가 PhoneGap을 인수한 이후 PhoneGap 소스를 Apache 재단에 기부했다. 현재 PhoneGap은 Apache Incubator에 속해 있다. Apache Incubator에서 PhoneGap은 Apache Callbakc으로 불리다 Apache Cordova로 이름이 바뀌었다.


  • PhoneGap

    PhoneGap은 웹 콘텐츠를 보여 주는 웹뷰(WebView)에서 스마트폰 디바이스에 접근하여, 카메라나 마이크 제어 같은 웹 브라우저 고유 기능 이외의 기능을 실행할 수 있는 인터페이스를 제공하는 대표적인 하이브리드 앱 개발 솔루션이다. 캐나다에 있는 Nitobi라는 회사에서 처음 제작했으며 2011년 10월에 Adobe사가 PhoneGap을 인수했다. Adobe사의 인수 후에 Apache 라이선스 적용으로 오픈소스 정책을 더욱 강화했으며, 각종 추가 기능이 플러그인 형태로 개발되어 커뮤니티에 공유되고 있는 것이 장점이다.

    PhoneGap은 현재 하이브리드 앱 플랫폼 중 가장 큰 경쟁력을 가지고 있다. 가장 많은 스마트폰 플랫폼(iOS, Android, Windows Phone, Blackberry 등 7개 운영체제)을 지원하고, 제품 완성도도 높기 때문이다.

    PhoneGap에 대해서 좀 더 자세히 알아보도록 하겠다.


    PhoneGap이 아닌 다른 하이브리드 앱 플랫폼

    PhoneGap 외에 국내에서 사용하는 대표적인 하이프리드 앱 플랫폼으로 WAC와 앱스프레소가 있다.

    WAC

    WAC(Wholesale Applications Community)는 개발 프레임워크라기보다는 웹 언어로 개발되는 하이브리드 앱의 개발/배포/보안/판매 등의 명세(Specification)를 정의하는 표준화 단체이다. 전 세계에서 많은 모바일 제조사 및 통신사에서 참여하고 있지만 Apple에서 지원하고 있지 않다는 단점이 있다. 따라서 WAC로는 iPhone용 애플리케이션을 개발할 수 없다. 이미 삼성, HTC, 모토로라 등이 WAC 기능을 지원하는 단말기를 출시하고 있고, 국내의 통신사에서도 채택하여 K-WAC이라는 통합 앱스토어를 출범했으나 현재는 Android를 사용하는 일부 단말기에서만 사용할 수 있다.

    앱스프레소

    KTH에서 개발한 국내 하이브리드 앱 개발 솔루션으로 WAC의 Device API 규격인 Waikiki API를 채택했다. 현재는 PhoneGap과 같이 네이티브 앱이 웹뷰를 포함하여 패키징되는 형태이나 곧 WAC용 앱으로 패키징하는 기능을 추가할 예정이다. 산업계 표준 API를 사용하는 강점이 있으나 아직까지는 iOS 및 Android의 두 개 플랫폼만 지원한다.


    PhoneGap은 다음 그림과 같이 웹뷰를 포함하는 네이티브 앱 구조이다. PhoneGap에는 장치 제어를 위한 JavaScript API가 있는데, 이 API를 이용해 카메라, 주소록, 가속도계 등을 사용할 수 있다

    p02.png

    그림 2 PhoneGap 레이어링

    2011년 11월 7일에 릴리스된 1.2.0 버전을 기준으로 장치 제어에 사용하는 디바이스 API는 다음과 같다. API에 대한 상세한 내용은 "PhoneGap API Reference" 문서를 참조한다.

    • Accelerometer: 가속도계 사용
    • Camera: 사진 촬영과 사진 앨범 탐색 
    • Capture: 동영상 녹화, 오디오 녹음, 정지 영상 촬영
    • Compass: 나침반 기능
    • Connection: 모바일 네트워크 상태 확인
    • Contacts: 주소록 검색 및 연락처 추가/수정/탐색
    • Device: 단말기, 운영체제 버전 등 
    • Events: 하드웨어 버튼 이벤트
    • File: 파일 입출력, 전송 
    • Geolocation: 위치 정보 
    • Media: 음성 재생과 녹음
    • Notification: 벨 소리, 진동, 시스템 알림 메시지 등
    • Storage: 네이티브 DB 접근
  • PhoneGap 동작 과정

    PhoneGap의 핵심 기능은 JavaScript와 네이티브 코드로 된 라이브러리를 연결하는 것이다. 그런데 JavaScript와 네이티브 코드는 동작 환경이 다르다. JavaScript는 인터프리터 방식으로 실행되는 것이어서 네이티브 코드와 데이터를 공유할 수 없다. 그래서 일종의 RPC를 사용해야 하는데, PhoneGap에서는 별도의 문자열 프로토콜을 만들어 웹뷰에서 네이티브 코드와 데이터를 교환한다. 어떻게 데이터를 전달하는지 iOS와 Android로 나누어 설명하겠다. 

  • iOS 동작 과정

  • 웹뷰에서 네이티브 앱으로 데이터 전달

  • 애플리케이션은 단말기에 설치될 때 커스텀 스킴(Custom Scheme)을 등록한다. 커스텀 스킴은 다른 애플리케이션에서 자신을 호출할 때 쓰인다. 가장 대표적인 커스텀 스킴은 전화(Telephony) 앱을 호출하는 "tel:"인데 다음과 같이 미리 약속된 파라미터를 전달할 수 있다.

    1
    2
    <a href="tel:01023465789">친구 전화 걸기</a>
      

    커스텀 스킴은 다른 애플리케이션을 실행할 때도 사용되지만, 현재 실행 중인 애플리케이션 자신을 호출할 때도 사용된다. PhoneGap에서는 이러한 방법으로 웹뷰에서 네이티브 앱으로 문자열을 전달한다. 아래와 같은 형식으로 커스텀 스킴을 웹뷰에서 호출하면 네이티브 코드에서는 클래스 이름, 함수 이름과 인자 등을 추출하여 해당 네이티브 코드를 실행한다.

    1
    2
    yourscheme://<class>.<command></command>/[<arguments>][?<dictionary>]
     </dictionary></arguments></class>
  • 네이티브 앱에서 웹뷰로 데이터 전달

  • iOS SDK의 WebView 클래스에 stringByEvaluatingJavaScriptFromString() 메서드가 있는데, 이 메서드를 사용하여 현재 실행중인 웹뷰에 JavaScript 코드를 삽입할 수 있다.

    1
    2
    3
    NSString* status = [[NSString alloc] initWithFormat:@"%@({ code: %d, message: '%@'});", callback, code, message];
    [webView stringByEvaluatingJavaScriptFromString:status];
      
  • Android 동작 과정

  • 웹뷰에서 네이티브 앱으로 데이터 전달

  • Android는 웹뷰에서 네이티브 메서드를 호출할 수 있는 인터페이스를 제공한다. WebView 클래스에 있는 addJavascriptInterface() 메서드로 JavaScript가 호출할 수 있는 코드 정보를 등록한다. 

    다음은 addJavascriptInterface() 메서드를 사용하는 예이다. JavaScript에서는 예에서와 같이 MyHybrid 객체를 별도로 정의하지 않아도 사용할 수 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    webView.addJavascriptInterface(new MyHybrid(), "MyHybrid");
    Class MyHybrid {
    public String hello(){
    return "Hello hybrid App";
    }
    }
    <script>
    alert(MyHybrid.hello());
    </script>
      
  • 네이티브 앱에서 웹뷰로 데이터 전달

  • 네이티브 앱에서 웹뷰로 데이터를 전달하고자 한다면 아래와 같이 WebView의 loadUrl() 메서드를 사용한다.

    1
    2
    webView.loadUrl("javascript:hello();
      
  • PhoneGap에 대한 궁금증

    PhoneGap에 대해 자주 받는 질문으로 PhoneGap에 대해 더 자세히 살펴본다.

  • 1. PhoneGap으로 패키징한 애플리케이션은 웹뷰를 포함하는가?

    웹뷰를 포함하지 않는다.

    PhoneGap은 웹뷰를 통해 실행되고 있는 JavaScript와 프레임워크의 네이티브 코드를 호출하는 인터페이스 역할을 할 뿐이며, 웹뷰는 각 모바일 프레임워크에서 제공하는 것이다. 마치 String 클래스를 사용하는 것과 유사하다. 즉, 웹뷰는 애플리케이션에 함께 패키징되는 것이 아니라 네이티브 앱에서 웹뷰를 호출하여 사용하는 것이다. 예를 들어 Android용 PhoneGap 애플리케이션을 만든 후 Android 2.2 버전과 2.3 버전에서 각각 실행하면, 각 플랫폼에서 실행되는 웹뷰는 서로 다른 것이다.

  • 2. 초기 페이지에서 외부 웹 페이지를 로드할 수 있는가?

    로드할 수 있지만 바람직하지 않다.

    PhoneGap으로 만든 애플리케이션의 첫 페이지를 외부 페이지(http://...)로 링크할 수는 있으며, 이렇게 하면 온라인 앱 형태가 된다. 하지만 이러한 구조는 PhoneGap의 원리에 어긋나는 구현 방식이며 로컬 자원에 접근하는 PhoneGap API(카메라, 파일 I/O 등)가 정상적으로 동작하지 않을 것이다. PhoneGap은 모든 웹 콘텐츠(HTML, CSS, JavaScript)가 로컬(단말기)에 저장되어 있다는 것을 전제로 한다. 앱을 구현하는 방식이 웹 언어일 뿐이지 일반 웹 앱처럼 웹 서버에 있는 페이지를 그대로 로드하는 것은 바람직하지 않다.

    참고로 PhoneGap 애플리케이션이 웹뷰가 전체 화면을 차지하고 첫 페이지부터 원격 웹페이지를 로드하는 온라인 애플리케이션 형태이면 Apple의 애플리케이션 검증 과정에서 주목을 받을 수 있다. 네트워크가 연결되지 않는 상황에서 아무런 오류 메시지를 사용자에게 보여 주지 않는다면 반려(Reject)될 사유가 되니 주의해야 한다.

  • 3. Apple App Store에서 반려 사유가 되지 않는지?

    예전에는 서드파티 라이브러리를 사용한 애플리케이션은 App Store 검증 단계를 통과하지 못했다. 하지만 요즈음은 Apple에서 이를 허용하고 있고 이미 Apple에서 PhoneGap에 대한 기술 검토까지 완료했기 때문에 App Store 등록에 어려움이 없을 것이다.

  • 4. 기능 확장은 어떻게 할 수 있는가?

    PhoneGap에서 지원하지 않는 기능은 다음 그림과 같이 PhoneGap 플러그인을 개발하여 기능을 확장할 수 있다. 확장하려는 하는 네이티브 기능과 이 네이티브 기능과 연결할 JavaScript 인터페이스를 개발해야 한다. 물론 각 플랫폼별(iOS, Android 등)로 각각 개발해야 한다.

    p03.png

    그림 3 PhoneGap 기능 확장(원본 출처:http://wiki.phonegap.com/w/page/36752779/PhoneGap%20Plugins)

  • PhoneGap은 쓸 만한가?

    PhoneGap이 어느 정도 품질인지는 PhoneGap으로 개발한 애플리케이션을 사용해 보면 알 수 있을 것이다. PhoneGap으로 개발한 애플리케이션을 몇 가지 소개해 보겠다. 더 많은 애플리케이션은 http://phonegap.com/apps에서 볼 수 있다.

    • Diary Mobile: 일정과 작업을 관리하는 애플리케이션이다.

    p04.png

    p05.png

    • JUST ONE MORE: 동영상 공유 서비스인 Vimeo의 영상을 편하게 볼 수 있는 애플리케이션이다.

    p06.png

    • Orbium: Android 마켓과 Apple App Store에 출시된 퍼즐 게임이다.

    p07.png

    PhoneGap으로 제작한 애플리케이션 중에는 큰 인기를 얻고 있는 것이 아직까지는 없지만, 개발 효율성 때문에 PhoneGap을 이용한 애플리케이션이 더 많이 등장할 것이다. 애플리케이션의 개수가 많아지는 만큼 그 중에서 인기 애플리케이션도 있게 될 것이다.

  • PhoneGap에 대해 정말 알고 싶은 것들

    PhoneGap으로 애플리케이션을 개발할 때 부딪히는 질문을 정리해 보았다.

  • 1. 과연 웹 언어만으로 애플리케이션을 개발할 수 있는가? 

  • 예: 90%

  • 어떤 애플리케이션을 개발하느냐에 따라 다르지만, 웹 언어(HTML, CSS, JavaScript)로 대부분의 기능을 구현할 수 있다.

  • 아니요: 10%

  • PhoneGap에서 애플리케이션 개발에 필요한 모든 기능을 제공하지는 않는다. 보조 웹뷰를 만든다거나 기타 다른 기능을 구현하려면 네이티브 언어의 힘을 빌려야 한다.

  • 2. 하나의 소스 트리로 여러 환경을 지원할 수 있는가? 

  • 예: 90%

  • 하나의 소스 트리로 iOS용 애플리케이션과 Android용 애플리케이션, 모바일 브라우저용 웹 페이지 프로젝트를 제작할 수 있다.

  • 아니요: 10%

  • Android와 iOS의 렌더링 방식 차이로 불가피하게 운영체제별로 구현을 따로 해야 하는 부분이 있다. 또한 PhoneGap API를 사용할 때도 운영체제별로 동작에 차이가 있는 경우도 있다. 대부분 로컬 자원 접근을 위한 경로 문제이며 운영체제 종류를 판별하는 간단한 분기문으로 해결할 수 있다.

  • 3. 필요한 기능을 완성도 높게 만들 수 있는가?

  • 예: 95%

  • PhoneGap에서 기본적으로 제공하는 API의 완성도가 높아서 사진 촬영, 사진 앨범 검색, 음성 녹음 등은 PhoneGap만을 이용하여 구현할 수 있다.

  • 아니요: 5%

  • 그러나 여전히 PhoneGap만으로는 부족하다.  추가적인 기능이 필요하면 오픈소스로 제공되는 플러그인(https://github.com/phonegap/phonegap-plugins)을 사용하거나 직접 플러그인을 개발해야 한다.

  • 4. 네이티브 앱만큼 미려한 UI를 개발할 수 있는가?

  • 예: 70%

  • 목록형 애플리케이션에서 필요한 UI(상/하단 고정메뉴 및 부분 영역 스크롤)는 대부분 구현할 수 있다. 전체 화면 전환 애니메이션도 구현할 수 있다. 하지만 이때 실제 페이지가 전환되는 것은 아니고 하나의 페이지에 있는 여러 레이어 사이를 전환하는 방식이다.

    Android 단말기의 "Back" 버튼에 대응하기 위하여 레이어 전환 시에 해시(Hash) 히스토리를 추가적으로 사용했다. 일반 웹 페이지 전환 방식과 비교해 다음 그림과 같이 다소 복잡한 방법으로 화면을 전환해야 하나 성능상 문제는 없었다.

    또한 HTML5와 CSS3로 화려한 그래픽과 애니메이션 등 다양한 UI를 구현할 수 있다.

    p09.png

    그림 4 일반 HTML 페이지에서의 레이어 전환과 Android 단말기에서 레이어 전환 비교

  • 아니요: 30%

  • 웹뷰 상에서 UI를 표현하는 방식이므로 모바일 웹 기능의 한계를 넘는 UI는 표현할 수 없다. HTML5와 CSS3로 좀 더 미려한 UI를 구현할 수 있지만, 그만큼 성능이 떨어질 수 있어서 사전에 많은 기술 검토와 프로토타이핑이 필요하다.

    저사양 단말기에서의 성능 테스트도 필수적으로 해야 한다. 일부 저사양 Android 기기에서는 반응성이 좋지 않았다.

  • 5. 성능 문제는 없는가? 

  • UI 성능

  • Android의 경우 UI 반응성이 iOS에 비해서 느린 경우가 많아서, 항상 기능을 구현할 때는 Android와 iOS 모두에서 확인해야 한다.

    iOS 4.x 버전 이하에서는 Safari 브라우저와 웹뷰에서 사용하는 JavaScript 엔진이 각각 다르다. Safari에서 사용하는 엔진(Nitro)이 웹뷰에서 사용하는 엔진(JSC)보다 2~3배 빠르다. 일반적으로 웹과 PhoneGap 앱의 성능 체감 차이는 그리 크지 않다. 하지만  무거운 JavaScript 연산 시 PhoneGap 앱이 다소 느릴 수 있음을 유념해야 한다. 참고로 iOS 5 이후부터는 Safari와 웹뷰의 JavaScript 엔진이 동일하다.

  • 로드 성능

  • PhoneGap UI를 위한 웹 콘텐츠 자원은 로컬(단말기)에 저장하여 사용하기 때문에 동일한 기능의 네이티브 앱에 비해 크게 차이가 나지 않는다.

  • 6. 애플리케이션을 재등록하지 않고 자동으로 UI를 업데이트할 수 있나?

    PhoneGap 앱은 원격에 있는 웹 콘텐츠가 아닌 로컬(단말기)에 저장되어 있는 웹 콘텐츠를 로드하여 사용한다. 하지만 원격에 있는 웹 콘텐츠를 로컬에 저장하고, 이렇게 저장한 웹 콘텐츠를 로드할 수는 있다. 로컬에 저장되어 있는 웹 콘텐츠의 유효성을 검사하여 유효하지 않을 경우 리모트에 있는 웹 콘텐츠를 불러와 업데이트하는 방법이 있기 때문이다.

    다음 그림은 리모트에 있는 웹 콘텐츠로 로컬의 콘텐츠를 업데이트하는 개략적인 과정이다.

    p10.png

    그림 5 PhoneGap에서 리모트 콘텐츠를 보여주는 방법

    하지만 이러한 방법은 Apple의 App Store 등록 시 문제가 될 수 있다. Apple에서는 이미 검증을 완료하여 출시된 앱의 UI가 변경되는 것을 적발하면 등록을 반려(Reject)할 수 있다고 한다.

  • PhoneGap 총평

    PhoneGap은 하나의 소스 트리로 여러 플랫폼(iOS, Android, 웹)을 지원할 수 있어 적은 비용으로 스마트폰 앱을 개발할 수 있는 플랫폼이다. 네이티브 앱에 비해 동작 성능이 좋지 않으나 사전 프로토타이핑으로 수행 성능이 좋지 않은 UI를 다른 방식으로 대체한다면 훌륭한 품질의 애플리케이션을 개발하는 데에 무리가 없을 것이다.

  • 출저: http://helloworld.naver.com/helloworld/8180

  • lhc.jpg
    NHN 웹앱개발팀 이현철
    2010년부터 모바일웹 Ajax UI개발을 했고, 최근 새로운 조직으로 변경되어 웹앱개발을 담당하고 있습니다.앞으로 웹언어로 개발된 모바일 어플리케이션의 중요성이 점점 커질 것으로 기대하며 이 분야를 열심히 파볼 예정입니다.

    '2019년 이전 정리 > 모바일 정보' 카테고리의 다른 글

    아이핀이란?  (0) 2014.02.26
    OAuth 란  (0) 2013.12.12
    개발자에게 도움될 만한 IT 기술 블로그  (0) 2013.03.14
    WPS(Wi-Fi Positioning System)의 기술요소  (0) 2013.03.06
    MVNO 소개  (0) 2012.08.27
    Posted by hoonihoon
    2013. 3. 14. 11:45

    '2019년 이전 정리 > 모바일 정보' 카테고리의 다른 글

    OAuth 란  (0) 2013.12.12
    phone gap 앱개발  (0) 2013.03.29
    WPS(Wi-Fi Positioning System)의 기술요소  (0) 2013.03.06
    MVNO 소개  (0) 2012.08.27
    MIME TYPE 개념  (0) 2012.08.27
    Posted by hoonihoon
    2013. 3. 6. 16:34

    출저 : http://www.mobizen.pe.kr/724

    Wifi로 들어오는 무선 ap의 정보를 이용해서 위치값을 얻어내는서비스

    기술요소

    - 무선 AP 정보를 얻어내는 기술

    - 얻어낸 data를 최적화하여 database를 구축하는 기술

    - 사용자 모바일 디바이스에서 필요한 정보를 얻어내는기술

    - 얻어낸 무선 AP 정보와 구축된 database내의 정보를 비교하여 위치를 얻어내는 기술



    1. WPS란?

    IT용어 중에 WPS를 찾아보면 Web Processing Service, Welding Procedure Specification, Wi-Fi Protected Setup 등 다양한 용어가 검색이 된다. 이번 포스팅에서 소개할 WPS(Wi-Fi Positioning System)는 이중에서 Wi-Fi로 들어오는 무선 AP의 정보를 이용해서 위치값을 얻어내는 서비스이다. 

    WPS가 일반인들에게 인식되기 시작한 것은 iPhone에서 해당 솔루션을 기본으로 탑재하면서부터이다. 이를 통하여 GPS나 이통사 LBS의 이용이 불가능한 iPod Touch에서도 위치를 얻어낼 수 있게 되었다. iPhone에 내장되어 있는 WPS는 'Skyhook Wireless' 의 제품이다.  위키피디아에서 'Wi-Fi Positioning System'으로 검색하면 'Skyhook Wireless'으로 redirect를 해줄만큼 이 회사는 WPS에서 중요한 존재이다. WPS라는 용어를 가장 먼저 사용했으며, 시장에서 가장 선두에 있는 기업이기도 하다.

    사용자 삽입 이미지


    2. WPS의 기술요소

    WPS는 크게 무선 AP 정보를 얻어내는 기술, 얻어낸 Data를 최적화하여 Database를 구축하는 기술, 사용자의 모바일 디바이스에서 필요한 정보를 얻어내는 기술, 얻어낸 무선 AP 정보와 구축된 Database내의 정보를 비교하여 위치를 얻어내는 기술 등으로 구성되어 있다. Skyhook Wireless를 비롯하여 Sony, 국내외 네트워크 사업자들이 구성 기술들에게 다양한 특허를 걸어 놓았다.


    2.1.무선 AP 정보를 얻어내는 기술

    흔히 솔루션 사업자들은 스캐닝 차량 등을 통해 무선 AP의 정보를 얻어낸다. 이때 얻어내는 정보는 SSID, MAC Address, Channel, Signal Strength, Noise Strength 등 매우 다양하다. 이러한 정보를 GPS가 내장된 디바이스를 통해 위치값과 함께 수집한다. 아래는 'Skyhook Wireless'가 특허 공개한 '위치 표지 데이터베이스와 서버, 위치 표지 데이터베이스구축 방법 및 이것을 이용한 위치 기반 서비스(공개번호 : 10-2007-0120085)'의 일부분이다.

    사용자 삽입 이미지

    2.2.얻어낸 Data를 최적화하여 Database를 구축하는 기술

    대부분의 서비스들은 위치 정보를 Key로 해서 AP의 정보를 가지는 것은 아니고, AP를 Key로 Database를 구축한다. WPS는 스캐닝 차량등을 통해 들어오는 다양한 정보(이동함에 따라 변하는 신호강도 등)를 조합해서 AP의 위치를 추정한다. AP의 정보외에 Tagging, Height 값 등 다양한 정보가 같이 Database에 쌓이게 되는데, AP의 위치를 계산하는 알고리즘이나 기타 정보들은 서비스별로 매우 다양한다.


    2.3. 사용자의 모바일 디바이스에서 필요한 정보를 얻어내는 기술

    2.1.에서 얻어낸 정보의 종류에 따라 모바일 디바이스에서 얻어내야 정보가 달라진다. 하지만, 플랫폼에 따라 필요한 정보를 얻어낼 수 없을 때가 있다. 예를 들면 무선 AP의 Signal Strength와 같은 정보를 클라이언트가 설치된 플랫폼에서 제공하지 않는다면 WPS는 사용할 수 없게 된다. 불행히도 대부분의 모바일 플랫폼들이 Wi-Fi를 통해 들어오는 다양한 정보들을 접근할 수 있는 API들을 모두 제공하지는 않는다. 

    그런 이유로 WPS의 기본 타겟 디바이스는 노트북이나 넷북이 되고, 대부분 브라우저 툴바 형태로 제공된다. Windows Mobile, Android등 일부 스마트폰 플랫폼에서 다양한 WPS들이 지원하고 있기는 하다. Mobile Browser의 경우는 아직까지는 iPhone Safari외에는 쉽지 않고 툴바설치가 되지 않으면 사용이 쉽지 않다. 아래는 'Skyhook Wireless'가 특허 공개한 '인터넷 검색 및 통신을 위한 위치 툴바(공개번호 : 10-2008-0087798)'의 일부분이다.

    사용자 삽입 이미지


    2.4. 얻어낸 무선 AP 정보와 구축된 Database내의 정보를 비교하여 위치를 얻어내는 기술

    같은 위치라고 해도 AP의 정보가 항상 동일할 수가 없다. 상황에 따라서 AP의 일부분이 Power Off 되어 있는 경우도 있을테고, 한 건물내에서 이동을 했을 경우도 있고, 그날 날씨에 따라서 Noise의 강도가 달라질 수도 있는 등 다양한 변수가 있다. 이러한 변수를 고려한 복잡한 알고리즘을 거쳐서 현재 위치를 추정하게 된다.

    알고리즘이 100% 정확하지는 않아서 때로는 잘못된 결과를 낼때도 있다. iPod Touch에서도 종종 강남에 있는데도 종로에 있다고 나오는 경우를 경험해 보았을 것이다. 현재 상용화 제품들은 Database에 해당 지역의 정보가 있다면 90%이상의 정확도를 가지고 있으며, 오차 범위도 실내에서는 5M, 실외에서는 10M 정도를 유지하고 있다. 아래는 'Skyhook Wireless'가 특허 공개한 '위치 확인 시스템의 연속 데이터 최적화(공개번호 : 10-2007-0118607)'의 일부분이다.

    사용자 삽입 이미지


    3. 주요 플레이어

    현재 WPS 시장은 거의 'Skyhook Wireless'의 독주에 가깝다. 하지만 WPS를 지원하는 다른 업체들이 없는 것은 아니다. CISCOHerecastKoozyt 등 다양한 업체들이 각각의 차별화 포인트를 가지고 시장을 넓혀가고 있다.(물론 이들은 'WPS'라는 용어를 직접적으로 사용하지는 않는다.) 이들의 차별화 포인트들은 기술의 차별화보다는 응용에 있다. 서비스에 따라서 서버응용 API, 다양한 Tagging 기법, 대형 지하 쇼핑몰 지원 등 재미난 것들이 많으니 관심을 가지고 비교해보면 재미있을 것이다.



    4. GPS를 보완하는 기술

    '무선 Air의 보완재, WiFi'포스트에서도 언급했지만 Wi-Fi 내장 디바이스들의 수요는 갈수록 증가하고 있으며 위치 정보에 대한 필요성은 더 이상 이야기 하지 않아도 될 것이다. WPS를 이용하면 사용자의 현재 위치를 얻어내고 다양한 응용서비스에 적용할 수 있다. 하지만, GPS를 완전히 대체하는 기술로서의 접근은 조금 위험하다. GPS가 아직 가격이 높고 보급율이 낮지만 곧 가격은 하락할 것이고, A-GPS를 넘어선 DGPS가 다양한 단말에 내장될 것으로 보여진다. GPS의 특성상 실내에서는 수신율이 급격히 떨어지고 당분간은 Wi-Fi 내장 기기의 보급율보다는 적을 것이니 WPS는 위치를 얻어내기 위한 GPS와 상호 보완적인 기술로 보면 될 것이다. 

    사용자 삽입 이미지
    국내에서 WPS 관련 서비스는 당분간 요원할 것으로 예상된다. 응용할 수 있는 서비스가 아직까지는 부족하고, 스마트폰이나 노트북을 이동중에 즐기면서 위치 정보에 대한 Needs가 필요한 상황이 아직까지는 흔하지 않기 때문이다. 

    'Skyhook Wireless' 도 국내 DB를 수도권과 부산 일부 지역만을 구축해 놓은 상황이다. 엄연히 'iPod Touch'라는 상용화 단말이 팔리는 상황에서 소비자들이 DB 구축에 대한 요구를 Apple에게 안하는 것을 보면 응용 서비스가 부족하긴 부족하나 보다. 언젠가는 국내에서도 스마트폰과 넷북의 보급율이 높아지고, 다양한 LBS가 등장하는 때가 오면 이러한 WPS가 각광받을 때가 오겠지....

    '2019년 이전 정리 > 모바일 정보' 카테고리의 다른 글

    phone gap 앱개발  (0) 2013.03.29
    개발자에게 도움될 만한 IT 기술 블로그  (0) 2013.03.14
    MVNO 소개  (0) 2012.08.27
    MIME TYPE 개념  (0) 2012.08.27
    모바일앱 기획 : 비지니스모델  (0) 2011.07.20
    Posted by hoonihoon
    2013. 1. 2. 17:31

    mail 을 보내고 싶다면 해당 파일을 다룰줄 알아야 한다.


    C:\Trac\BitNami Trac Stack projects\Project\conf\trac.ini


    [notification]

    admit_domains=

    always_notify_owner=true

    always_notify_reporter=true

    always_notify_updater=true

    ambiguous_char_width=single

    batch_subject_template=$prefix Batch modify: $tickets_descr

    email_sender=SmtpEmailSender

    ignore_domains=

    mime_encoding=base64

    sendmail_path=sendmail

    smtp_always_bcc=

    smtp_always_cc=

    smtp_default_domain=

    smtp_enabled=true

    smtp_from=thunkim@enkisoft.co.kr

    smtp_from_author=false

    smtp_from_name=

    #smtp_password=***********

    smtp_port=25

    smtp_replyto=trac@localhost

    smtp_server=mail.enkisoft.co.kr

    smtp_subject_prefix=__default__

    #smtp_user=thunkim@enkisoft.co.kr

    ticket_subject_template=$prefix #$ticket.id: $summary

    use_public_cc=false

    use_short_addr=false

    use_tls=false

    '2019년 이전 정리 > 협업(이슈관리, 형상관리)' 카테고리의 다른 글

    Android Maven 설치 하기  (0) 2013.12.12
    Android Ant 빌드 하기  (0) 2013.12.12
    Trac 사용법 정리 1  (0) 2013.01.02
    BITNAMI  (0) 2012.12.28
    Trac, CodeBeamer, Jira, Mantis 비교  (0) 2012.12.28
    Posted by hoonihoon
    2013. 1. 2. 17:29

    Trac

     

    목차

    1. 트랙 정의 특징

    2. 트랙 가입

    사용법 (trac )

     

    1. Trac

    trac 이란 ?

    - 웹 기반 응용 프로그램으로 구현된 가벼운 프로젝트 관리 도구, 이슈트래킹 툴

    , 여러명이 하나의 소프트웨어를 개발 할 때 아이디어의 순환, 역할의 분담, 이슈관리, 수정등 프로젝트에 필요한 모든 업무를 기록하고 확인을 할 수 있는 도구입니다.

     

    주요특징

    - wiki page

    - 티켓 시스템

    - 진행상황 보기

    - svn 연동

     

     

    Trac Wiki page

    trac을 접속하게 되면 Wiki 페이지를 볼수 있다. Wiki 란 일반적인 페이지들의 연결 집합체라고 볼수 있다. 관리자 뿐만 아니라 누구나 페이지 내용을 수정할 수 있고, 원하면 추가 할수 있다.

     





     


     


     

    Trac 티켓 시스템

     

    - 용도

    프로젝트 작업 , 기능 요청 , 버그 리포트 , 소프트웨어 지원 등

    ( 버그보고, 질문, 제안, 토론 등이 쉽게 가능하다)

     

    Create Ticket

     

    - 사용법

    1. 관리자가 Owner를 설정하여 업무내용을 만들고 티켓을 발행한다.

    2. Owner 는 메일을 받고, 업무를 파악한다.

    3. Owner 는 업무를 할당받고 해결한다.

    4. 완료된 업무는 fixed를 설정한다.

     

    -특징

    1. 부득이할 경우 Owner를 재 할당 할 수 있다.

    2. 모 든 티켓은 편집, 주석, 할당, 우선순위등을 언제든지 변경 가능하다.

    3. 티켓 필드에는 다음과 같은 카타고리가 있다.

    Summary : 검색시에 구분이 가능하도록 설정

    Owner : 이슈를 할당 받을 인원 설정

    Type: 버그, 문서, 개발

    MileStone: 1app , 2app 버전별로 관리

    Priority: 이슈의 우선순위 설정

    Version: svn 의 버전과 sync

    Cc: 업무를 같이 봐야할 사람 설정

     

    View ticket

     

     

     

     

     

    Trac 로드맵

    1. 프로젝트 개발을 관리하고 계획을 도와주는 티켓시스템에 대한 뷰를 제공한다.

    2. 로드맵 뷰

    -티켓의 그룹을 설정가능하며, 각 그룹은 진행률이 표시된다. 줄에 표시된 티켓은 상태를 볼 수 있다. (active, closed)

     

     




     

     

    Trac 검색

    #이슈번호

     

    Trac Time line

    -히스토리를 제공하는 뷰.

    -시간순으로 발생된 모든 Trac의 이벤트를 리스트형태로 보여준다.

     

     

     

    '2019년 이전 정리 > 협업(이슈관리, 형상관리)' 카테고리의 다른 글

    Android Maven 설치 하기  (0) 2013.12.12
    Android Ant 빌드 하기  (0) 2013.12.12
    Trac.ini 파일 설정  (0) 2013.01.02
    BITNAMI  (0) 2012.12.28
    Trac, CodeBeamer, Jira, Mantis 비교  (0) 2012.12.28
    Posted by hoonihoon
    2012. 12. 28. 14:26

    http://bitnami.org/stacks

    redmine, trac 등 환경설정을 한번에 받을 수 있는 패키지


    그전에 삽질 사이트 모음(그래도 하나씩 설치하는 쾌감을 느껴보시려면 아래로)

    http://goodjoon.tistory.com/35

    http://369369.tistory.com/101

    http://k_builder.blog.me/40139626177

    '2019년 이전 정리 > 협업(이슈관리, 형상관리)' 카테고리의 다른 글

    Android Maven 설치 하기  (0) 2013.12.12
    Android Ant 빌드 하기  (0) 2013.12.12
    Trac.ini 파일 설정  (0) 2013.01.02
    Trac 사용법 정리 1  (0) 2013.01.02
    Trac, CodeBeamer, Jira, Mantis 비교  (0) 2012.12.28
    Posted by hoonihoon
    2012. 12. 28. 14:19

    복잡한 프로젝트환경을 성공적으로 수행하기 위한 필수 조건 중의 하나가 협업 시스템이라고 생각한다.

    요구분석/정의 > 상위/상세설계 > 구현/시험 > 검증 > 납품 및 운영/업그레이드의 cycle을 지속적으로 유지하기 위해서는 제품/프로젝트 개발 및 운영/업그레이드를 구분한 Activity관리 및 산출물기반으로의 협업이 이뤄져야하는데, PM/개발자 및 프로젝트에 많은 영향을 미치는 stake-holder를 적절한 수준의 보안 정책으로 이에 포함시켜 activity 및 산출물을 공유하고 협업하면 그만큼 프로젝트 성공율이 높아질 뿐더러, 자연스럽게 Project-Lessons-Learned의 DB가 축적되기때문에, 이러한 협업 시스템은 필수적이라고 보여진다.

    그동안 사용한 tool들을 간단히 비교/공유 하고자 한다.

    Mantis (Open Source)

    버그에 한정된 전형적인 Bug Tracking System으로 활용하면 Issue관리까지도 가능하나 제품 초기의 컨셉이 BTS에 한정이 되어있어서, 이슈/문서/지식/형상을 포함하는 개념까지로 확장하기가 어렵다. PHP+MySQL 조합으로 설치가 그리 어렵지 않으나 WIKI 및 Subversion과 연동시킬 경우 설정이 다소 어려움.

    Trac (Open Source)

    이슈(로드맵/마일스톤)+위키+형상관리(Subversion)뷰어 기능이 존재하여, 상호간에 Link 개념으로 유기적 연동이 된다 (이슈를 발생하여 이 이슈 key를 subversion커밋할 시 포함시키면 자동으로 연동되며, WIKI에서도 이슈 key를 연동할 수 있음.) 이슈, 위키의 기능들이 최소한의 기능들로 구성됨. TNF, 제로보드등에서 대표적으로 사용하고 있음. 설치가 어렵웠는데 최근 0.11로 판올림하면서 설치가 쉬워졌고, TOW등을 이용하면 편하게 사용할 수 있음. ( TOW (TracOnWindows) http://trac.tistory.com/ )

    Jira (Commercial이나 Open Source 프로젝트/비영리재단은 무료)

    Jira는 이슈(버전/콤포넌트)기반 추적 시스템이나 work-flow개념을 탑재하여, 다양한 형태(개발 + 운영관리)의 이슈 관리를 할 수 있고, 사용자 입맞에 맞추어 거의 모든 필드를 대상으로 통계 추출을 할 수 있음. 같은 회사에서 나오는 WIKI (Confluence) , CROWD(SSO), Fisheye(형상관리뷰어), Crucible(코드리뷰도구)의 연동이 이슈를 바탕으로 유기적으로 연결되어 있음.

    * CodeBeamer (Commercial이나 5명이하 2개미만 프로젝트/Open Source 프로젝트는 무료)

    이슈+WIKI+Subversion/뷰어+빌드관리+Forum/게시판까지 포함된 프로젝트 협업 관리 시스템의 종합 상자격으로 설치도 압축 풀고 실행만 하면 바로 협업시스템을 쓸 수 있을 정도로 잘 되어 있음. 2008년 Jolt Productivity 및 Software Dev. Jolt Awards 수상

    약간의 주관적인 판단이긴 하지만

    - 설치용이성 : CodeBeamer > Trac (TOW or Easy Install사용시) > Jira > Mantis(w WIKI/SVN)

    - 관리용이성 (사용자/백업/복구) : CodeBeamer > Jira > Trac > Mantis

    - IT프로젝트 활용도 : CodeBeamer > Jira > Trac > Mantis

    - Customize/(쉬운)확장성: Jira > CodeBeamer > Trac > Mantis

    IT/SW개발회사이고, 기본 협업시스템이 없다면 CodeBeamer 이나 Trac을 도입을 추천하고, Non-IT/일반회사일 경우 Jira (+Confluence/WIKI) 조합을 추천한다.


    출저: http://projectresearch.co.kr/2008/06/28/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%ED%98%91%EC%97%85%EC%9D%84-%EC%9C%84%ED%95%9C-trac-codebeamer-jira-mantis%EC%9D%98-%EA%B0%84%EB%8B%A8-%EB%B9%84%EA%B5%90/

    '2019년 이전 정리 > 협업(이슈관리, 형상관리)' 카테고리의 다른 글

    Android Maven 설치 하기  (0) 2013.12.12
    Android Ant 빌드 하기  (0) 2013.12.12
    Trac.ini 파일 설정  (0) 2013.01.02
    Trac 사용법 정리 1  (0) 2013.01.02
    BITNAMI  (0) 2012.12.28
    Posted by hoonihoon
    2012. 12. 20. 13:05




    티스토리 소스코드 넣기 가장 쉬운 방법으로 진행 해보실꼐요.

    티스토리 코드가 가장 이쁘게 들어 갈꺼에요 ^^

    1.  http://alexgorbatchev.com/SyntaxHighlighter/download/ 에서 zip 파일 내려받으세요.

    syntaxhighlighter_3.0.83.zip

    소스코드 바로 받으시려면 파일 클릭 


    2. 티스토리 관리자 모드로 들어간뒤, 왼쪽메뉴에 [꾸미기]-[HTML/CSS 편집]-[파일업로드]란에서 조금전에 다운 받은 압축파일에  script와 style 폴더 안에 js 와 css 확장자 파일을 업로드 해주세요.




    3. [꾸미기]-[HTML/CSS 편집]에서 skin.html 란에 </head> 검색하시고, 바로 윗줄에 아래와 명령문을 넣어주고 저장한다!

    <script type="text/javascript" src="./images/shCore.js"></script>

    <link rel="stylesheet" type="text/css" href="./images/shCore.css" />
    <link rel="stylesheet" type="text/css" href="./images/shThemeDefault.css" />

    <script type="text/javascript" src="./images/shBrushAppleScript.js"></script>
    <script type="text/javascript" src="./images/shBrushAS3.js"></script>
    <script type="text/javascript" src="./images/shBrushBash.js"></script>
    <script type="text/javascript" src="./images/shBrushColdFusion.js"></script>
    <script type="text/javascript" src="./images/shBrushCpp.js"></script>
    <script type="text/javascript" src="./images/shBrushCSharp.js"></script>
    <script type="text/javascript" src="./images/shBrushCss.js"></script>
    <script type="text/javascript" src="./images/shBrushDelphi.js"></script>
    <script type="text/javascript" src="./images/shBrushDiff.js"></script>
    <script type="text/javascript" src="./images/shBrushErlang.js"></script>
    <script type="text/javascript" src="./images/shBrushGroovy.js"></script>
    <script type="text/javascript" src="./images/shBrushJava.js"></script>
    <script type="text/javascript" src="./images/shBrushJavaFX.js"></script>
    <script type="text/javascript" src="./images/shBrushJScript.js"></script>
    <script type="text/javascript" src="./images/shBrushPerl.js"></script>
    <script type="text/javascript" src="./images/shBrushPhp.js"></script>
    <script type="text/javascript" src="./images/shBrushPlain.js"></script>
    <script type="text/javascript" src="./images/shBrushPowerShell.js"></script>
    <script type="text/javascript" src="./images/shBrushPython.js"></script>
    <script type="text/javascript" src="./images/shBrushRuby.js"></script>
    <script type="text/javascript" src="./images/shBrushSass.js"></script>
    <script type="text/javascript" src="./images/shBrushScala.js"></script>
    <script type="text/javascript" src="./images/shBrushSql.js"></script>
    <script type="text/javascript" src="./images/shBrushVb.js"></script>
    <script type="text/javascript" src="./images/shBrushXml.js"></script>

    <script type="text/javascript">
        SyntaxHighlighter.all();
    </script>




    3. 적용이 됐는지 확인하기위해 아무게시판에서 글을 써볼께요.
    글작성 하기 이전에 아래 사진처럼 HTML 란에 체크를 꼭 해주세요



    4. 아래와 같은 태그 형태 안에 소스 코드를 넣어 주시면 됩니다. 

    <pre class="brush:java"> 

    class java{

    }

    </pre>


    <pre> 태그의 class를 "brush:{사용하고자하는 소스코드 종류}"로 적용 시켜줘야합니다. 

    티스토리 소스코드 가 적용되었습니다. ^^

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @WebServlet("/login")
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
            
        /**
         * @see HttpServlet#HttpServlet()
         */
        public LoginServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
        }
    }



    티스토리 소스코드 넣기 가장 쉬운 방법을 포스팅 마치겠습니다.

    Posted by hoonihoon