본문 바로가기

안드로이드 이야기/안드로이드 생각

안드로이드의 파편화(Fragmentation)에 대한 오해와 진실

이 문제는 예전부터 꾸준히 제기되어오던 문제긴 하지만, 최근 와서 비정상적으로 이슈가 되고 있는 것 같아 한번 그 내용을 정리해볼까 합니다.

먼저, 파편화(Fragmentation)의 정의가 무엇인가부터 알아보겠습니다.

안드로이드의 파편화는 두 가지로 나뉩니다. 하나는 다양한 제조사 및 통신사로 인한 OS의 파편화, 다른 하나는 다양한 안드로이드의 버전에 따른 버전 파편화입니다.

우선, 버전 파편화는 사실 큰 문제가 되지 않는다 봐도 무방합니다. 인터넷에서 안드로이드 버전이 너무 빨리 변해서 하위 버전에서는 상위 버전을 지원하지 못한다는 말을 하시는 분이 좀 있던데, 이 분들이 과연 실제로 안드로이드 개발을 해보신 분인지 궁금합니다.

저는 안드로이드 SDK 1.0이 나왔을 때부터 안드로이드를 공부하기 시작했으며, 그 때부터 지금까지 애플리케이션을 만들어오면서 버전 때문에 골머리를 앓은 것은 1.6~2.0버전 사이였던 것 같군요.

안드로이드 초기 버전부터 1.6버전까지는 사실상 완전한 안드로이드라 부르기는 애매하고, 2.0 이상부터 어느 정도 안정화된 안드로이드라 할 수 있습니다. 많은 사람들이 비교하는 iOS가 처음부터 완벽한 상태로 나왔던 것과는 다른 형태이죠. 그리고 사실상 1.6 버전만 해도 멀티미디어 관련 API가 많이 정리되지 않았을 뿐, 일반적인 애플리케이션을 작성하는 데에는 거의 문제가 없다고 봐도 무방합니다.



위는 2010년 10월 기준으로 안드로이드 마켓에 접속하는 기기들의 버전 분포를 나타낸 표입니다. 이미 예전부터 안드로이드 2.0 이상을 탑재한 단말들이 대다수를 차지하고 있으며, 최근에는 프로요 탑재 단말의 본격적인 출시로 인해 2.0버전 이하 단말들이 차지하는 폭이 상당히 줄어들었습니다.

즉, 버전별 호환성 문제를 야기할 수 있는 구버전 단말들의 비중이 점점 줄어간다는 것을 뜻합니다. 이는 OS버전에 따른 파편화 문제가 이제는 의미가 거의 없어진다는 것을 의미합니다. 2.0 이하 버전과 2.0 이상 버전간의 OS 차이는 애플리케이션의 기능 하나를 추가하느냐 마느냐를 결정할 정도로 컸지만, 2.0 이상 버전부터는 각 버전마다 새로운 기능이 추가될 뿐, 치명적으로 다른 부분은 거의 없습니다. 

새로운 버전에서 추가되는 기능은 구버전 단말에서 몼쓰지 않느냐? 라는 질문을 하시는 분도 계시겠지만, 그 말은 어찌 보면 윈도 7에서 돌아가는 프로그램이 왜 윈도 95에서는 안돌아가느냐라고 하는 것과 똑같습니다. 새 버전이 나오면 새 버전이 하위 버전에 대한 호환성을 제공하는 것은 당연하지만, 그 반대는..... 가능한 것이 더 이상한 것 아닌가요?


다음으로 문제가 되고 있는 OS 파편화에 대해 알아보겠습니다. 안드로이드는 여러 제조사에서 탑재하다 보니 제조사마다 안드로이드를 커스터마이징하여 표준 안드로이드에서는 제공하지 않는 기능들을 제공하기도 합니다. (예 : 영상통화, 전면 카메라 사용 등) 이러한 것들은 안드로이드 내에 "표준" 자체가 없다 보니 생길 수 밖에 없는 문제이고, 앞으로 안드로이드가 업데이트 되면서 이러한 기능들에 대한 표준을 제공하면 이 문제는 간단히 해결되리라 생각합니다.

하지만 다른 문제, 이미 표준으로 정해진 항목을 지키지 않아 호환성 문제가 발생하는 것이 큰 문제입니다. 다른 문제는 잘 모르겠지만, 특히 국내에서 SKT쪽으로 발매하는 안드로이드 단말의 SMS 저장소 및 전송 방식이 세계 표준인 OMS와 맞지 않아 안드로이드의 API를 사용해서 정보를 제대로 가져오지 못하는 현상이 발생하고 있습니다.

사실, 이 문제는 제조사 보다도 통신사 쪽의 문제가 더 커 보입니다. 자기네 방식만 고집하다가 갈라파고스가 된 사례에서 교훈을 얻지 못한 것일까요? 답답하기만 합니다.

그리고 또 하나, 멀티미디어 쪽의 호환성 문제도 있습니다. 대부분의 호환성 문제는 멀티미디어 쪽에서 발생한다고 봐도 무방합니다. 동일한 코드를 작성해도 넥서스원이나 모토로이 같은 표준에 맞춘 단말에서는 잘 돌아가는데, 갤럭시S에서는 돌아가다가 단말기가 멈추고, 제대로 동작하지도 않는 현상이 많습니다.

이 부분의 표준이 어떻게 정해져 있는지 자세하게는 모르겠으나, 현 시점에서 이 부분에 대한 표준을 강화하여 CTS(호환성 검사)에 한시라도 빨리 적용해야 하지 않을까 싶습니다.


오래간만에 장문의 글을 쓰니 뭔가 뒤죽박죽 정리가 잘 되지 않은 느낌입니다. 글을 간단하게 요약하자면......

  • OS 버전 파편화는 심각한 문제가 아니고, 실제로 미치는 영향도 매우 적음, 그리고 당연한 현상이다
  • 다양한 제조사로 인한 OS 파편화에 따른 문제는 일부 부분에서 심각한 호환성 문제를 가지고 있다. 이는 안드로이드 자체에 해당 항목에 대한 표준이 없어서 그런 것이며, 이 부분에 대한 표준 제정 및 CTS 강화를 통해 파편화를 줄여야함

정도로 요약할 수 있겠군요. (그냥 위 두 항목만 써도 되었으려나요;;;;)