업데이트 내용 요약:
  • iOS 4.2 버전을 지원합니다.
  • 일부 사용자에게서 다운로드된 강연 정보를 볼 수 없는 문제를 해결했습니다.
  • 일부 사용자에게서 다운로드된 강연을 재생할 수 없는 문제를 해결했습니다.
  • Best of Web 카테고리에 속한 TED 강연을 지원합니다.
  • AirPlay를 지원합니다. (단, 자막은 TV로 전송되지 않습니다)

TED+SUB 1.3 버전이 앱스토어에 등록된지 8일만에 1.4 버전을 애플에 제출했다. 지난 버전에서 일부 무시할 수 없는 문제가 발생했기 때문이었다. 결론부터 말하자면 이번에 보고된 버그들을 고치는건 그리 어렵지 않았다. 하지만 문제 상황이 내 아이폰/아이패드 환경에서 쉽게 재현되지 않아 문제의 원인, 아니 그보다 문제 자체를 파악하기가 굉장히 어려웠다. 1인 개발자가 자신의 기기를 갖고서 앱을 만들어 배포하는 건 한계가 있구나-하는 생각이 들었다.


iOS 앱은 개발 과정에서 최대 100 명까지 테스터로 등록하여 앱스토어 배포 전에 그들에게 미리 배포하여 테스트해 볼 수 있다. 이걸 ad-hoc 배포라고 하는데 나는 여태까지 ad-hoc 배포도 애플의 승인 절차가 필요한 줄 알았다. 그런데 트위터로 알게된 분께 QuickDic2를 드리고자 ad-hoc 배포를 시도해봤더니 별도의 승인 철차가 필요 없더라. 그래서 다음 버전부터는 베타 테스터를 모집해볼까 한다. (그런데 도와주실 분이 얼마나 될지가 의문이다;)


버라이즌 폰에는 설치할 수 없으므로 별 하나!

1.3 버전이 등록되고나서 처음으로 받은 리뷰의 평점은 별 한 개였다. (쪼잔하게 또 평점가지고 그러냐-할 수도 있겠지만, 성격이 그런 걸 어찌하겠는가. 아무리 시간이 지나도 이 성격은 변하지 않을 것 같다) 리뷰의 내용은 '나는 버라이즌 폰 사용자인데 TED+SUB 앱을 설치/업데이트 할 수가 없다' 였다.

나는 늘 최신 버전의 운영체제를 선호한다. 새로운 API를 이용해서 필요한 기능을 쉽게 구현할 수도 있고, 운영체제 자체의 문제가 많이 해결된 상태이기 때문에 버그가 발생할 여지가 적기 때문이다. 그래서 항상 가장 최신 버전의 운영체제에 맞춰서 개발하는 걸 선호한다.

그럼 여기서 문제 하나, 과면 최신 iOS의 버전은 몇일까요?

아마 대부분의 사람들이 4.3 또는 더 구체적으로 4.3.2 라고 대답할 것이다. 그런데 틀렸다. (사실 나는 이 부분에서 꽤 충격을 받았다) 버라이즌 아이폰 4의 iOS는 현재 4.2.x 가 최신 버전이다. 게다가 구형 아이팟 터치 역시 4.2.x 대에서 업그레이드가 중단된 상태이다.

그런고로 TED+SUB 1.4 버전은 최소 iOS 4.2 버전을 요구하도록 수정했다. 한 가지 놀라운 사실은, TED+SUB 앱의 최소 요구사항을 iOS 4.2 버전으로 바꾸는데 드는 노력이 거의 제로였다는 것이다. 그동안 나는 iOS 4.3 버전에 추가된 새로운 컴포넌트를 사용하고 있다고 생각했었는데 그게 아니었다. 충격과 공포가 텍사스 소떼마냥 우글우글 밀려왔다.


다운로드한 항목이 제대로 보이질 않아요.

몇몇 사용자로부터 다운로드한 항목이 제대로 보이지 않는다는 보고를 받았다. 이상했다. 분명 내 아이폰과 아이패드로 테스트 했을 땐 괜찮았었는데, 도대체 뭐가 문제인걸까?

모든 사람이 아닌 일부 사용자에게서만 이러한 증상이 나타나고 있었다. 이러한 경우는 문제 해결이 아주 어렵다. 이 증상이 매우 드물게 나타나는 특별한 조건 하에서 발생하는 것인지 아니면 어쩌다 한 번씩 발생하는 것인지 불분명했고, 두 케이스 모두 문제의 원인과 해결 방법을 찾기가 아주 어렵기 때문이다.

특히 이 문제 상황은 오랜 테스트에도 불구하고 내 기기에서 발생하지 않았기 때문에 무척 힘들었다. 문제 상황이 재현되질 않으니 소스 코드 전체를 장인의 정신으로 한 땀 한 땀 살펴봐야 했기 때문이다. 그런데 아무리 소스 코드를 들여다봐도 뭐가 문제인지 알 수가 없었다. 모르겠더라... 정말 모르겠더라... 이처럼 답답한 경우가 또 어디 있으랴! 

그러다가 아주 우연찮게 내 아이폰에서 동일한 문제가 발생했다. 앱을 몇 번이나 지웠다 깔았다를 반복하다가 드디어 문제 상황이 내게도 나타난 것이다. 브라보! 이제 원인을 찾을 수 있어!!

일단 문제가 재현되면 문제의 원인을 찾는 건 생각보다 쉽다. 문제 상황을 재현하는 과정에서 프로그램 내부가 어떻게 변화하는지 한 단계씩 추적하면 되기 때문이다.

그렇게해서 문제의 원인을 발견했다. 아주 의외였다. 여태까지 한 번도 고민해보지 않았던 iOS의 특성이 문제의 원인이었다.

아이폰/아이패드 앱은 각각 유일하게 구분되는 폴더에 설치된다. 그런데 이 폴더는 유일하지만 영원하지는 않다. 앱을 업데이트하거나 iOS를 업데이트할 때 앱이 설치된 경로가 바뀔 수 있다는 것이다. 특히 iOS 4.3.2 버전으로 업데이트 하는 경우, 아이튠스는 먼저 아이폰을 싹 다 밀어버리고 운영체제를 업데이트 한 뒤 백업파일로부터 앱을 복구한다. 이 과정에서 앱이 설치된 경로가 변경된 것이다. 

이게 왜 문제가 되냐면, TED+SUB 앱에서 강연을 다운로드할 때 강연의 메타 정보와 자막, 그리고 영상을 각각 파일로 저장하고 그 파일의 경로를 데이터베이스로 관리하는데 이 때 데이터베이스에 절대 경로를 저장하게 했기 때문이다. 그래서 앱의 설치 경로가 변경되면 다운로드한 강연과 관련된 파일들을 찾지 못하고 위의 그림처럼 템플릿만 나타나게 된 것이다. 

문제의 원인은 파일의 '절대 경로' 이고, 그래서 해결책은 '상대 경로' 이다. 이미 데이터베이스에 저장된 정보를 수정하는 건 또른 위험을 수반할 것 같아서 데이터베이스로부터 경로를 읽어와 작업을 수행하는 모든 코드들을 수정했다.

혹시나 이 글을 읽고 있는 개발자 중에서 어떤 파일의 '절대 경로' 를 어딘가 저장했다가 나중에 사용하는 앱을 개발한 사람이 있다면 지금 당장 '상대 경로' 를 사용하게끔 수정하길 바란다. 다시 한 번 말하는데 이 문제의 해결법은 간단하지만, 문제 상황을 재현하는건 무척이나 어렵다. 앱의 설치 경로가 바뀔 수 있다는 지식이 없는 한 문제의 원인을 찾기는 무척이나 어려울 것이다. (문제 상황을 보고 받으면 '그럴리가??' 를 연발하는 자신을 보게 될 것이다)


다운로드한 강연이 재생되지 않아요.

이건 또 무슨 문제일까. 왜 재생이 안될까? 나는 잘 되는데.... 앱을 사용하는 방법은 앱의 기능에 대해 제곱 이상으로 비례하기 때문에 기능이 많아질 수록 사용자 시나리오가 많아진다. 어떤 시나리오에 의해서 강연이 재생되지 않는건지만 알아낸다면, 즉 문제 상황을 재현할 수 있다면 문제의 원인을 찾아 해결하는건 그리 어렵지 않다. 그러기 위해선 보다 자세한 상황 정보가 필요하다. 그러나 사용자로부터 받을 수 있는 피드백은 '안돼요' 가 전부이다. 

사용자를 탓하지 마라. 앱이 비정상으로 동작하는건 전적으로 개발자 잘못이다. 사용자가 어쩌다가 그런 문제가 발생했는지 어떻게 알겠는가? 그들은 그냥 평소처럼 쓰다가 문제가 발생했을 뿐이다. 어떻게 썼냐고 물어도 기대하는 대답을 얻기는 쉽지 않다.

여러가지의 가능성을 갖고서 다양한 실험을 한 결과 문제가 발생하는 사용자 시나리오를 찾을 수 있었다. '강연을 저화질로 다운로드 받다가 일지정지하고, 다시 다운로드를 재개하면 그 영상은 제대로 재생되지 않는다' 가 그것이다.

이는 1.3 버전에서 다운로드 화질 선택 기능을 구현할 때 미처 확인하지 못한 부분이었다. 게을러서라기 보다는 수 많은 테스트를 수행하면서 '그건 이미 하지 않았나?' 하고 넘어간 것이 분명하다. 여기서 얻을 수 있는 교훈은 '테스트 시나리오를 만들어라' 쯤 되려나? 분명 굉장히 귀찮은 일이다. 테스트 시나리오가 한두 개면 괜찮겠지만 TED+SUB 정도만 해도 엄청나게 많은 사용자 시나리오가 존재하기 때문이다. 

하나의 완벽한 답은 없다. 장인의 정신으로 한 땀 한 땀 테스트 시나리오를 작성하던가, 아니면 철저히 모듈화하여 단위 테스트를 수행하는 수 밖에 없다. 안타깝게도 나는 이 두 가지 모두 취약하다. 반성하고 있다.


AirPlay는 지원 안하나요?

기술적으로 앱에서 AirPlay를 지원하는 건 아주 쉽다. 달랑 코드 한 줄만 추가하면 AirPlay가 지원된다. 그런데 안타까운건 개발자가 AirPlay에 대해 세밀하게 조작할 수 없다는 것이다.

TED 강연을 AirPlay를 이용해 애플 TV로 전송하면 강연은 TV로 나온다. (이론적으로는 그렇다. 나는 애플 TV가 없으므로 실제로 테스트해 볼 수가 없었다) 그런데 문제는 자막을 애플 TV로 전송할 방법이 없다는 것. 뭘 그 정도 가지고.. 그냥 지원하면 되잖아요? 라고 생각하는 사람들도 많겠지만 나로서는 이게 꽤 심각한 문제였다. 사용자 경험의 일관성이 깨지기 때문이다.

TED+SUB은 1.3 버전부터 외부 비디오를 지원하기 시작했다. 아이패드에 비디오 케이블을 연결하면 영상과 자막을 외부 디스플레이로 전송하게끔 구현한 것이다. 그런데 애플 TV로는 영상만 전송될 뿐 자막이 전송되지 않으니 사용자는 TV와 아이폰/아이패드를 번갈아 볼 수 밖에 없다. 이런 모습이 나는 너무나 이상했다.

사실 AirPlay에 대한 고민은 1.3 버전을 준비하면서부터 시작되었다. 고민의 고민을 거듭하다가 결국 1.4 버전에서 AirPlay를 지원하기로 결정했다. 모든 TED+SUB 사용자가 자막을 이용하진 않을 것이다-라는 생각을 하게 된 것이다. 그런 경우라면 강연을 애플 TV로 전송해도 문제가 될 것이 없을 것 같았다.

하지만 애플 TV를 갖고 있으면서 자막이 반드시 필요한 사람들에게는 분명 좋지 않은 평가를 받게 될 것이다. 사용자는 기술의 한계에 대해 잘 모른다. 너무나 당연하게 생각되는 기술이 실제로는 구현하기 어렵거나 불가능하다는 사실을 그들은 모른다. 이는 사용자 탓이 아니다. 이에 대한 적절한 트레이드-오프는 전적으로 개발자 책임인데 이도저도 안될 것 같으면 그냥 어느 한 쪽을 빡! 하고 질러버리는게 답이지 않을까 싶다. 미리 걱정해봤자 무슨 소용이 있겠는가. 


Best of Web 카테고리 지원

TED+SUB을 이용해 스티브 잡스의 졸업 축사를 보려고 한 사람들은 'Determining....' 이라는 문구만 계속해서 보일뿐 영상을 볼 수 없었을 것이다. Best of Web 카테고리에 속한 영상들이 다 그렇다. 이 영상들은 TED 서버에서 제공되는 게 아니라 유투브 영상을 링크했기 때문이다. 1.3 버전까지 TED+SUB은 유투브 영상을 지원하지 않았다.

앞서 살펴본 다운로드 관련 문제를 해결하기 위해 머리를 굴리던 나는 너무 지쳐서 다른 걸 시도하면서 꽉 막힌 머리를 좀 식혀야겠다는 생각을 헀다. 그러던 와중에 때마침 트위터로부터 날아온 멘션 하나 '스티브 잡스 강연을 볼 수 없어요' 그래, 이 참에 이거나 한 번 해결해보자!

iOS 개발킷에는 개발자가 마음대로 조작할 수 있는 유투브 재생 컴포넌트가 없다. 유투브 영상을 재생하기 위해서는 1) 유투브 앱으로 위임하거나 2) 웹페이지로 취급해서 읽는 방법이 전부이다. 첫 번째 방법은 TED+SUB이 종료되고 유투브 앱이 실행되므로 다소 번거롭다. 하지만 유투브 앱을 통해 영상에 대한 댓글들을 볼 수 있고, 관련 영상들을 추가로 볼 수 있으며, 구글 계정을 이용해 즐겨찾기로 등록할 수 있다는 장점이 있다. 두 번째 방법은 TED+SUB 내에서 영상이 재생되므로 앱의 사용자 경험을 지속할 수 있는 반면 웹페이지로 다뤄야하므로 세밀한 조작이 어렵다는 단점이 있다.

다운로드 관련 문제가 쉽게 풀리지 않은 덕에 나는 위의 두 가지 방법을 모두 구현했다. 웹페이지로 취급했을 때 원치 않는 스크롤 기능 때문에 난감했는데 약간의 검색을 통해 UIWebView의 스크롤 기능을 꺼버리는 기술을 알게 되었고 그래서 그럭저럭 의도한 모습으로 구현할 수 있었다. (아쉬운 점이라면, 아이패드용은 내가 의도한 모습 그대로인 반면 아이폰용은 좀 더 이렇게 했으면- 하는 상태에서 더 이상의 진전이 불가능했다는 것. 이 역시 기술의 한계이므로 개발자를 너무 탓하지 말자)


이제 트위터 공유시 기본으로 #TED_SUB 태그가 붙습니다.

페이스북은 개발자 도구가 꽤 좋은 편이다. 몇 명이 페이스북으로 강연을 공유하는지, 그런 사람들의 연령별 분포가 어떻게 되는지, 얼마나 많은 강연이 공유되고 그렇게 공유된 강연이 얼마나 보여지고 있는지 쉽게 알 수 있다.  


하지만 안타깝게도 트위터는 그렇지 않은 것 같다. 어떠한 통계도 볼 수 없다. 나는 얼마나 많은 사람들이 TED+SUB을 이용해서 TED 강연을 공유지가 갑자기 궁금해졌다. 

그래서 트위터 공유 시 #TED_SUB 이라는 태그가 기본으로 붙게끔 코드를 수정했다. (물론 원한다면 트윗하기 전에 내용을 편집하여 태그를 지울 수 있다) 그러면 트위터 검색을 통해 얼마나 많은 사람들이 TED+SUB을 통해 강연을 공유하는지 볼 수 있을테니까. 

이것은 홍보 효과도 있을 것 같다는 생각이 들었다. 저 태그가 대체 뭘 의미하는 걸까?-하고 찾아보는 사람들이 있지 않을까?


여담

마음이 무척 불편한 한 주였다. 소소한 문제라면 조금이나마 괜찮았을텐데 이번에 보고된 문제들은 그 정도가 매우 심각했기 때문이다. 특히 이번 문제들은 문제 자체를 정확하게 파악하는데 너무 고생해서 평소보다 고생을 더 많이 했다. 그리고 그렇게 문제와 그 원인을 찾는 동안 매번 트위터 검색을 통해 사용자들의 반응을 살폈다. 또 누군가 이러한 문제들로 고생하고 있진 않을까-하고 말이다. 음, 솔직히 말해서 고생하는 사람들 보다도 욕하는 사람들이 있진 않을까 하는 마음이 더 컸다.

사람이 왜 그리 소심해요? 

소심해질 수 밖에 없다. 자식이 밖에서 안 좋은 소리를 듣는건 아닌지 걱정하는게 부모의 마음 아니겠는가. 아무리 엉성해 보이는 앱이라도 그것을 직접 개발한 개발자 입장에서는 남 부럽지 않은 자식이다. 자식을 욕하느니 개발자를 욕해주세요-라고도 말 못한다. 행여나 날 욕하는 사람이 있다면 어떻게든 찾아내서 '니가 한 번 해봐 이 자식아!' 라고 말해줄거다. (마지막 문장은 진심이 담긴 농담인거 아시죠?)

자막이 되는 TED 앱을 만들어야지- 하고 기획했던 대부분의 기능들이 얼추 갖춰진 것 같다. TED 공식 웹에서 앞으로 개발자를 위한 API를 열어주겠다고는 했지만 그게 언제가 될 지도 모르고, 그래서 현 시점에서는 여기까지가 기술의 한계인 것 같다. 

이제부터는 여기에 TED+SUB 고유의 아이덴티티를 부여할 수 있는 무언가를 추가하고 싶다. 공식 웹이나 앱에서 제공되지 않는 그런 무언가를 추가하고 싶다. 며칠 전에 한 가지 아이디어가 떠올랐는데 여친님께서 그건 앱의 목적과 취지에 부합하지 않는 것 같다며 반대했다. 다른 사람들은 어떻게 생각하는지 궁금해서 아래 적어본다.

게임 센터와 연계: (단 아래의 시나리오는 기술의 난이도 및 한계를 고려하지 않음) 

TED 강연을 볼 때마다 일정한 보상을 제공한다. 생각해 볼 수 있는 보상은 '점수' 와 '업적' 이다. 점수는 하나의 강연을 볼 때마다 부여된다. 업적은 퀘스트를 달성했을 때 부여된다. 퀘스트의 예로는, '여기 나열된 강연을 모두 볼 것', '하루 2 개의 강연을 볼 것', '3 개의 강연을 소셜 네트워크 서비스로 공유할 것' 등이 있다. 사용자는 업적과 점수에 의해 평가되며 높은 평가점을 받으면 게임 센터에 의해 순위권 목록에 보여진다. 

게임 센터를 통해 업적별 통계를 낼 수 있다면 그 정보를 근거로 인기있는 강연들을 파악한다. 그래서 이 정보를 토대로 강연 추천 시스템을 개발한다. 

사용자는 이 기능을 통해 무형의 보상을 받게 되며, 포스퀘어와 유사하게 이러한 보상 시스템은 사용자로 하여금 좋은 강연을 더 찾아 보게끔 유도할 수 있다. 





  
신고

CATEGORIES

티스토리 툴바