모바일 플랫폼의 종류

마지막 업데이트: 2022년 1월 22일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
안드로이드의 커널 코드 중 하드웨어 장치를 제대로 제어할 수 있도록 수정하는 부분은 두 부분인데 하나는 장치 드라이버이고, 또 한 부분은 장치 드라이버와 안드로이드 플랫폼을 연결하는 JNI 부분이다. JNI는 이미 잘 정의되어 있는 자바 응용과 C 언어 수준의 시스템 코드를 연결시켜주기 위한 체계이다. 그림 6은 미디어 플레이어를 실행할 때의 JNI의 역할을 보인다. 그림에 나타나 있는 바와 같이 리눅스 커널의 오디오와 비디어 장치 드라이버는 네이티브 코드(C 언어 혹은 C++ 언어 기반 코드)인 라이브러리(Libmedia.so)를 통해 접근하도록 설계된다. Libmedia.so와 같은 코드는 원래 오픈소스로 제공되기보다는 안드로이드 플랫폼의 JNI 라이브러리를 구성하기 위해 자바 인터페이스와 짝을 이루는 라이브러리로 설계된 것이라고 볼 수 있다. 이러한 라이브러리는 JNI 라이브러리인 Libmedia_jni.so와 연결되어 모든 네이티브 코드 함수들이 자바 함수들과 연결된다.

SDK(소프트웨어 개발 키트, Software Development Kit)란?

소프트웨어 개발 키트(Software Development Kit, SDK)는 (일반적으로) 하드웨어 플랫폼, 운영 체제(Operating System, OS) 또는 프로그래밍 언어 제작사가 제공하는 일련의 툴입니다.

SDK를 사용해야 하는 이유

소프트웨어 개발자는 SDK를 활용하여 특정 플랫폼, 시스템 또는 프로그래밍 언어에 따라 애플리케이션을 개발할 수 있습니다. 이를 직접 조립할 수 있는 옷장에 포함되어 있는 도구 키트라고 생각하시면 쉬울 것 같습니다. SDK는 애플리케이션 개발에 사용된다는 것만 다를 뿐입니다. 작업 완료에 필요한 요소 또는 개발 툴은 제공되지만 키트에 포함된 내용물은 제작사마다 다릅니다.

일반적으로 기본 SDK에는 컴파일러, 디버거, 애플리케이션 프로그래밍 인터페이스(Application Programming Interface, API)가 포함되지만, 다음 중 한 가지도 포함될 수 있습니다.

양질의 SDK라면 개발자가 특정 제품 및 에코시스템을 위한 새로운 애플리케이션을 개발할 때 필요할 수 있는 모든 구성 요소를 제공할 것입니다. 일부 SDK에는 개발자가 최대한 빨리 시작할 수 있도록 예시 또는 기본 테스트 프로젝트도 모바일 플랫폼의 종류 포함되어 있습니다.

소프트웨어 개발 키트의 몇 가지 예로 Java 개발 키트(Java Development Kit, JDK), Windows 7 SDK, MacOS X SDK, iPhone SDK를 들 수 있습니다. 구체적인 예를 들자면, 쿠버네티스 오퍼레이터 SDK는 개발자가 자기만의 쿠버네티스 오퍼레이터를 개발하는 데 도움이 됩니다. 이 SDK에는 상위 수준의 API, 스캐폴딩 및 코드 생성용 툴, 그리고 공통된 오퍼레이터 활용 사례를 포괄하는 확장 기능이 포함되어 있습니다.

SDK와 API의 차이점 및 다운로드

새 모바일 애플리케이션이나 프로젝트를 소스 텍스트 수준에서 커맨드라인으로 연결하기 위해 대부분의 SDK에는 API가 포함되어 있습니다. 코드 샘플도 포함된 경우가 많은데, 이 코드에서 제공하는 예시 프로그램 및 라이브러리는 개발자가 기본 프로그램 빌드 방법을 학습하는 데 도움이 됩니다. 이를 출발점으로 삼아 개발자는 최적화 및 복잡한 애플리케이션을 더욱 쉽게 개발하게 될 수 있을 뿐만 아니라, 필요에 따라 디버깅하고 새로운 기능을 추가할 수 있습니다.

일부 SDK에는 API 사용법에 관한 설명서뿐 아니라 튜토리얼, FAQ, 샘플 그래픽이 포함되어 있는데, 그 이유는 개발자가 새 SDK를 사용하는 방법을 배우는 데 시간이 걸릴 수 있기 때문입니다. 따라서 직관적인 프로그래밍 또는 사용자 인터페이스(또는 더 광범위한 설명서)는 개발자가 경쟁업체의 옵션 대신 한 업체의 특정 프로그램을 사용하도록 권장할 때 유용합니다.

마찬가지로 기업은 SDK를 활용하여 개발자들에게 제품을 소개하고 자사 플랫폼이나 OS를 사용해 통합된 개발 환경에서 애플리케이션을 개발하도록 권장할 수 있습니다. 이러한 이유로 대부분의 SDK는 무료로 사용할 수 있으므로 개발자는 SDK를 다운로드하여 즉시 프로그래밍을 시작할 수 있습니다.

SDK 규칙, 계약, 고려 사항

일부 SDK에는 사용 전에 미리 동의하고 제출해야 하는 규칙이나 계약이 있을 수 있습니다. 특히 알파 또는 베타 단계에 있는 신제품이나 일반에 공개되지 않은 알고리즘(오픈소스가 아님)이 포함된 소프트웨어인 경우 그렇습니다. SDK에는 새로 개발된 소프트웨어가 호환되지 않는 라이센스로 릴리스되지 않도록 라이센스 계약이 적용될 수도 있습니다.

개발자는 작업에 사용할 SDK를 선택할 때 이러한 점을 고려해야 합니다. 예를 들면 다음과 같습니다.

  • 독점 라이센스가 있는 SDK는 오픈소스 소프트웨어 개발과 호환되지 않습니다.
  • GPL(General Public License)이 있는 SDK는 독점 애플리케이션 개발에 사용할 수 없습니다.
  • 독점 코드 요소가 있는 프로젝트를 위해 LGPL(Lesser General Public License)을 피해 작업할 경우 주의해야 할 사항이 있습니다.

Red Hat 솔루션의 특징 및 지원

오픈소스 애플리케이션을 아마추어와 전문가들이 지속적으로 개발하는 이유는 SDK가 새로운 설계 및 기능 확장을 코딩하여 이를 커뮤니티와 공유하는 것을 염두에 두고 있기 때문입니다.

Red Hat은 최상의 툴, 솔루션, 서비스를 통합하여 애플리케이션을 개발하며, 이를 오픈소스 방식으로 실현하고 있습니다. 애플리케이션을 빌드할 플랫폼(Red Hat OpenShift) 또는 런타임 환경(Red Hat Runtimes), 애플리케이션을 개발, 디버그, 테스트, 배포하는 데 필요한 모든 툴을 갖춘 개발 환경(Red 모바일 플랫폼의 종류 Hat CodeReady Studio) 등 Red Hat은 다양한 지원을 제공합니다.

플랫폼 기업은 어떻게 돈을 버는가? steem Created with Sketch.

페이스북, 구글, 애플, 알리바바, 에어비앤비, 우버 등 요즘 잘나가는 기업들의 비즈니스 모델을 살펴보면 한 가지 공통점이 있다. 그것은 이들 기업 모두 플랫폼 비즈니스 모델을 구현하고 있다는 점이다. 플랫폼 비즈니스 모델이란 사업자가 직접 제품 또는 서비스를 제공하는 것이 아니라 제품이나 서비스를 제공하는 생산자 그룹과 이를 필요로 하는 사용자 그룹을 서로 연결하는 것이다. 사업자는 생산자 그룹과 사용자 그룹이 플랫폼내에서 활발한 거래가 발생하도록 함으로써 가치를 생성하고 궁극적으로 수익을 창출한다.

tree-200795_1280.jpg

플랫폼이란 단어는 본래 기차를 타고 내리는 물리적인 공간이나 강사, 지휘자, 선수 등이 사용하는 무대 또는 강단을 뜻하는 의미였으나 현재는 특정 장치나 시스템 등에서 이를 구성하는 기초가 되는 틀을 지칭하는 용어로 많이 사용되고 있다. 오늘날 제조, 유통, 전자, IT 등 분야를 가리지 않고 많은 기업들이 플랫폼 사업자를 궁극적인 목표로 삼고 있을 만큼 현 시대에서 플랫폼 전략은 기업에게 있어 매우 중요하다. 따지고 보면 휴대폰 시장에서 존재감이 없던 애플이 노키아, 블랙베리, 모토로라 등 유수의 경쟁자들을 물리치고 스마트폰 시장의 강자로 군림하게 된 이유가 바로 앱스토어라는 플랫폼 전투에서 승리했기 때문이다.모바일 플랫폼의 종류

플랫폼 비즈니스의 발전 전략

최근 기업들의 성장전략을 살펴보면 대부분의 기업들이 플랫폼 기업을 지향하고 있음을 쉽게 알 수 있다. 이는 플랫폼 비즈니스 모델이 분야를 막론하고 거의 대부분의 기업들이 지향하는 성장모델로 매력적이라는 점을 시사하고 있다. 사실 플랫폼 비즈니스 모델의 매력은 가치를 만드는 생산자와 그 가치를 사용하는 소비자가 자유롭게 만나고 연결되는 장이 존재한다는 점이다. 다시 말해 플랫폼 비즈니스 모델의 특징은 생산자와 소비자가 다양하게 ‘연결’되는 ‘양방향’에 있으며, 생산자와 사용자는 매우 랜덤하게 연결되는 구조를 가지는데 이를 양면시장(Two Sided Market) 이라고 부른다.

그렇다면 양면시장이란 과연 무엇일까? 예를 들어 사용자가 새로운 금융상품에 가입하기 위해 은행을 찾아가는 모습은 전형적인 단면시장이라고 할 수 있다. 이러한 단면시장에서는 판매자가 구매자를 직접 상대하는 것이 특징이다. 반면 양면시장은 플랫폼내에서 다양한 판매자와 구매자간에 거래가 상시적으로 나타난다. 사실 양면시장은 우리 주위에서도 흔히 볼 수 있다. 예를 들어 신문사나 잡지사는 비교적 저렴한 가격으로 독자에게 콘텐츠를 제공하고 지면에 광고를 게재함으로써 대부분의 수익을 창출하는데 이는 전형적인 양면시장의 사례라고 할 수 있다. 이때 신문사와 잡지사는 독자와 광고주라는 두 개의 다른 집단을 상대하고 양쪽을 연결하는 연결고리 역할을 함으로써 양쪽 고객 모두를 만족시키고 있다.

bulb-2261093_1920.jpg

하지만 이러한 양면시장이 활성화되기 위해서는 네트워크 효과가 필수적이다. 여기서 네트워크 효과(network effect)란 특정 상대 집단의 크기가 클수록 보다 높은 이익이나 효용을 얻는 효과를 말한다. 예를 들어 페이스북의 월간 이용자수(active users)는 약 18억명에 달한다. 기업 입장에서는 이렇게 많은 사람들이 방문하는 길목에 광고나 자사의 서비스가 노출되도록 한다면 마케팅에 도움이 되기 때문에 높은 광고비나 수수료를 지불하고서라도 페이스북 플랫폼에 들어가려고 할 것이다. 이처럼 충성도가 높고 사용자수가 많은 한쪽 측면을 먼저 확보할 수 있다면 해당 플랫폼에 입점하려는 판매자 집단은 비교적 쉽게 확보할 수 있다. 이러한 현상은 플랫폼 비즈니스 모델에 있어 공통적으로 나타나는 현상이다.

플랫폼 비즈니스 사업자의 수익모델

플랫폼 비즈니스의 수익모델은 크게 중개수수료, 구독료, 광고료, 라이센싱, 아이템 판매 등으로 구분할 수 있다. 하나씩 살펴보면 첫번째, 중개수수료 모델이다. 애플의 앱스토어, 우버, 에어비앤비, 알리바바 등이 중개수수료 모델을 선택하고 있다. 애플은 앱스토어 입점을 신청한 앱을 검토한 후 입점을 승인하고 되는데 유료 판매시 수수료로 30%를 가져간다. 우버의 경우도 드라이버가 벌어들인 매출의 20~30%를 중개수수료 명목으로 가져간다. 또한 호텔중개 업체인 호텔엔조이닷컴은 수수료 형태로 판매액의 7~20%를 가져가고 있다. 전 세계 최대 숙박공유업체인 에어비앤비는 숙박을 예약한 게스트와 숙소를 빌려주는 호스트로부터 중개수수료를 받는다. 이처럼 중개수수료 모델은 플랫폼 비즈니스에서 가장 흔하게 볼 수 있는 수익모델이다.

두번째, 구독료 방식은 제품이나 서비스에 대한 비용을 한번 또는 지속적으로 미리 지급하는 고객을 미리 확보하는 수익모델 방식이다. 예를 들어 채용에 특화된 버티컬 플랫폼인 링크드인은 기본적인 서비스는 무료로 제공하고 고급 정보 서비스를 제공하는 프리미엄 구독료 형태의 수익모델을 선택하고 있다. 링크드인의 수익모델 중 프리미엄 구독료 매출의 비중은 약 18%를 차지하고 있으며 나머지는 광고와 솔루션 부문에서 발생한다.

세번째는 광고이다. 구글, 페이스북 등 많은 사용자 집단을 가진 플랫폼 기업의 경우 매출의 대부분이 광고수익으로 발생하고 있다. 페이스북은 2015년 179억 달러의 매출을 기록했으며, 구글의 2015년 매출액 745억 달러의 90%가 광고에서 벌어들인 것으로 나타났다.

네번째는 라이센싱이다. 라이센싱은 계약된 조건에 따라 제품이나 서비스를 사용할 권리를 개인이나 기업에게 제공하는 것을 말한다. 예를 들어 아마존 웹서비스(AWS)는 기업이 대규모의 IT 인프라에 대한 투자 없이도 마치 전기처럼 사용한 만큼만 지불하는 클라우드 서비스를 제공하고 있다. AWS는 클라우드 분야에서 마이크로소프트, 구글, IBM을 합친것보다 더 큰 규모로 성장했으며 AWS의 매출은 아마존의 전체 매출의 1/10 수준이나 영입이익은 전체의 30%를 상회하고 있다.

다섯번째는 아이템 판매 방식으로 플랫폼에서 유용하게 사용할 수 있는 기능을 판매해 수익을 창출하는 모델로 게임 아이템, 캐릭터 모바일 플랫폼의 종류 판매, 기프티콘 판매 등이 일반적이다.

social-media-3129482_1280.jpg

많은 기업들이 궁극적으로 플랫폼 비즈니스 모델을 지향하고 있지만 실제 플랫폼 비즈니스 모델을 구현하는 것은 매우 어렵다. 그 이유는 플랫폼에 참여하는 다양한 이해관계자들의 역할과 플랫폼에 참여함으로써 얻게 되는 궁극적인 인센티브가 명확하게 제시되어야 하기 때문이다. 그렇지 않고 플랫폼 사업자의 이득만 생각한다면 해당 플랫폼은 제대로 작동하지 않을 가능성이 높다.

국내 상황에서는 아직 카카오, 라인 등 모바일 메신저 기반의 플랫폼 비즈니스 모델외에는 아직까지 성공했다고 자부할만한 플랫폼 비즈니스 모델은 많지 않고 수익모델도 아직까지 취약한 편이다. 플랫폼 비즈니스 모델이 성공하기 위해서는 먼저 사업에 참여하는 이해관계자들을 어떻게 모으고 사용자 그룹에 어떤 차별화된 가치를 제공하여 네트워크 효과를 창출할 것인지에 대한 전략이 명확히 규정되어야 하며 플랫폼에 참여하는 사용자와 판매자 그룹이 활발하게 활동할 수 있도록 제도적인 장치와 사업 요건들을 제공하는데 집중해야 할 것이다. (끝)

모바일 플랫폼의 종류

플랫폼 Platform – (시장의 지배의 발판)

  1. 미래는 알 수 없다.
  2. 플랫폼의 중요성은 증대될것이다. (부익부 빈익빈의 가속화)

플랫폼은 난세의 영웅 또는 독재자이다.

Big 4 – Apple, Google, Facebook, Amazon (중국이 미국을 이길수 없는 이유)

  1. 현실계(Physical) 플랫폼 - 백화점
  2. 하드웨어 플랫폼 - CPU
  3. 소프트웨어 플랫폼 - Window
  4. 인터넷서비스 플랫폼 - 네이버
  1. 기반형 플랫폼: 가장 대표적, 사용자가 요구하는 기능을 구현 - Window, CPU
  2. 매개형 플랫폼: 사용자들의 상호작용 창출 – SNS, 11번가(오픈마켓)
  3. 복합형 플랫폼: 기반형 + 매개형 – 페이스북

운영체계 OS (Operating System) -> 어플리케이션 app

라이프스타일브랜드: 단지 상품이나 서비스를 제공하는 수준이 아니라 고객의 정서와 연결되어 있는 브랜드다. 그런 브랜드의 제품은 단순히 필요에 의해 쓰고 버려지는 것이 아니라 고객의 삶과 긴밀히 연결되어 개인적이고 특정한 의미를 갖게된다.

Freemium = Free + Premium : 무료제공하며, 추가적인 기능 다른 방법으로 수익을 내는 전략 (구글앱스)

때로는 혁신을 추구하다 실수할 때도 있습니다. 그럴 경우 빨리 실수를 인정하고 다른 혁신을 향해 나아가면 됩니다. – 스티브잡스

구글은 끊임없이 신규사업을 찾았다. 스타트업을 인수하고, 창의적인 인재들에 수혈을 받으며, 총 182개의 기업을 인수했다. 안드로이드 인수를 통한 모바일시장/ 유튜브 인수

세상을 변화시키는 방법을 한 문장으로 말해볼까요? 그것은 마음이 불편하면서도 흥분되는 (uncomfortably exciting) 무엇인가를 계속 열심히 하는 겁니다. – 래리 페이지

재빨리 움직이고 문제를 끝장내라. 문제를 부숴버리지 않으면, 당신은 결코 빨리 움직이지 못할 것이다. – 마크 저커버그

핀테크 Financial Technology (금융 + 기술)

  1. 지급 결제 서비스 – paypal
  2. 전자 화폐/ 가상통화
  3. 금융 소프트웨어
  4. 인터넷 전문은행 – Kakao Bank

쇼루밍 (Showrooming): 오프라인 매장에서 상품보고 인터넷에서 실제 구매

  1. 크로스(멀티) 플랫폼: 운영체제에 관계없이 적용
  2. 개발 유지 보수 비용 저렴
  3. 검색엔진 통한 검색 가능, 여러종류 플랫폼에서 동작
  4. 리치 미디어: 이미지, 동영상 활용해 풍부한 상호작용

클라우드 애플리케이션 도입시 기업고객의 이점

  1. 비용을 절감할 수 있다.
  2. 운영체제에 독립적이다.
  3. 실시간 업그레이드가 제공된다.
  4. 다양한 써드파티 애플리케이션의 활용이 가능하다.
  1. 사물인터넷 (IoT)
  2. 스마트 홈
  3. 스마트 인터랙션 (기계와 대화)
  4. 가상현실 (VR)
  5. 드론
  6. 로봇 (Pax Robotica)
  7. 이더리움 Ethereum 블록체인

아리스토텔레스 수사학 – 설득의 3요소

  1. 로고스(Logos) 논리 : 플랫폼은 충분한 논리를 갖춰야 한다.
  2. 파토스(Pathos) 열정 : 성공적인 플랫폼 기업은 열정을 발산해야 한다.
  3. 에토스(Ethos) 신뢰 : 이해관계자와 고객에게 신뢰를 구축해야 한다.

스마트 서비스 (Welbowsoft contents에 적용)

인터넷 서비스 사업자들은 클라으드를 이용함으로써 늘어나는 이용자수에 맞춰 서비스를 신속하게 확장할 수 있다. 뿐만 아니라, 서버 또는 스토리지와 같은 고정자산의 구매 및 유지비용을 지출하는 대신 비즈니스 실행에 더 많은 자원을 투입할 수 있게 된다. 이는 결국 비즈니스 경쟁력의 차이로 나타난다.

모바일 플랫폼의 종류



안드로이드는 구글의 휴대폰용 오픈 소스 소프트웨어 플랫폼 및 주변 도구를 의미한다. 구글 안드로이드 플랫폼은 본격적인 모바일 웹 응용을 위한 휴대폰 소프트웨어 플랫폼이라는 데 그 의미가 있다. 주로 구글의 서비스를 이동 단말 환경에서 구현하고 활용하기 위한 기반 플랫폼으로서 휴대폰뿐 아니라 다양한 정보 가전 기기에 적용할 수 있는 이식의 용이성을 갖추고 있다. 안드로이드 플랫폼은 현재 전 세계의 주요 휴대폰 제조사, 반도체 제조사는 물론 통신사, 시스템 소프트웨어 개발사, 애플리케이션 개발사를 포함하는 오픈 핸드셋 얼라이언스(OHA, Open Handset Alliance)를 통해 진화하고 있다.

안드로이드 플랫폼의 특징을 나열하면 다음과 같다. 첫째, 오픈소스 운영체제인 리눅스를 기반으로 하고 있어서 다양한 모바일 플랫폼의 종류 하드웨어에 이식하거나 새로운 기능을 부여하기 쉽다. 둘째, 응용 소프트웨어 실행 환경은 자바 가상머신 환경이며 자바 언어를 사용하여 구현한다. 즉, 시스템 자원 및 각종 장치를 운용하는 리눅스 커널 위에 안드로이드 응용을 실행하기 위한 자바 가상머신이 탑재된다. 셋째, 구글의 다양한 인터넷 서비스를 직접 이용할 모바일 플랫폼의 종류 수 있는 API를 갖추고 있다. 안드로이드 응용 API는 모두 자바 클래스로 제공되며 구글의 웹 API와 기능 및 형식이 많은 부분 유사하다. 웹 2.0 매시업 응용을 주 응용으로 고려하고 있기 때문에 GPS를 이용한 위치 기반 응용 구현을 위한 API를 풍부하게 제공한다.

그림 2은 구글 안드로이드 플랫폼이 지향하는 응용 서비스 개념을 정리하여 보여준다. 단말, 통신 서비스, 응용 분야, 네트워크의 종류에 독립적인 오픈 플랫폼을 제공하는 것이 중요한 목표이고 이를 먼저 휴대폰의 형태로 현실화하고 있다. 또한, 안드로이드 플랫폼은 사용자가 구현한 응용 소프트웨어를 안드로이드 마켓을 통해 유통할 수 있는 비즈니스 모델을 제공하고 있어서 애플의 앱스토어가 이룩한 성공 모델을 따르고 있다.

안드로이드 플랫폼의 구조와 기능
안드로이드 플랫폼은 리눅스 커널 상에 다양한 응용 소프트웨어 라이브러리와 안드로이드 응용 소프트웨어를 실행하기 위한 자바 가상머신으로 이루어져 있다. 안드로이드 플랫폼에 사용된 자바 가상머신은 Dalvik이라 부르는 가상머신으로 선마이크로시스템즈(Sun Microsystems, Inc.)의 자바 가상머신과 유사하지만 다른 형식의 자바 응용 소프트웨어 패키징 방법 및 실행 과정을 제공한다.

안드로이드 플랫폼 계층 구조
안드로이드 플랫폼은 소프트웨어 계층으로 구성되어 있다. 가장 하위 영역에는 운영체제인 리눅스 커널이 존재한다. 리눅스 커널 위에 녹색으로 표시된 영역에는 하드웨어 추상화 계층과 라이브러리가 존재한다. 하드웨어 추상화 계층은 다양한 하드웨어 장치를 활용할 수 있는 안드로이드 응용 소프트웨어를 위한 인터페이스를 제공해주는 계층으로서 일관된 하드웨어 접근 API와 실제 하드웨어 제어 코드 부분을 연결한다. 하드웨어 추상화 계층은 응용 소프트웨어에 대해 하드웨어 제어 투명성을 제공하고 동시에 자바 응용이 사용할 수 있는 자바 API와 C 언어로 작성된 하드웨어 제어 코드를 JNI(Java Native Interface)를 통해 연결시켜 준다. 응용 소프트웨어는 모두 자바 API를 사용하여 구현되지만 각종 응용 소프트웨어가 사용할 수 있는 공통 컴포넌트 혹은 라이브러리는 C 언어 등으로 작성되어 있는 오픈 소스 소프트웨어 기반 코드로 구성되어 있다. 이러한 공통 컴포넌트 혹은 라이브러리는 데이터베이스 처리를 위한 기능, 그래픽 처리를 위한 기능, 멀티미디어 처리를 위한 기능, 웹 응용을 실행하기 위한 기능 등을 포함한다. 안드로이드의 라이브러리는 기존 리눅스의 기본 라이브러리들을 자원 제약 조건이 심한 휴대 이동통신 단말 환경에 맞도록 최적화하여 구성되었다. 웹 응용을 위한 웹 브라우저 엔진 WebKit, OpenCORE 플랫폼 기반의 미디어 코덱을 포함하는 Media Framework, SQL 데이터베이스인 SQLite, 2D, 3D의 윈도우 렌더링을 위한 Surface Manager와 OpenGL|ES 등의 다양한 고성능의 라이브러리들을 포함한다.

안드로이드 응용 소프트웨어가 직접적으로 실행하기 위한 환경을 안드로이드 런타임이라고 부르며 Dalvik 가상 머신과 Core 라이브러리들로 구성된다. Dalvik 가상 머신은 임베디드 시스템 환경을 위해 설계된 자바 가상머신으로서 기존 자바 실행파일 형식과 다른 실행파일 형식(.dex)을 사용하여 실행파일의 크기와 성능을 임베디드 시스템 환경에 최적화하였다.

애플리케이션 프레임워크는 자바 기반의 응용 소프트웨어 실행을 위한 가장 높은 수준의 서비스를 포함하고 있는 계층을 말하며 핵심 시스템 서비스를 담당하는 코어 시스템 서비스들과 하드웨어와의 인터페이스를 담당하는 하드웨어 서비스들로 구성된다. JNI(Java Native Interface)를 통해 native C/C++ 코드를 호출하는 부분을 포함한다.

그림 3는 안드로이드 응용이 어떻게 구동되는 지 모바일 플랫폼의 종류 보여준다. 기본적인 시스템 서비스는 리눅스 커널 및 리눅스의 기본 시스템 서비스 응용들에 의해 제공되고 안드로이드 응용 소프트웨어에 특화된 서비스는 런타임 서비스 매니져라는 소프트웨어 컴포넌트와 Dalvik 가상머신을 중심으로 한 서비스에 의해 제공된다. 안드로이드 응용의 실행 성능을 높이기 위해 zygote라는 서비스가 제공된다. zygote는 안드로이드 응용을 빠르게 구동하기 위해서 필요한 소프트웨어 컴포넌트 실행 이미지를 미리 메모리에 준비하는 기능을 제공한다.

안드로이드 애플리케이션의 구성
안드로이드의 응용 소프트웨어는 그림 4와 같이 apk라는 패키지의 형태로 구성되어 있다. Apk는 Dalvik이 실행할 수 있는 형태의 dex파일과 각각의 리소스들을 가진 WbXML, 각 컴포넌트들에 대한 기술이 있는 Manifest로 구성되며, Zip 압축을 통해 apk 파일로 생성되는 형태이다. 안드로이드 응용 소프트웨어를 개발하고자 할 때에는 오픈 소스 개발 도구인 이클립스(eclipse)의 플러그인(plug-in)을 사용하여 구성되는 개발 도구를 사용한다.

그림 5은 안드로이드의 응용의 구성 요소를 보인다. 가장 중요한 구성 요소 중 하나인 Android-Manifest.xml은 시스템의 명세를 담아 두는 파일이다. xml 파일 안에 모든 최상위 수준 컴포넌트를 가지고 시스템이 무엇을 말하는 가를 컴포넌트 별로 명시해주는 제어 파일이다. Activity는 가장 기본이 되는 오브젝트로서, 어떤 작업을 하는 코드의 묶음이다. 즉 하나의 가상의 사용자 인터페이스에 대한 표현이라고 정의할 수 있다. 이것은 생명주기를 가지며, 사용자에게 사용자 인터페이스를 보여주는 것을 포함하기도 하며, 포함하지 않을 수도 있고, 다른 애플리케이션에 종속될 수도 있는 특성을 가지고 있다. View는 화면을 그리는 것을 담당하는 오브젝트이다. 이 View에 대한 이벤트, 즉 터치 입력이나 키패드 입력 등의 이벤트에 대한 처리도 담고 있다. 필요하다면, 새로운 사용자 인터페이스 위젯을 만들기 위해 View를 생성하는 것도 가능하다. Intent는 어떤 것을 할 의도를 표현하는 단순한 메시지 오브젝트이다. 즉 Activity들 간의 매개체로서 수행되어야 할 동작에 대한 표현을 담고 있는 것이다. 이것은 요구되는 동작과 동작을 수행하기 위해 필요한 정보를 포함하고 있다. Service는 백그라운드로 동작하는 응용 소프트웨어로서 서비스를 포함하는 프로세스 안이나, 다른 애플리케이션의 프로세스 안에서 실행될 수 있는 프로그램을 말한다.

Notification은 상태 바에 나타나는 작은 아이콘을 말한다. PC에서와 마찬가지로, 사용자는 정보를 수신하는 이 아이콘과 상호작용 할 수 있다. 정보 갱신 시에 LED를 깜빡이거나, 사운드, 진동을 통해 사용자에게 입력의 전달을 표현할 수 있다. Notifica-tion의 메시지 기능은 문자 메시지의 도착 시에 사운드나 진동을 통해 Notification 영역의 작은 아이콘을 통해 메시지를 확인할 수 있게 한다. 애플리케이션에서 별도의 Notification을 만드는 것도 가능하다. Content Provider는 장치상의 데이터에 대한 접근을 제공하는 오브젝트로서, 다양한 형태의 데이터베이스에 쉽게 적응할 수 있는 방법을 제공한다.

안드로이드 플랫폼 기반 단말기 구성
현재 다양한 정보 기기에 안드로이드 플랫폼을 탑재하려는 움직임이 활발하게 진행되고 있다. 구글을 포함하는 오픈 핸드셋 얼라이언스(OHA)에서 안드로이드를 발표한 이후 기존 모바일 기기에서 x86 프로세서 기반 넷북까지 안드로이드 탑재가 진행 중이다. 본 장에서는 안드로이드 플랫폼을 실제 하드웨어에 탑재하여 구동시키는 절차를 소개하고자 한다.

안드로이드 플랫폼의 탑재를 위해 가장 먼저 필요한 절차는 개발 환경을 구축하는 것이다. 안드로이드 플랫폼이 오픈 소스 소프트웨어인 리눅스 커널 및 다양한 응용 소프트웨어를 중심으로 구성되어 있기 때문에 개발 환경 또한 오픈 소스 소프트웨어 개발 환경인 GCC 기반으로 구성되어 있다. 따라서, 안드로이드 플랫폼 탑재를 위한 개발 환경은 리눅스 운영체제가 탑재된 시스템이 가장 적합하다. 단, 안드로이드 플랫폼을 위한 응용 소프트웨어 개발은 호스트 시스템의 운영체제에 독립적이다. 리눅스 운영체제가 설치된 호스트 시스템이 준비된 후에는 리눅스 기반의 개발 환경을 구축하기 위해 필요한 여러 패키지들을 다운로드하여 설치한다. 기본 개발 환경 패키지에는 필요한 소스들을 다운로드하기 위한 리눅스 기반의 소스 관리 도구 패키지와 안드로이드 기반의 SDK (Software Development toolKit)가 포함된다. SDK는 에뮬레이터를 구동하기 위한 사용자 인터페이스 환경 및 자바 개발 도구들을 모두 포함한다. 설치해야 할 패키지에 관련된 세부사항은 http://source.android.com/ 을 참고한다.

안드로이드의 전체 소스 코드를 다운로드 받으면 다운로드 받은 경로 안에 kernel 디렉토리가 존재하는 것을 확인할 수 있다. 운영체제 커널의 소스 코드의 필요한 부분을 수정하면 다양한 하드웨어에 탑재할 수 있게 된다. 주로 운영체제 커널의 메모리 영역 설정하는 부분, 각종 장치 드라이버, 그리고 HAL(Hardware Adaptation Layer) 등의 부분을 수정하여 새로운 하드웨어에 탑재하게 된다.

안드로이드의 커널 코드 중 하드웨어 장치를 제대로 제어할 수 있도록 수정하는 부분은 두 부분인데 하나는 장치 드라이버이고, 또 한 부분은 장치 드라이버와 안드로이드 플랫폼을 연결하는 JNI 부분이다. JNI는 이미 잘 정의되어 있는 자바 응용과 C 언어 수준의 시스템 코드를 연결시켜주기 위한 체계이다. 그림 6은 미디어 플레이어를 실행할 때의 JNI의 역할을 보인다. 그림에 나타나 있는 바와 같이 리눅스 커널의 오디오와 비디어 장치 드라이버는 네이티브 코드(C 언어 혹은 C++ 언어 기반 코드)인 라이브러리(Libmedia.so)를 통해 접근하도록 설계된다. Libmedia.so와 같은 코드는 원래 오픈소스로 제공되기보다는 안드로이드 플랫폼의 JNI 라이브러리를 구성하기 위해 자바 인터페이스와 짝을 이루는 라이브러리로 설계된 것이라고 볼 수 있다. 이러한 라이브러리는 JNI 라이브러리인 Libmedia_jni.so와 연결되어 모든 네이티브 코드 함수들이 자바 함수들과 연결된다.

안드로이드 플랫폼의 장치 드라이버는 일반 리눅스 커널의 장치 드라이버 형태를 그대로 사용하기 때문에 특별한 설계가 필요하지 않다. 단, 장치 드라이버를 접근하는 경로가 모두 JNI 함수로 구현되어야 하기 때문에 이를 고려하여 장치 드라이버를 작성할 필요가 있다. 그리고, 일부 장치 드라이버는 일반 리눅스에서는 필수적인 사항이 아니지만 안드로이드 플랫폼에서는 필수적으로 지켜져야 하는 사양이 정해져 있는 경우도 있다.

프레임버퍼는 화면 디스플레이를 위한 장치 드라이버이다. 이 장치 드라이버는 리눅스 커널에 /dev/fb 장치 노드를 통해 접근하여 사용할 수 있도록 잘 정의되어 있다. 안드로이드 플랫폼에서는 기본적인 리눅스 커널의 프레임버퍼 장치 드라이버 형태를 그대로 지키되 더블 버퍼링을 반드시 사용하도록 요구한다. 더블 버퍼링이란 하나의 화면을 디스플레이하기 위한 메모리 상의 프레임버퍼를 두 개 만들어서 프레임버퍼를 채우는 동안에 걸리는 시간을 드러나지 않도록 하여 디스플레이 성능을 높이기 위한 방법이다. 그림 7에 안드로이드 플랫폼에서 사용하는 더블 버퍼링의 구성을 보인다.

리눅스 커널에 이미 존재하는 fb_pan_display() 함수는 호출 시 프레임버퍼의 시작 주소를 넘겨주는 함수인데 이 함수가 두 개의 프레임버퍼의 시작 주소를 번갈아 넘겨주도록 구현하면 된다.

그 외 중요한 장치로는 키 입력장치와 터치스크린 등의 입력장치가 있다. 이러한 입력장치들은 모두 리눅스 커널의 Input Device라는 부류의 장치로 등록된다. 장치 노드로는 /dev/input을 사용하는데 이 노드에 이벤트의 형태로 각각의 입력 장치를 등록하도록 되어 있다. 예를 들면, 키를 입력할 수 있는 입력장치는 키패드, 키보드(QWERTY 자판 형태의 입력장치), 그리고 마우스 형태의 입력장치를 안드로이드 플랫폼에서 지원하는데 모두 /dev/input 장치 노드의 이벤트의 형태로 등록하고 각 키가 눌렸을 때의 키 값을 정해주기만 하면 그대로 동작할 수 있게 안드로이드 플랫폼에 JNI 코드의 형태로 모두 구현되어 있다. 만약 입력장치로 키패드와 터치스크린을 사용한다고 모바일 플랫폼의 종류 하면 각각 /dev/input/ event0, /dev/input/event1의 입력장치 노드로 등록하고 각 입력장치의 종류를 장치 드라이버 코드 내에 명시하면 이에 맞게 구성되어 있는 JNI 코드와 연결시킬 수 있다. 안드로이드 플랫폼의 장치 지원 코드 내에는 아직 애플사의 아이폰(iphone)에서 사용되는 멀티 터치에 대한 장치 지원 코드는 공식적으로 완벽하게 마련되어 있지는 않다. 따라서, 멀티 터치를 사용하는 경우에는 JNI 코드부터 장치 드라이버까지 필요한 코드 부분을 작성해야 한다.

안드로이드의 커널 코드를 하드웨어에 맞게 수정한 후에는 커널 상에서 구동되는 각종 응용 소프트웨어가 포함되어 있는 파일 시스템을 구축하여야 한다. 안드로이드 플랫폼의 파일 시스템 이미지 내에는 리눅스 시스템 구동을 위한 기본적인 시스템 소프트웨어 및 라이브러리, 안드로이드 플랫폼을 위한 각종 라이브러리, Dalvik 가상 머신, 안드로이드 플랫폼 내에 사전 설치되는 응용 소프트웨어 등이 포함되어 있다. 안드로이드 플랫폼을 위한 파일 시스템 이미지는 현재 YAFFS2와 EXT3 파일 시스템 형식으로 제공된다. YAFFS2는 NAND 플래시메모리를 위한 파일 시스템으로서 저널링 기능을 사용하여 안정성을 제공한다. NAND 플래시메모리를 위한 전용 파일시스템을 사용하는 경우에는 YAFFS2를 구축하여 사용할 수 있지만 메모리 카드의 형태나 다른 복합 형태의 플래시메모리를 사용하는 경우에는 일반 하드 디스크를 위한 파일 시스템을 사용하여야 하기 때문에 EXT3 파일 시스템을 위한 이미지를 제공한다. 그림 8는 ARM 코어 기반 프로세서를 사용하는 하드웨어에 필요한 커널 및 파일 시스템 이미지를 수정하여 탑재한 장면을 보인다. 아래 사용한 하드웨어는 세븐코아㈜에서 제작한 멀티미디어 스마트폰을 위한 개발 플랫폼으로 Marvell 사의 PXA270 프로세서, 3D 가속기, WLAN, 멀티 터치, 블루투스, 가속 센서 등을 갖추고 있다. 필자가 속한 연구실에서는 아래 하드웨어에 안드로이드 플랫폼을 탑재하고 다양한 안드로이드 응용 소프트웨어를 작성하는 학생 프로젝트를 시행 중이다.

모바일 플랫폼의 종류

그 어느 때보다 모바일 애플리케이션 개발이 기업에서 중요해 지고있다. 소프트웨어 개발 업체들이 현재와 미래 프로젝트의 요구사항을 모두 충족시킬 수 있는 모바일 애플리케이션 개발 플랫폼(Mobile Application Development Platform:MADP)을 점점 더 많이 찾고 있다.

모바일 애플리케이션은 워낙 광범위한 분야인데다, IT업체들 역시 다양한 종류의 기능들을 제공하고 있다. 여기 가트너가 업계를 주도하는 개발 플랫폼으로 꼽은 10가지를 소개하고자 한다. [email protected]

다른 독립 소프트웨어 벤더(ISV)들보다 SAP는 비교적 일찍 모바일 분야에 승부를 걸었다. 가장 최근에 발표한 사이베이스 언와이어드 플랫폼(Sybase Unwired Platform:SUP)은 2010년 최초 출시한 이후 빠르게 성숙도를 높여, 이클립스(Eclipse)와 비주얼 스튜디오(Visual Studio)의 플러그인과 독점적인 스튜디오와 더불어 유연한 애플리케이션 개발 환경을 제공하고 있다. 다른 많은 솔루션들보다 더 빠른 학습 속도를 보이고 있지만, SAP의 아파리아(Afaria) MDM 솔루션과 결합했을 경우 특별히 광범위한 모바일 계획을 위한 최선의 선택이 될 수 있다. SAP는 올해 6월, 또다른 모바일 애플리케이션 개발 플랫폼의 선도적 벤더인 사이클로(Syclo)의 인수를 마무리지었다.

지난 6월 SAP에 인수된 사이클로는 원래 현장 서비스와 충격 방지 기기들의 기업 자산 관리(EAM) 애플리케이션에 특화된 회사였지만, 오랫동안 모든 모바일 운영체제들로 플랫폼의 범위를 확장시켜왔다. 그러나 EAM에 맞춘 요구사항을 가진 기업과 현지 서비스 기반 사용자들까지도 사이클로를 이용해 최대의 혜택을 얻을 수 있을 것이다. 사이클로의 에이전트리(Agentry) MADP는 직원대상 기업용 애플리케이션에 가장 적합한 플랫폼이며, 현재 많은 기업의 소비자에대한 요구사항 역시 지원한다. 에이전트리는 네이티브 애플리케이션과 웹-지향 이행처럼 행동하는 하이브리드 애플리케이션을 지원하는데 탁월하다.

안테나의 안테나 모빌리티 플랫폼(Antenna Mobility Platform:AMP)는 다양한 모바일 기기를 위한 다수의 애플리케이션을 개발하고 그것들을 클라우드 서비스에 배치시켜야 하는 조직에 아주 잘 부합한다. AMP는 개발 스튜디오와 측량가능한 클라우드 런타임 서비스, 그리고 다양한 모바일 기기 상에서 구동할 클라이언트 세트로 구성되어 있다. 2012년 2월 발표된 AMP크로마(AMPchroma) 모바일 SaaS 제공은, 안테나가 볼란티스 시스템(Volantis Systems)을 인수하면서 MDM과 통합한 것처럼 더 많은 능력을 더해준다.

2007년에 처음 출시되었을때, 코니는 소비자를 직접 상대하는 애플리케이션에 집중했지만, 그 후 유기적 성장을 통해 직원 대상 사업 능력까지 추가로 갖추게 되었다. 코니의 플랫폼은 모바일 기기 무리들의 본연의 기능 사용을 요구하는 프로젝트에 아주 적합하다. 태블릿, 스마트폰, 피쳐폰, 모바일 브라우저, 심지어 데스크톱 브라우저를 위한 앱들을 만들고 설치하는데 사용할 수 있는 환경이다.

어도비 시스템(Adobe Systems)은 폰갭 프레임워크(PhoneGap framework)를 만들어낸 니토비 소프트웨어(Nitobi Software)를 2011년 4사분기에 인수했다. 폰갭은 HTML5 앱을 네이티브 컨테이너(native container)로 포장하기 위해 사용되는데, 그래서 모바일 클라이언트를 위한 요구조건들을 수용해야 하는 미디어가 풍부한 기업들, 혹은 센차(Sencha), 도조 모바일(Dojo Mobile), 제이쿼리 모바일(jQuery Mobile) 등 다른 플랫폼으로 개발된 모바일 웹 애플리케이션들을 포장하고 싶은 조직들사이이 많이 선호하는 제푸품이다. 윈도우와 리눅스 그리고 맥 운영체제 플랫폼을 모두 지원한다.

센차는 웹-중심 접근방식을 모바일 애플리케이션 개발에 도입하여, 많은 웹 애플리케이션과 자바스크립트 개발 전문성을 가진 조직들에 적합하지만, 네이티브 개발 전문성에는 전혀 그렇지 못하다. 센차 터치(Sencha Touch) 애플리케이션 개발 프레임워크는 HTML5에 기반한다. 올해 초, 센차는 SAP 고객들이 센차 터치를 사용하여 빌드하고 사이베이스 무선 플랫폼과 통합할 수 있도록 SAP와 합의를 체결했다.

제이쿼리 모바일(jQuery Mobile)

비영리 단체인 소프트웨어 자유 보호위원회(Software Freedom Conservancy)의 제이쿼리 오픈소스 프로젝트의 일환으로, 제이쿼리 모바일은 기존의 제이쿼리 기술을 활용할 수 있게 해주는 오픈소스 모바일 웹 프레임워크를 필요로 하는 기업들에 안성맞춤이다. 이 프레임워크는 HTML, 자바스크립트, CSS를 이용하여 다양한 스마트폰들을 위한 상호적인 모바일 웹 페이지를 빌드하고, 폰갭과 함께 사용하여 하이브리드 모바일 애플리케이션을 빌드하는데 사용할 수도 있다.

앱셀러레이터(Appcelerator)

이클립스에 기반한 앱셀러레이터의 티타늄 모바일 플랫폼(Titanium mobile platform)은 통합 이전의 클라우드 서비스와 모듈 마켓플레이스 내의 애플리케이션 확장자의 광범위한 라이브러리와 함께 무료 다운로드로 제공된다. 이는 웹 기반 스킬 세트를 활용하며 여러 운영체제상의 애플리케이션을 개발하는 조직에 적합한 플랫폼이다. 앱셀러레이터는 최근 SAP의 고객들이, 빌드하고 사이베이스 무선 플랫폼과 통합하는데 티타늄을 사용할 수 있도록 SAP와 협력 관계를 이끌어냈다.

베리보 소프트웨어(Veribo Software)

베리보 소프트웨어는 경량, 네이티브 클라이언트방면 애플리케이션에 특화되어, 제한적인 개발 자원만을 가지고 다양한 기기 유형과 플랫폼 지원을 필요로 하는 기업에 아주 적합한 플랫폼이다. 플랫폼들에 걸쳐 일정한 이용자 경험을 돕기 위해 베리보는 플랫폼들에 걸쳐 공유할 수 있는 시각적/기능적 요소들을 제공한다.

도조 모바일(Dojo Mobile)은 도조 재단(Dojo Foundation)의 지원을 받는 오픈소스 개발 프레임워크로, 무료 다운로드와 IBM의 웹스피어(WebSphere)의 일부로 상업적 이용이 모두 가능하다. 이는 도조 툴킷(Dojo Toolkit)의 경험을 활용할 수 있게 해주는, 경량의 오픈소스 모바일 웹 프레임워크를 필요로하는 조직에게 잘 어울린다. 도조는 개발자들이 HTML, 자바스크립트, 케스케이딩 스타일 시트(Cascading Style Sheets:CSS)를 사용하여, 데스크톱 기기와 웹킷(Webkit)이 활성화된 모바일 기기들에서 모두 쓸 수 있는 상호적인 모바일 웹 페이지를 빌드할 수 있게 해준다. 폰갭과 결합하여 사용하면 네이티브 모바일 애플리케이션을 작성할 수 있다.


0 개 댓글

답장을 남겨주세요