작성일: 2010년 11월 9일 화요일

안드로이드 마켓에는 매주 수 천 개의 새로운 앱이 출시되고 있습니다. 이로 인해 앱의 혼잡현상을 헤쳐나갈 사전 대책이 점차 중요해지고 있습니다. 자신의 앱이 마켓이란 생태계에서 눈에 더욱 띄게 하는 한가지 방법은 적절한 타깃팅의 모바일 광고와 앱 연동 프로모션을 활용하는 것입니다. 그러나 ‘임프레션-설치-랭킹’이라는 앱의 소비 사이클을 가속화하기 위한 증명된 방법이 하나 있습니다. 바로 앱의 품질을 높이는 것입니다.

좋은 앱일수록 오래 갑니다. 품질이 높은 앱일수록 일반적으로 사용자 평가, 랭킹, 다운로드, 설치기간에서 높은 점수와 연결됩니다. 고품질의 앱은 안드로이드 마켓이나 소셜 미디어에 소개되는 것과 같은 예기치 않은 주목을 받을 가능성도 높습니다.

고품질 앱의 장점은 두말할 나위가 없습니다. 그러나 ‘더 좋은 앱’은 이것이다 라고 정의하기는 쉽지 않습니다. 앱의 퀄러티를 높이는 길은 누구나 알만큼 쉬운 것이 아닙니다. ‘품질 (Quality)’란 말과 이 단어의 사촌뻘인 ‘polish(윤택)’, ‘fit and finish(다듬고 마무리하기)’는 항상 정확하게 설명되지도 않습니다. 이번 글에서는 앱의 품질을 높이는 두 가지 핵심 요소를 살펴보고 이에 따른 여러분의 앱을 향상시키기 위한 구체적인 방법에 대해 알아보겠습니다.

사용자의 의견을 반영해라.

어떤 앱이라도 그 ‘성공’의 기준은 다운로드 횟수, 일일 실행횟수, 설치기간과 같이 사용자와 관련된 수치로 측정할 수 있습니다. 따라서 앱의 품질을 논의할 때는 사용자와 연계시켜 생각하는 게 좋습니다.

사용자 중심을 실천하는 가장 확실한 방법은 안드로이드 마켓에 있는 사용자 댓글을 읽고 문제점을 찾는 것입니다. 물론 댓글이 항상 생산적이거나 건설적인 것은 아닙니다. 그러나 일부 댓글은 개발자가 미처 생각하지 못했던 면을 예리하게 짚어주기도 합니다. 앱의 순위와 댓글을 좌우하는 것은 결국 사용자라는 점을 유의해야 합니다.

안드로이드 마켓은 개발자와 사용자가 양방향 커뮤니케이션을 할 수 있는 수단이 아니기에 개발자 스스로 사용자 지원/논의 목표를 세우는 게 좋습니다. 이를 위해 Google Groups, Zoho Discussions, getsatisfaction.com, uservoice.com과 같이 사용자들과 바로 연결할 수 있는 좋은 툴이 있습니다. 이러한 툴을 설치할 경우 사용자가 바로 클릭해 들어갈 수 있게 안드로이드 마켓 정보 안에 링크를 반드시 걸어야 합니다.

사용자 의견을 듣는 또 다른 방법은 오픈 베타 또는 클로즈 베타 테스트를 이용하는 것입니다. 마켓에 올리기 전에 어느 정도 실사용자 테스팅을 실시하는 게 매우 중요합니다. 다행히 개발자는 마켓이 아닌 웹사이트를 통해 앱을 외부에 배포할 수 있습니다. 이러한 웹사이트는 로그인을 요구할 수도 있으며, 공개적으로 접근할 수 있도록 할 수 있습니다. 이는 전적으로 개발자 여러분께 달려 있습니다. 마켓에 올리기 전에 다음 번 업데이트 계획 등을 얼리어답터에게 알림으로써 이런 웹사이트를 활용할 수 있습니다. 클라우드소싱(crowd sourcing)과 실사용자 테스팅은 얼핏 미미해 보이지만 앱 품질을 높이는 데는 놀랄 정도의 효과가 있습니다.

앱의 안정성을 높이고 버그를 제거해라.

사용자의 의견 청취가 왜 중요한지는 더는 말씀드리지 않겠습니다. 두말할 나위기 없기 때문입니다. 이 글을 통해 확실한 아이디어를 얻고 기존에 설명드린 좋은 예들을 통해 앱 품질을 높이는 방법을 확실히 이해하셨으면 합니다.

앱 충돌과 같은 안정성 문제를 도와주는 툴로는 상대적으로 잘 쓰이지는 않지만 주목할 만한 툴로 UI/Application Exerciser Monkey (간단히 말하면 몽키)가 있습니다. 몽키 툴은 랜덤 UI 이벤트를 개발자의 앱에 활성화시켜 사용자 패턴 변화를 통해 안정성 문제를 노출시켜 줍니다.

또한 안드로이드 2.2에는 새로운 에러 보고 기능(error reporting features)있어 사용자가 개발자에게 앱 충돌 사항을 알릴 수 있습니다. 이러한 기능은 안드로이드 마켓 개발자 콘솔 부분에 포함돼 나타납니다. 개발자는 이러한 보고를 읽어보고 적절한 조치를 취해야 합니다.

마지막으로 외부 버그와 기능 요구 트래커에 유의해야 합니다. 사용자에게 영향을 주는 기능과 버그를 트래킹하면 사용자가 앱 개발 과정에 더욱 가깝게 참여할 수 있도록 할 수 있습니다. 부지런히 문제를 트래킹하고 사용자분들과 소통하면 앱 문제에 대한 사용자 불만을 효과적으로 관리할 수 있습니다. 앞서 예를 든 일부 커뮤니티 지원 툴은 이러한 트래킹 기능을 지원하며, 만약 개발자의 프로젝트가 오픈소스라면 Google CodeGitHub와 같은 인기있는 저장소 호스팅 사이트도 이러한 기능을 지원할 것입니다.


UI 응답성을 높여라.

사용자를 불편하게 하는 확실한 요인은 UI의 느린 속도입니다. 조사에 따르면 데스크탑, 웹, 모바일 등 어떤 기기든지 간에 인터페이스의 속도가 중요하다고 합니다. 사실 이러한 속도의 중요성(speed matters)은 사용자가 대부분 이동 중이거나 급하게 정보를 요구할 수 있는 모바일 기기에 더욱 나타납니다.

브래드 피츠패트릭(Brad Fitzpatrick)이 구글 개발자 회의(Google I/O 2010)의 세션 Writing Zippy Android Apps에서 설명한 것처럼 개발자는 애플리케이션 메인 쓰레드에서 오래 수행되는 동작을 이전시켜 앱의 UI 응답성을 향상시킬 수 있습니다. 자세한 추천내용과 디버깅 정보는 발표내용을 참조하시기 바랍니다.

UI 퍼포먼스를 향상시킬 수 있는 한 가지 방법은 레이아웃의 복잡함을 최소화하는 것입니다. hierarchyviewer를 열었을 때 레이아웃이 5 레벨 이상이면 레이아웃을 단순화할 시점이 된 것입니다. 이 때는 LinearLayouts을 RelativeLayout으로 리팩터링(refactoring)하는 것을 고려해야 합니다. 로메인 가이(Romain Guy)가 개발자 회의의 World of ListView 발표에서 지적한 대로 뷰 오브젝트는 약 1~2 KB의 메모리를 차지합니다. 따라서 복잡한 뷰 계층은 빈번한 VM 가비지 컬렉션을 발생시켜 메인 UI 쓰레드를 멈추게 하는 끔직한 상황을 만드는 원인이 됩니다.

마지막으로 Traceview War Story에서 팀(Tim)이 지적한대로 raceview와 ddms에 익숙해지면, 성능을 향상시키기 위해, 메서드 호출을 profiling하거나 VM메모리 할당을 모니터링하는 데 활용할 수 있습니다.


추가 자료:
Designing for Performance
Designing for Responsiveness

사용성을 높여라.

여기서 거듭 사용자의 의견을 경청하라고 말씀드립니다. 친구나 가족 등 가까운 사용자들에게 자신의 앱을 사용해 보게 하고 반응을 지켜봅니다. 이들이 어디에서 당황하는지, 잘 모르는 것이 무엇인지, 그리고 놀라워하는 곳이 어디 인지를 찾아봅니다. 이러한 상황을 통해 앱의 상호작용을 재고해 봄으로써, 이러한 상황 발생을 최소화시켜 나갑니다. 개발자회의에서 안드로이드 UI 팀이 논의했던 사용자 인터페이스 패턴(user interface patterns) 중 일부를 이행해 보는 것도 도움이 될 것입니다.

같은 맥락에서 최근 안드로이드 사용자 인터페이스와 관련한 두 가지 문제는 작은 탭 타깃과 너무 작은 폰트 사이즈입니다. 이러한 문제는 일반적으로 고치기 쉽고 큰 효과를 낼 수 있습니다. 일반적인 법칙은 사용하기 편리하게 하고 쉽게 알아볼 수 있도록 가독성을 높이는 것입니다. 동시에 정보 밀도를 최소화하거나 균형을 잡아주는 것입니다.

사용성을 더욱 높이는 또 다른 방법은 특정 부분의 로그를 사용하는 Analytics의 실제 데이터에 근거하여 실행하는 것입니다. 사용빈도가 낮은 부분은 options menu로 내리거나 아예 제거하는 것을 고려합니다. 사용 빈도가 높은 부분은 UI 요소를 즉각적으로 알 수 있고 쉽게 이용할 수 있도록 해야 합니다. 사용자가 이를 통해 빠르게 접근할 수 있도록 해야합니다.

마지막으로 사용성은 인터페이스 디자인, 인지과학, 기타 분야와 밀접한 관련이 있는 광범위하고 잘 입증된 주제입니다. 이와 관련한 특강이 필요하실 경우 도널드 노만(Donald Norman)의 The Design of Everyday Things로 시작하시면 좋습니다.

모습과 미적인 아름다움을 개선해라.

모바일과 안드로이드를 잘 이해하고 비주얼 디자인에 능숙한 디자이너를 대체할 만한 존재는 없습니다. 디자이너에게 인기가 높은 블로그 중 하나는 jobs.smashingmagazine.com인데 트위터와 링크드인(LinkedIn)과 같은 소셜 커넥션을 활용하면 뛰어나 인재를 구할 수도 있습니다.

UI 디자이너를 구할 여력이 없다면 개발자 스스로 앱의 모습을 향상시킬 몇 가지 방법이 있습니다. 먼저 어도비 포토샵, 어도비 파이어웍스 등 이미지 편집툴과 친숙해야 합니다. 픽셀을 다루는 기술을 마스터하는데는 시간이 걸립니다 그러나 이러한 기술을 연마하면 앱의 인터페이스를 더욱 세련되게 만들 수 있습니다. 또한 framework UI를 학습하고 새로 resources documentation을 읽어보면서 resources framework를 마스터할 수 있습니다. 9-patches나 resource directory qualifiers와 같은 기술은 안드로이드에서는 특별한 것으로 유연성이 있고 뛰어난 UI를 구축하는데 매우 중요합니다.

최근 나온 Android UI Design Tips 슬라이드 덱은 참고 가능한 최신 사례가 더 많이 포함돼 있습니다.

꼭 맞는 기능을 전달해라.

자신의 앱에 꼭 맞는 기능을 담는 게 중요합니다. 이런 저런 기능을 담다 보면 앱이 지저분해 보일 수 있습니다. 가장 중요하거나 적절한 정보를 바로바로 보여줌으로써 사용자의 입맛과 요구를 즉각 충족시켜주는 것은 모바일 기기에서 매우 중요합니다. 너무 많은 정보를 제공하면 충분히 제공하지 않는 것보다 더 불편할 수 있습니다.

그리고 거듭 말씀드리면, 사용자의 기능 요구를 수집하고 적절한 조치를 취하면서 사용자 의견에 경청해야 합니다. 하지만 사용자의 기능 개선 요구는 적절하게 판단하여 듣는 게 중요합니다. 요구사항을 전체적으로 보면서 어떤 기능을 중시할 지 파악하는 게 유용합니다. 따라서 모든 기능 요구를 이행할 필요는 없습니다.

시스템과 다른 앱을 통합해라.

즐거운 사용자 경험을 주기 위한 좋은 방법은 운영시스템과 완벽하게 통합하면 됩니다. app widgets, live folders, global search integration, Quick Contacts badges와 같은 기능은 이러한 점에서 매우 수월한 툴입니다. 일부 앱 카테고리에서는 앱 위젯과 같은 기본 특징들은 기본적으로 제공됩니다. 이들을 포함하지 않게 되면 다른 긍정적인 사용자 경험을 손상시키는 지름길이 될 것입니다. 일부 앱은 안드로이드 2.0 이상에서 더욱 새로운 contacts, 계정, sync APIs가 가능해 이들과 함께 더욱 확실하게 운영시스템 통합을 달성할 수 있습니다. 이들 API를 사용하는 방법은 SampleSyncAdapter (SDK 샘플과 함께 제공)와 JumpNote에서 몇 가지 샘플을 볼 수 있습니다.

다른 앱과의 통합은 사용자에게 더 큰 기쁨을 줄 수 있고 기기에 대한 신뢰성을 갖게 할 수 있습니다. 또한 (다른 앱의 작동을 통해) 특정한 추가 코드 없이 개발자의 앱에 기능을 더할 수 있는 정말 좋은 방법입니다. 예를 들어 카메라 관련 앱을 만들 경우, 사용자가 다른 앱을 설치했다면, 사용자가 자신의 사진을 저장하기 전에 Photoshop Express에서 편집하도록 할 수 있습니다. 이에 관한 자세한 정보는 Can I Use this Intent? 글을 참조하시기 바랍니다.

추가 자료:
Designing for seamlessness

디테일에 주목해라.

디테일에 관해 말씀드릴 사항은 아이콘의 퀄러티와 일관성입니다. 앱 아이콘(특히 실행아이콘)은 모든 해상도에서 간결하고 픽셀에 문제가 없어야 합니다. 그리고 최소한 형식보다는 내용이라도 아이콘 가이드라인(icon guidelines)을 지켜야 합니다. 만일 아이콘을 디자인하는데 문제가 있거나 리소스가 없다면 새로운 Android Asset Studio 툴(최근 오픈소스된 프로젝트)을 이용해 아이콘 세트를 생성해 보시기 바랍니다.

마지막으로…

이 블로그와 함께 트위터의 @AndroidDev도 팔로우하시기 바랍니다. 저희는 어디에서도 찾아볼 수 없는 안드로이드 앱 개발에 대한 팁과 방법을 끊임없이 수집하고 공유하고 있습니다. 물론 주저하지 마시고 Stack Overflow와 Google Groups에 있는 서포트 포럼에 질문을 해주시기 바랍니다.

작성자: 팀 브레이(Tim Bray)