포커스 포커스 구글의안드로이드와안드로이드마켓 김정훈 * 2009 년 4 월부터 WIPI 의무화가폐지된다. WIPI 의무화의폐지로해외에서인기있는다양한모바일플랫폼들이국내에들어올것으로예상된다. 특히애플의아이폰이나구글의구글폰은미국이나유럽등지에서큰파장을불러올만큼그확산속도가대단히빠르다. 이들은언젠가국내에진출하게될텐데국내에는이에대한대비가거의없는상황이다. 이에본고에서는구글의안드로이드플랫폼과최근오픈한안드로이드마켓에대해자세히살펴보려고한다. 목 차 I. 서론 I. 서론 1. 스마트폰시장동향 II. 안드로이드는무엇인가? III. 애플리케이션구조와사용자인터페이스 IV. 앱스토어와안드로이드마켓 V. 결론 WIPI 의무화의폐지로해외의다양한플랫폼들이국내에들어올수있게되었다. 현재해외에서는스마트폰이대세이다. 스마트폰의특징이라면 PC 에서할수있는많은일들을스마트폰에서도할수있다는것이다. 여기에스마트폰의경쟁력이있다. 전세계적으로많이사용되는모바일플랫폼에는노키아의심비안, RIM 의블랙베리, 애플의 OS X, 마이크로소프트의윈도우즈모바일, 구글의안드로 이드등이있다. < 표 1> 은각회사의모바일플랫폼 의시장점유율을나타낸것이다. < 표 1> 를살펴보면 1 위는 2007 년이나 2008 * 용인송담대학컴퓨터게임정보과 / 조교수 년모두심비안이차지하였다. 그러나 2008 년점유 13
주간기술동향통권 1391 호 2009. 4. 8. < 표 1> 2008 년 3 분기전세계스마트폰운영체제별시장점유율 회사 2007 년 3 분기점유율 2008 년 3 분기점유율 성장률 심비안 63.1% 49.8% -12.0% RIM 9.7% 15.9% 81.7% 애플 3.4% 12.9% 327.5% 마이크로소프트 12.8% 11.1% -3.0% < 자료 >: AppleInsider 율은 49.8% 로전년동기 63.1% 에비해많이줄어들었다. 2008 년심비안은처음으로 50% 미만의점유율을기록한것이다. 대신이자리를 RIM 과애플이차지하였다 [1]. RIM 은시장점유율을전년동기대비 81.7% 증가시킨 15.9% 를차지하였다. 놀라운것은애플의맥 OS X 인데성장률이전년동기대비무려 327% 나증가하였다. 시장점유율자체는 12.9% 로그리크지않지만시작한지얼마되지않은점을고려하면 1 위나 2 위를넘볼수도있을것으로예상된다. 애플의맥 OS X 는 12.9% 의점유율로 4 위인마이크로소프트의윈도우즈모바일을제치고 3 위의자리에올랐다. 1.8% 의격차를두고 3 위로올라섰으며 2 위와의격차도불과 3% 밖에나지않는다. 이렇게애플이크게성장할수있었던이유는아이폰판매에따른것이다. 2. OHA 애플의아이폰못지않게최근주목받고있는스마트폰이있다. 바로구글에서제작하고있는구글폰이다. 정확히표현하면구글폰은구글에서제작하고있는것은아니다. 구글폰하드웨어는세계유명단말기제조회사에서만들고그폰에탑재되는모바일플랫폼만구글에서만들고있다. 구글은이모바일플랫폼을안드로이드 (android) 라고명명하였다. 아직시장파급력은크지않지만구글은노키아의심비안처럼 OS 플랫폼과소스코드를개방하고있기때문에안드로이드는전세계통신사업자들에의해빠르게확산될것으로보인다. 더욱이안드로이드는개방형인리눅스를기반으로하고있기때문에하드웨어와서비스개발의폭이넓다는장점이있다. 또구글이주도하는안드로이드이용모임 OHA(Open Handset Alliance) 에최근보다폰, 소프트뱅크모바일, 소니에릭슨, 도시바등많은기업들이참여하고있어안드로이드의확산속도는더빨라지고있다 [2]. 구글에서는 OHA 정신에입각하여안드로이드출시후안드로이드소스를공개하였다. 또한, SDK 를공개하여안드로이드환경에서동작할수있는소프트웨어를개발할수있게하였다. 14
포커스 마지막으로이것을유통시킬수있는안드로이드마켓또한오픈하여다양한소프트웨어를공급할수있게하였다. 2009 년에는구글주도의 OHA 에가입한여러제조업체들이안드로이드를탑재한단말기를생산할것으로보인다. 삼성전자, LG 전자, 모토로라, 소니에릭슨등이 2009 년에안드로이드를탑재한단말기를출시할것이라고한다. 제일먼저구글폰을출시한대만의 HTC 도 G1 에이어 G2 를내놓을것으로예상되고있다. 이러한업체들로스마트폰시장의경쟁은더욱치열해질전망이다. II. 안드로이드는무엇인가? 1. 안드로이드개념안드로이드는기존의 WIPI, BREW, GVM 등과같은모바일디바이스를위한플랫폼이다. 아주단순하게생각하면 PC 위에돌아가는 Windows 와같은운영체제라고생각해도된다. 좀더정확히설명하면안드로이드플랫폼은운영체제, 미들웨어, 키 (key) 애플리케이션들을포함한모바일디바이스를위한소프트웨어집합이다. 개발자들이 Windows 에서애플리케이션을개발하듯이안드로이드 SDK 를사용하면구글폰에서동작하는애플리케이션을만들수있다 [3]. 애플리케이션들은 Java 프로그래밍언어로작성해야하고 Dalvik 위에서실행된다. Dalvik 은구글이만든가상머신인데, Linux 커널의최상위영역에서동작한다. 자바가상머신 (Java Virtual Machine) 같은역할을하는것이라고생각하면이해가쉬울것이다. 2. 안드로이드특징 [4] 가. 애플리케이션프레임워크의제공 Windows 와비슷하게프로그래밍시일종의마법사가프로그래밍할수있는프레임워크를제공해준다. 프레임워크는일종의틀이다. 빵굽는틀이있으면일정한모양의빵을쉽게구어낼수있다. 서로다른애플리케이션일지라도그기본적인틀은비슷하기때문에대부분의 SDK 에서는그틀을만들수있는마법사를제공하고있다. 나. Dalvik 가상머신 자바가상머신과같이일종의가상머신인데모바일디바이스를위해최적화되었다. 왜 15
주간기술동향통권 1391 호 2009. 4. 8. Dalvik 이라는생소한이름을사용하는것일까? Dalvik 이름을명명한사람은 Bornstein 이라는 사람이다. Bornstein 의조상들이아이슬랜드의한어촌인 Dalvik 에서살았다고해서그렇게명 명하였다고한다. 다. 최적화된그래픽 안드로이드에서는기본적으로 2D 그래픽라이브러리를제공하고있다. 또 OpenGL ES 1.0 스펙에기반한 3D 그래픽라이브러리도제공한다. 라. SQLite 데이터를저장하고검색하기위해사용된다. 안드로이드에서제공하는데이터베이스시스템이라고생각하면된다. 마. 미디어지원 일반적인오디오, 비디오, 그리고정지이미지포맷들을지원한다. 현재구글에서밝히고있는지원가능한포맷은 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF 등이다. 바. GSM 테크놀로지, 블루투스, EDGE, 3G, WiFi, 카메라, GPS, 나침판, 가속도계의지원 하드웨어의존적이기는하나지원가능하다. 사. 풍부한개발환경 디바이스에뮬레이터, 디버깅도구, 메모리및성능프로파일링, Eclipse IDE(Integrated Development Environment) 를위한플러그인을제공한다. 아. 웹브라우저제공 폰에서사용하는웹브라우저를제공하고있다. 3. 안드로이드아키텍처 ( 그림 1) 은안드로이드운영체제의주요구성요소를보여준다. 이그림은안드로이드아키텍처를필자가간략하게재구성한것이다 [5]. 가. 애플리케이션 안드로이드에서는이메일을확인할수있는클라이언드, SMS 프로그램, 캘린더, 지도, 브라우 16
포커스 저, 주소록등을키애플리케이션으로제공한다. 모든애플리케이션들은자바언어로작성된다. 나. 애플리케이션프레임워크애플리케이션들이사용하는프레임워크를제공한다. 이프레임워크를사용하여자신만의애플리케이션을개발할수있다. ( 그림 1) 과같이애플리케이션프레임워크에서는애플리케이션을개발하기위한각종클래스와메소드들이제공된다. ( 그림 1) 안드로이드아키텍처다. 라이브러리시스템 C 라이브러리, 미디어라이브러리, Surface 관리자, LibWebCore, 2D 그래픽엔진, 3D 라이브러리, 경량화된관계형데이터베이스엔진등이라이브러리형태로제공된다. 라. 안드로이드런타임안드로이드는자바의핵심라이브러리기능들을대부분포함하고있다. 모든안드로이드애플리케이션은 Dalvik 가상머신내에자신의인스턴스를가지고동작한다. Dalvik 에서는최소메모리만을사용하도록최적화된 Dalvik Executable(.dex) 포맷의파일들을실행한다. Dalvik VM 은자바언어컴파일러에의해컴파일된클래스를 dx 라는도구에의해.dex 포맷으로변환시켜실행한다. Dalvik 가상머신에서는쓰레딩과저수준메모리관리와같은기능을리눅스커널에의존한다. 마. 리눅스커널안드로이드플랫폼은보안, 메모리관리, 프로세스관리, 네트워크관리, 드라이버모델등의핵심서비스를리눅스에기초하여구현되었다. 이리눅스커널은하드웨어와나머지소프트웨어 17
주간기술동향통권 1391 호 2009. 4. 8. 스택간의추상화된계층역할을한다. III. 애플리케이션구조와사용자인터페이스 안드로이드애플리케이션은 Activity, Intent Receiver, Service, Content Provider 의 4 가지구성요소로이루어져있다 [6]. 모든애플리케이션이 4 가지모두를필요로하는것은아니다. 이들의조합으로애플리케이션은구성된다. 예를들어애플리케이션은 Activity 로만구성될수있고 Activity 와서비스로구성될수도있다. 물론애플리케이션은 4 가지구성요소모두로이루어질수도있다. 애플리케이션에서어떤구성요소들을사용할지결정하였다면, 이구성요소들의목록을 AndroidManifest.xml 파일에기록해야한다. 이 AndroidManifest.xml 파일은어느애플리케이션에서어떤구성요소들을선언했는지, 그들의기능과요구사항은무엇인지를기록하는파일이다. 1. 하나의화면, Activity 가. Activity 란무엇인가애플리케이션내의하나의스크린또는화면을일컫는말이다. 액티비티에서는 UI 컴포넌트를화면에표시하고시스템이나사용자의반응을처리할수있다. 윈도우즈에서윈도와비슷한기능을하는것이라고생각해도되겠다. 윈도우즈에서애플리케이션은여러개의윈도를갖게되는데안드로이드애플리케이션에서도여러개의액티비티를가질수있다. 프로그래머가구현해야할각액티비티는안드로이드에서제공하는액티비티클래스로부터상속받아구현해야하며, 사용자에게뷰와이벤트처리를할수있는인터페이스를제공한다. 예를들어간단한텍스트를상대방에게전달할수있는메시징애플리케이션을생각해보자. 이애플리케이션이사용자에게보여주는화면은총 3 개라고가정한다. 첫화면은연락처주소의리스트를보여주는화면이다. 두번째화면은선택한연락처의주소로메시지를쓸수있는화면이다. 이화면에는당연히텍스트를입력할수있는부분이있어야할것이다. 마지막세번째화면은보낸메시지를확인하거나환경설정을바꾸는화면이다. 이러한각각의화면이액티비티가되며, 다른화면으로의이동은새로운액티비티를시작하는것과같다. 때에따라서는액티비티가이전의액티비티로특정값을전송해야할필요도있다. 예를들 18
포커스 ( 그림 2) Activity 간의데이터전송어윈도우즈에서자주사용하는이메일프로그램을생각해보자. 받는사람을입력하는부분에직접상대방의이메일주소를입력해도되지만주소록버튼을클릭하여나타나는주소록리스트에서상대방을선택할수도있다. 이경우주소록리스트화면에서선택한상대방의이메일주소가전화면에전달될필요가있다. ( 그림 2) 는 Activity2 에서선택한이름과이메일주소를 Activity1 으로전송하는과정을보여준다. 안드로이드에서는이렇게액티비티간의데이터전송을위해 Intent 라는클래스를사용한다. 화면이오픈되면, 이전화면은멈추게되며, 히스토리스택 (history stack) 에저장된다. 사용자는히스토리스택을이용하여히스토리내에있는이전화면으로돌아갈수있다. 화면이히스토리스택내에저장될필요가없으면삭제된다. 안드로이드는이히스토리스택을각애플리케이션마다유지한다. 나. 액티비티라이프사이클안드로이드의액티비티역시 MIDlet 과유사하게라이프사이클관리를위한 8 개의메소드를제공한다. 각각의메소드들은다음과같다 [7]. 라이프사이클에히스토리스택은자주언급된다. 따라서생성된모든액티비티의히스토리스택은유지된다는사실을기억하고있어야한다. 1) OnCreate(): 액티비티가생성될때처음으로호출되는메소드인데여기에서주로리소스를초기화한다. 19
주간기술동향통권 1391 호 2009. 4. 8. ( 그림 3) Activity 라이프사이클 2) OnStart(): 액티비티가사용자에게보여줄준비가되었을때호출된다. 3) OnResume(): 액티비티스택의가장상위에위치하고있어액티비티가사용자에게보여지고사용자의입력을처리할수있을때호출된다. 4) OnPause(): 포커스를잃고이전의액티비티가레쥐메 (Resume) 되기전에호출된다. OnPause() 에서는데이터의저장, 애니메이션의중지, CPU 를소비하는작업중단과같은일들을수행한다. 5) OnStop(): 더이상액티비티가스택의최상위에있지않고따라서더이상액티비티가사용자에게보여지지않는다. 6) OnDestroy(): OnDestroy() 메소드가호출되면시스템내에 Activity 가존재하지않는다. 액티비티가시작되고실행중에있을때다른액티비티가시작되면그때까지실행되던 Activity 는포즈상태로전환되어야한다. 포즈상태로존재하다가다른애플리케이션에서메모리를많이요구하게되면포즈상태에있던액티비티는죽을 (killed) 수도있다. 만약포즈상태에있던액티비티가사용자의선택에의해다시포그라운드로돌아가게되면 20
포커스 레쥐메상태가된다. 또 pause 상태에있던액티비티가더이상보이지않으면스톱상태로전환된다. 스톱상태에있던액티비티가다시포그라운드로되면 restart 에의해스타트상태로돌아간다. 물론스톱상태에있던액티비티도다른애플리케이션이메모리를요구할때죽을수도있다. 또는 destory 상태로전환될수도있다. 위와같이한액티비티가시작되고멈추어지고다시시작되고그리고결국은죽는과정이마치라이프사이클과같다고해서액티비티라이프사이클이라고한다. 다. Intent 안드로이드는화면과화면사이를이동할때, Intent 라는특별한클래스를사용한다. 이 Intent 에는애플리케이션이무엇을해야하는지에대한정보가담겨있다. A Activity 에서 B Activity 로화면전환이이루어질때 Intent 클래스가사용된다. Intent 클래스는다음과같이사용된다. Intent i = new Intent(this, NoteEdit.class); startactivityforresult(i, ACTIVITY_CREATE); 호출하는측은 this 이고호출당하는측은 NoteEdit 클래스이다. this 클래스에서 NoteEdit 클래스의화면으로전환이이루어진다. 화면전환은 startactivity() 이나 startactivityforresult() 메소드를통해이루어진다. 2. Intent Receiver, Service, Content Provider 가. Intent Receiver Intent Receiver 는핸드폰으로전화가걸려오거나, 데이터네트워크접속이활성화되는것과같이외부에서이벤트가발생했을때처리하기위해사용된다. Intent Receiver 는 Activity 와같이 UI 를그려주는것은아니고, NotificationManager 를이용하여사용자에게어떤일이발생했는지를알려준다. Intent Receiver 도 AndroidManifest.xml 파일에등록되어야하는데, Context.registerReceiver() 를이용하여코드상에서등록해줄수도있다. 나. 서비스서비스는 UI 와상관없이오랫동안존재하면서실행되는코드이다. 예를들면재생목록에서노래를재생하는미디어플레이어같은것을서비스라고할수있다. 미디어플레이어애플리케이션은사용자가곡을선택하고재생을시작하게하는하나이상의액티비티를가지고있지만, 21
주간기술동향통권 1391 호 2009. 4. 8. 음악을재생하는것은액티비티에의해이루어지는것은아니다. 사용자는새로운화면으로이동하고나서도음악이계속재생되기를기대한다. 이럴때미디어플레이어의액티비티에서 Context.startService() 문장을실행하면, Service 로실행된다. 안드로이드시스템은음악재생서비스를멈출때까지계속재생해준다. Context.bindService() 메소드는서비스에연결하거나아직시작하지않은서비스를시작할때사용한다. 일단서비스에연결되면서비스에접근가능한인터페이스를통해멈춤, 다시재생등의기능을사용할수있다. 다. Content Provider 애플리케이션은자신의데이터를 SQLite 데이터베이스에저장하거나데이터베이스를사용하지않고단순히파일에저장할수도있다. Content Provider 는어떤애플리케이션데이터를다른애플리케이션이공유할필요가있을때아주유용하다. 이클래스는다른애플리케이션에서데이터를저장하거나, 가져오는작업을가능하게한다. 3. 프로세스라이프사이클안드로이드시스템은애플리케이션프로세스를관리하다가메모리가부족해지면오래된프로세스를제거한다. 각프로세스가제거될때어느프로세스를먼저제거할것인지판별하는기준은사용자가그프로세스를사용하고있느냐가중요한기준으로작용한다. 일반적으로액티비티가수행되고있을때그중요도에따라 4 개의프로세스상태로분류할수있다. 이러한 4 상태의분류중시스템은덜중요한프로세스를먼저제거한다 [8]. 가. Foreground Activity 사용자가현재조작중인최상위화면의액티비티를 Foreground Activity 라고하며가장중요한프로세스이다. 이프로세스는메모리가부족해지더라도제일마지막에제거된다. 나. Visible Activity 사용자화면에는보여지지만 foreground 는아닌것을 Visible Activity 라고한다. 예를들면 foreground 다이얼로그의뒤에있는액티비티를생각하면된다. Visible Activity 는 Foreground Activity 다음으로중요하다. 다. Background Activity Background Activity 는사용자에게보여지지않고멈추어진것이다. 따라서더이상중요하 22
포커스 지않으며시스템은 foreground 또는 visible 프로세스가메모리를요구하면 Background Activity 를안전하게제거시킬수있다. 만약 Background Activity 프로세스가제거된후사용자가그 Activity 로다시네비게이션한다면그화면을다시보여주어야한다. 이때에는액티비티의 oncreate(bundle savedinstancestate) 메소드의 savedinstancestate 파라미터를사용하면된다. Background Activity 가제거될때 onsaveinstancestate(bundle savedinstancestate) 메소드가호출되는데이때중요한데이터를 savedinstancestate 에저장시킬수있다. savedinstancestate 파라미터에저장된내용은 oncreate() 메소드의파라미터로전달된다. 따라서이파라미터를이용하면 Background Activity 제거되기전의상태로다시시작할수있다. 그래서 oncreate() 메소드와 onsaveinstancestate() 메소드를카운터파트 (counterpart) 라고도한다. 라. Empty Process 서비스또는 BroadcastReceiver 클래스와같이액티비티도없고애플리케이션컴포넌트도없는것을 Empty Process 라고한다. 이들프로세스들은메모리가부족해지면시스템에의해즉시제거된다. 이러한이유로액티비티밖에서수행되는임의의백그라운드연산은 Activity BroadcastReceiver 또는서비스의컨텍스트내에서실행되어야만한다. 4. 화면구성요소들의계층구조안드로이드애플리케이션의가장기본적인구성단위는액티비티라는클래스이다. 이액티비티는한화면을나타내고는있지만그자체로는아무것도보여줄수없다. 액티비티에뷰와 ViewGroup 클래스를사용해야비로소화면에무엇인가를표시할수있다 [9],[10]. 가. 사각레이아웃, 뷰뷰클래스는화면상에서직사각형형태의레이아웃과각종정보를저장하는자료구조이다. 뷰클래스는화면의크기조절, 레이아웃구성, 그리기, 포커스변화, 스크롤링과키처리등을위해사용된다. 뷰클래스는위젯 (widget) 의베이스 (base) 클래스로도사용된다. 위젯은 Text, EditText, Button, RadioButton, Checkbox, ScrollView 등과같이화면내에컴포넌트처럼동작하는것을말한다. 위젯을이용하면 UI 를빠르게만들수있다. 23
주간기술동향통권 1391 호 2009. 4. 8. 나. 뷰들의집합, ViewGroup ViewGroup 은말그대로뷰가여러개있는것이라고생각하면된다. 휴대폰화면에는하나의뷰만있는것이아니라여러개의뷰가다양한형태로존재한다. 이러한다양한형태의뷰들의집합을 ViewGroup 이라고한다. ViewGroup 은뷰안에또다른뷰를가질수있는구조적형태를지원한다. 하나의 ViewGroup 은뷰나또다른 ViewGroup 을포함할수있다. 따라서 ViewGroup 은자기가자기를포함하는형태가가능하다. ViewGroup 클래스는레이아웃을위한기본클래스로도사용된다. 레이아웃은뒤에서자세히살펴보겠지만뷰집합체를포함하는구조체를제공한다. 다. 트리구조의사용자인터페이스일반적으로안드로이드에서는액티비티의 UI 를뷰와 ViewGroup 의트리구조를이용하여구성한다. 트리구조의 UI 는안드로이드에서제공하는위젯과레이아웃또는직접제작한뷰를이용하여구성된다. 당연한말이겠지만어떻게구성하느냐에따라트리구조는간단해질수도있고복잡해질수도있다. ( 그림 4) 와같은트리구조를화면상에그리기위해서는트리구조의루트노드를파라미터로하여 setcontentview() 라는메소드를호출하면된다. 액티비티가활성화되고포커스를받으면, 시스템은루트노드를화면상에그리며, 순서대로각 ViewGroup 은자기의하위노드를그리게된다. 각 ViewGroup 은가용한공간을계산하고, 그하위의뷰를배치한다. 각하위의뷰에서는 Draw() 메소드를호출하여스스로그릴수있도록한다. 각하위의뷰는자신이그려질크기와위치를부모에게문의하는데, 부모는최종적으로어느정도의크기로, 어느위치에그릴것인가를결정해준다. ( 그림 4) 트리구조의사용자인터페이스 24
포커스 라. LayoutParams LayoutParams 클래스는뷰객체들이어떻게그려져야하는지에대한정보를부모객체에게알려주는역할을한다. 각객체들의폭과높이를명시할때다음둘중하나로표시된다. - WRAP_CONTENT: 콘텐츠를표시하는데충분한크기로그린다. - FILL_PARENT: 부모객체와의패딩 ( 여백 ) 을제외한나머지모든공간을차지한다. 모든 LayoutParmas 의서브클래스는값을설정하는각자의방법을가지고있다. 각하위요소들은 ( 그림 5) 와같이부모의속성에맞는 LayoutParams 를정의해야한다. 모든 ViewGroup 은가로와세로, 마진, 테두리속성을가지고있으며프로그래머가원하는크기로지정할수있다. 루트노드가 LinearLayout 이므로 3 개의자식노드는선형으로배치되어야한다. 자식노드중첫번째노드는다시 RelativeLayout 이므로 3 개의자식노드들은상대적으로배치되어야한다. ( 그림 5) 각 View 와 ViewGroup 은부모속성에맞게 LayoutParams 를정의 5. 레이아웃객체 가. FrameLayout FrameLayout 은가장단순한레이아웃객체인데, 단순히비어있는공간이라고생각하면된다. FrameLayout 에서는모든객체들이화면의왼쪽상단을기준으로그려진다. 프로그래머가직접그리고싶은객체의기준점을설정할수없다는의미이다. 따라서이레이아웃에서는단지그리려고하는객체의크기로그려질뿐이다. 특정객체가 25
주간기술동향통권 1391 호 2009. 4. 8. 그려지고난다음다른객체가그려지면먼저그려진객체는가려진만큼지워지게된다. 물론 나중에그린것이투명객체가아닌경우에한해서이다. 나. LinearLayout LinearLayout 은모든하위구성요소를수직또는수평형태중하나로정렬하여그리는방식이다. 만약수직형태로그려야한다면객체들의폭에상관없이한줄에한개의구성요소만을그린다. 만약수평목록이라면한줄높이로모든구성요소들을그리게된다. 이때한줄높이는가장큰하위구성요소에여백 (padding) 을추가한높이가된다. LinearLayout 에서는하위구성요소들간의갭인마진 (margin) 과하위구성요소의정렬 ( 오른쪽, 중간, 왼쪽정렬 ) 을지정할수있다. 정렬을지정할때사용하는애트리뷰트는그래비티이다. 또한 LinearLayout 에서는구성요소별로가중치 (android:layout_weight) 를지정할수있다. 가중치값은구성요소들이화면상에남는공간을어떻게활용할지를결정해준다. 다. TableLayout TableLayout 에서는행과열이라는개념이존재하여테이블의행과열을기준으로하위구성요소들을배치한다. TableLayout 은행을정의하는 TableRow 객체로구성되고각행은 0 개이상의셀들로구성된다. 각셀은 0 개이상의뷰오브젝트로표현된다. 따라서셀은비어있는상태가될수있다. 라. AbsoluteLayout AbsoluteLayout 에서는정확한 x, y 좌표를제시해야만하위구성요소들을화면에표시할수있다. 왼쪽상단을 (0,0) 을하고, 왼쪽상단을중심으로오른쪽또는아래로이동하면좌표값이플러스로증가된다. 마진은지원되지않으나, 구성요소가겹쳐지는것은허용된다. 서로다른단말기환경에서는프로그래머가예상한대로그려지지않을수있기때문에가급적 AbsoluteLayout 은사용하지않는것이바람직하다. 마. RelativeLayout RelativeLayout 에서는하위구성요소들이다른구성요소의상대적인위치에따라그려진다. 예를들어두개의객체가있을때하나를다른객체의아래에그려라또는위에그려라와같은설정을가능하게한다. 또 EditText 는 TextView 의아래에그리라고설정하였다. RelativeLayout 은좌표를지정 26
포커스 하는것이아니라어떤객체를중심으로그것의오른쪽, 왼쪽, 위, 아래와같은형식으로객체를그려나가는방식이다. RelativeLayout 에서설정할수있는속성들은 width, height, below, aligntop, toleft, padding, marginleft 등이다. RelativeLayout 이라는이름은이렇게속성들이다른구성요소들과의상대적인값으로설정되기때문에붙여진이름이다. IV. 앱스토어와안드로이드마켓 현재국내휴대폰사용자들이휴대폰에서동작하는게임이나애플리케이션을다운로드받기위해서는자신이가입한이동통신사의서버에접속해야한다. 따라서모바일콘텐츠를제공하는 CP(Contents Provider) 는게임이나애플리케이션을이동통신사의서버에업로드해야한다. 그러나아무나이동통신사의서버에업로드할수있는것은아니다. 이동통신사의검수를통과한콘텐츠만이서버에업로드될수있다. CP 입장에서는개발을다하고도이동통신사의검수과정을통과하지못하면소비자들에게자신의콘텐츠를판매할수없다. 최근서비스를시작한애플의앱스토어 (App Store) 나구글의안드로이드마켓 (Android Market) 에서의콘텐츠유통방식은기존방식과는많이다르다. 이동통신사의검수과정이없어지고앱스토어의경우는좀다르지만누구나콘텐츠를업로드할수있다. 검수과정이없어지거나또는간략화되면질낮은애플리케이션이유통될수있다는단점도있으나많은콘텐츠가사용자들에게다가갈수있다는장점도있다. 1. 애플의앱스토어 2008 년 7 월에애플은아이폰을판매함과동시에앱스토어를개장하였다. 이후오픈한달만인 8 월에 6,000 만번의다운로드와 3,000 만불의판매수익을올렸다. 다시한달만인 9 월에는 1 억번다운로드를, 10 월에는 2 억번의다운로드라는엄청난결과를달성하였다. 또 12 월에는등록된애플리케이션이 1 만개를넘어섰고다운로드도 3 억번을돌파하였다 [11]. 앱스토어에는무료애플리케이션도있고유료애플리케이션도있다. 유료인경우는 1~5 달러를받는애플리케이션이많고 3 억번의다운로드를생각하면판매금액은상상을초월한다. 다운로드회수만을보면애플리케이션을개발할수있는개발자들에게는희소식이아닐수없다. 심지어개발자들의천국이라는말이나올정도로앱스토어에대한기대는크다. 애플이앱스토어를히트시키자블랙베리의 RIM 도블랙베리앱센터 (App Center) 를만들었 27
주간기술동향통권 1391 호 2009. 4. 8. 고, PDA 로유명한팜 (Palm) 도소프트웨어스토어 (Software Store) 를만들었다. 국내 SKT 와휴 대폰제조업체인삼성전자도모바일콘텐츠직거래장터를구축하겠다고한다. 2. 구글안드로이드마켓애플보다늦긴했지만구글도애플앱스토어와비슷한구글안드로이드마켓을오픈해서운영해오고있다. 2009 년 2 월현재안드로이드마켓에서는무료애플리케이션만다운로드받을수있는데, 2009 년 1 분기부터는유료로애플리케이션을판매할수있다 [12]. 아무튼모바일콘텐츠개발자들에게는유료로애플리케이션을판매할수있는또다른공간이생기고, 이에또다른기회가펼쳐지고있다. 안드로이드마켓이유료화되면앱스토어에서서비스되고있는많은애플리케이션들이안드로이드마켓에서도판매될것으로예상된다. 3. 두시장의비교모바일콘텐츠시장은앱스토어와안드로이드마켓이큰흐름을만들어나가고있는것이사실이다. 이에두시장을비교해보고자한다. 먼저개발에필요한 SDK 를살펴보자. 아이폰 SDK 는애플에개발업체로등록해야 SDK 를다운로드받을수있다. 반면안드로이드 SDK 는누구나다운로드받을수있다. 두시장모두개발자는판매금액의약 70% 를수익으로가져갈수있다. 나머지 30% 는애플의경우수수료명목으로애플이징수하고있으며, 안드로이드마켓에서는이동통신사가 30% 를수취하게된다. 구글은별도로이익을취하지않고있다. 이익을추구하는기업입장에서는용납되지않는일이다. 대신구글은수익을창출할수있는방법을다른곳에서찾고있다. 구글은안드로이드마켓을활성화시켜모바일광고시장을통해수익을얻겠다는전략을가지고있다. 두시장의가장큰차이점은애플의앱스토어는애플의통제하에운영되고있고, 안드로이드마켓은사용자에게열려있어자율적으로운영된다는것이다. 따라서애플의게시조건을만족시키지못하면그애플리케이션은앱스토어에서판매될수없다. 두회사가사용한용어에서도미세하게차이를느낄수있다. 애플은상점이라는뜻인 Store 란용어를사용하고있고, 구글은장터의의미를갖는마켓이란용어를사용하고있다. 마켓이라는용어를선택한구글이좀더열린시장이라고생각된다. 안드로이드마켓이좀더개방적이라고생각되는사례는또있다. 애플에서는인터넷전화 (VoIP) 를이동통신사와의관계때문에허락하지않고있다. 반면, 구글에서는인터넷전화를이용할수있는애플리케이션이등록되어있는데, 이애플리케이션을이용하면비싼전화대신에 28
포커스 값싼인터넷전화를이용할수있다. < 표 2> 는지금까지의애플의앱스토어와구글의안드로이드마켓을비교정리한것이다. < 표 2> 앱스토어와안드로이드마켓의비교 앱스토어 비교대상 안드로이드마켓 2008 년 7 월 11 일 서비스시기 2008 년 8 월 28 일 애플 운영주체 자율적으로 애플의허락하에 애플리케이션등록 자율적으로 등록해야만가능 SDK 다운로드 누구나가능 CP와애플이 7:3 수익분배 CP 와이통사또는솔루션업체가 7:3 아이폰 2007 년 6 월 29 일 폰출시시기 구글폰 2008 년 10 월 22 일 V. 결론 WIPI 는이동통신사 (SKT, KTF, LGT) 와관계없이동일한플랫폼을사용함으로써초창기서로다른플랫폼때문에발생한문제들을해결해주었다. 대표적인것이모바일게임업체들의중복개발을막은것이다. 또한단일화된플랫폼의사용으로모바일산업보호효과역시컸다. 플랫폼의국산화와단일화로퀄컴등해외로빠져나가는로열티를줄였고, 외국산단말기의진입을제한하여삼성전자, LG 전자등국내단말기업체들이내수시장을지배할수있다. 이러한측면에서국내단말기시장보호역시성공한것으로평가할수있다. 그러나독자적인국내표준만고집하던 WIPI 는글로벌추세를제때에반영하지못하면서위기를맞게된다. 문제로지적되었던것으로는호환문제, 국내단말기제조사만의독점, 쉽지않은 WIPI 플랫폼의세계화등이있다. 그동안삼성전자, LG 전자등은 WIPI 의무화정책으로국내에서특별한보호를받고있다. 그러나 WIPI 의무화폐지로다양한외국산단말기가국내에진출하게되면, 외국업체들과치열한경쟁을벌여야만한다. WIPI 의무화폐지는단말기의무한경쟁뿐아니라그위에올라가는모바일플랫폼의치열한경쟁을초래할것이다. 그동안우리는우리만의표준에집착하여해외동향에큰관심을가지지못하였다. 그러나해외의다양한모바일플랫폼들이국내에들어올수있어, 이제는한치앞을내다볼수없는공간속으로빠져들고있다. 이렇게급변하는시대에받아들여야할것이있다면받아들여야하고변신해야할것이있다 29
주간기술동향통권 1391 호 2009. 4. 8. 면빠르게변신해야할것이다. 질좋은콘텐츠가많이유통되어야부흥할수있는모바일시장 에서는특히안드로이드마켓과같은콘텐츠유통방식은관심있게지켜봐야할것이다. < 참고문헌 > [1] AppleInsider, http://www.appleinsider.com/ [2] Open Handset Alliance, http://www.openhandsetalliance.com/ [3] What is Android?, http://code.google.com/intl/ko/android/what-is-android.html [4] 안드로이드 SDK, http://code.google.com/intl/ko/android/intro/installing.html [5] Anatomy of an Android Application, http://code.google.com/intl/ko/android/intro/anatomy.html [6] Tutorial: A Notepad Application, http://code.google.com/intl/ko/android/intro/tutorial.html http://code.google.com/intl/ko/android/intro/appmodel.html [7] Life Cycle of an Android Application, http://code.google.com/intl/ko/android/intro/lifecycle.html [8] Android Application Model: Applications, Tasks, Processes, and Threads, [9] Implementing a User Interface, http://code.google.com/intl/ko/android/devel/implementing-ui.html [10] Android Building Blocks, http://code.google.com/intl/ko/android/devel/building-blocks.html [11] 애플앱스토어, http://www.apple.com/iphone/appstore/ [12] 안드로이드마켓, http://www.android.com/market/ * 본내용은필자의주관적인의견이며 IITA 의공식적인입장이아님을밝힙니다. 30