TED+SUB 은 아이패드/아이폰/아이팟 터치에서 TED 강연을 자막과 함께 시청하게 하는 유니버셜 무료 앱이다. TED 는 기술과 엔터테인먼트, 디자인과 관련된 다양한 주제로 매년 강연을 하는데 이 강연은 공식 웹사이트나 공식 앱으로 시청할 수 있다. 애플의 기기는 플래시를 지원하지 않아 자막을 볼 수 없는데 이 문제를 해결한게 바로 TED+SUB 이다.

 
업데이트 주기가 너무 짧은게 아닌가 싶은 생각이 들 때가 있다. 그게 언제냐면 바로 지금, 이렇게 블로그에 글을 쓸 때이다. 어쩌다보니 블로그엔 온통 TED+SUB 업데이트 관련 글밖에 없다; 참으로 난감한 상황. 이러려고 만든 블로그가 아닌데 말이다. 그래도 단순히 '이런 기능이 추가되었습니다' 식의 공지가 아닌, 그 동안의 경험을 공유하고자 하는 글이기 때문에 위안을 삼는다. 제목을 좀 바꿔볼까하고 이리저리 손을 보다가 그냥 두었다. 

(블로그에 글을 쓰는게 언제부턴가 참 힘든 일이 되어버렸다. 글 하나 작성하는데 한두 시간은 기본으로 걸리고 때때로 하루 이상을 소모하기 때문이다. 게다가 페이스북이 워낙 또 편해서; 앞으로 짧은 생각은 페이스북 페이지나 텀블러를 이용해볼까 생각 중이다)

현재 TED+SUB은 약 23 만 다운로드를 기록하고 있고, 하루에 약 1500 명이 다운받고 있다. 그런데 나는 이 숫자가 큰 건지 작은 건지 잘 모르겠다. 무료 앱이니까 그냥 한 번 받아나 볼까? 하는 사람들이 대부분일지도 모르기 때문이다. 자극적인 타이틀과 아이콘만 있으면 천만 다운로드도 쉽지 않을까? 하는 생각도 들었다. 그래서 이젠 다운로드 숫자에 의미를 부여하지 않을 생각이다. 하지만 ProMan은 유료앱이기 때문에 계속 다운로드 숫자에 민감할 수 밖에 없는데, 일주일에 많아야 3 개 정도 나가는 앱이라서 민감해지기가 힘들다; 올 해도 개발자 등록비 만큼은 건져야 하는데...

아, 하지만 앱스토어 리뷰에는 굉장히 민감하다. 최소한 그 사람들은 다운 받아서 사용을 해 봤다는 거니까.


백그라운드 다운로드 지원

초기 버전부터 지속적으로 요청받은 기능이 무언가 하면, '백그라운드로 다운로드가 가능하게 해 주세요. 다운로드 받는 동안 다른 작업을 할 수가 없어서 너무 불편합니다'. 이를 여태 지원하지 않은 개발자의 고집, '기계가 보이지 않는 곳에서 사용자 몰래 작업하는 건 옳지 못하다'. 

하지만 이건 제품에 전혀 도움이 되지 않는, 오히려 해가 되는 개발자의 게으름과 똥고집이었을 뿐.

뭔가를 만들어내는 아티스트라면 항상 생각해야 할 대상이 자신의 이상도 이론도 아닌 최종 제품이어야 한다는 결론에 도달했다. 너무 결과론적이어서 다소 거부감이 들지도 모르겠지만, 최종 제품에 대한 집중이야말로 개발자에게 가장 중요한 것이 아닌가 싶다.

똥고집을 접고 최종 제품에 집중하니 이 기능은 아주 기본적인, 필수 요소라는 생각이 들었다. 왜 이제까지 지원하지 않았을까 싶을 정도로 말이다. 한 번도 백그라운드 작업을 시도해본적 없는 나에게 이는 새로운 과제였다. 시작은 언제나 구글링, 책을 찾는 것보다 구글링하는게 더 빠르고 실용적인 대답을 얻을 수 있다. 그런데 구글링 결과를 보고 놀랬다. 다섯 줄도 안되는 코드 만으로 백그라운드 작업이 가능하다고 설명하는데 이게 정말 그런가?

iOS 에서의 백그라운드 작업은 아주 간단한 원리로 동작한다. 어떤 작업이 백그라운드에서도 동작하게 하려면 '백그라운드 작업 숫자'를 하나 증가시킨다. 그리고 작업이 다 끝나면 반드시 그 숫자를 하나 줄여야 한다. 이게 전부다! 앱을 사용하다가 홈버튼을 눌러서 앱을 종료하거나 두 번 눌러서 다른 앱으로 이동하면 iOS는 현재의 앱을 일시 중지 상태로 전환시키는데 이 때 백그라운드 작업 숫자가 0 보다 크면 일정 시간동안 살려둔다. 멀티태스킹이 이렇게나 간단한 방법으로 동작한다고! 기존에 작성된 코드를 변경하지 않고 앞뒤로 숫자를 올리고 내리는 몇 줄의 코드만 삽입하면 되는 이 방법은 정말 단순하면서도 매력적이다. 

이제 TED+SUB 으로 동영상을 다운로드 중일 때 앱을 종료해도 다운로드가 지속된다. 다른 앱을 띄워서 사용하던지, 아니면 그냥 잠금 상태로 두어도 다운로드가 지속된다. 하지만 인터넷이 도중에 끊기거나, 3D 게임 같이 다소 용량이 큰 앱을 띄우는 바람에 메모리 부족 현상이 발생하면 다운로드가 중지될 수 있다.


검색 기능 강화

지난 버전까지는 두 단어 이상의 검색어를 한 단어로 취급하는 바람에 제대로 된 검색 결과를 표시하지 못했다. 이는 TED 공식 웹사이트의 문제가 아니라 전적으로 내 책임이다. 


TED+SUB 은 TED 웹사이트로부터 강연 목록을 취득하여 자체 데이터베이스를 구축한다. 이렇게 한 이유는 지난 게시물에서도 언급했듯이 공식 웹사이트에서의 검색 결과는 강연 이외의 것들을 포함하고 있고, 다국어 검색이 불가능하기 때문이다. 나는 영어 뿐만 아니라 설정한 자막 언어로도 검색이 가능하게 하고 싶었다. 그래서 자체 데이터베이스를 구축한 것이다.
 
이렇게 구축한 데이터베이스에 질의하는 과정에서 나는 별 생각없이 입력한 검색어를 있는 그대로 포함하는 강연 목록을 만들게끔 검색 알고리즘을 작성했다. 그렇다보니 여러 단어를 입력하면 그걸 하나의 단어로 취급하는 바람에 원하는 검색 결과가 나오지 않았다. 

이번 버전에서는 사용자가 여러 단어를 입력하면 각각의 단어를 따로 처리하여 그것들을 모두 포함하는 검색 결과를 생성한다. 


음소거 상태 시 경고창 표시

아직까지도 문의 받고 있는 내용 중 하나, '소리가 안나와요'. 기기가 음소거 모드일 때 해드셋을 연결하지 않는 한 소리는 재생되지 않는다. (이 때 볼륨 컨트롤러도 나타나지 않는다) 이건 iOS SDK 의 고유 기능이다. 그리고 이에 대해 많이 고민한 결과 그렇게 동작하는게 맞나는 결론에 도달했다. 음소거 상태에서도 소리가 재생되게 할 수는 있다. 그러나 그렇게 하면 안된다고 생각한다. 음소거는 사용자의 의지가 담긴 기기 조작의 결과이다. 함부로 소리를 재생하는 건 그들의 의지를 꺾는, 나쁜 사용자 경험을 초래한다고 생각한다.

그런 이유로 여태 버텨왔는데 최종 상품의 관점에서 봤을 때 이는 문제가 있었다. 뜸하지만 이렇게 사용자의 불평이 온다는 것은 분명 사용자 인터페이스에 문제가 있다는 신호이다. 자, 그럼 이걸 어떻게 해결한다?

나는 아주 간단한 방법으로 이 문제를 해결하고 싶었다. 그래서 구글링하여 음소거 상태를 판단하는 알고리즘을 찾았다. 이 알고리즘을 이용하면 사용자 기기가 음소거 상태이면서 해드셋을 연결하지 않고 있음을 확인할 수 있다. 나는 이것을 이용해서 소리가 재생되지 않는 상황일 때 미리 사용자에게 경고창을 보이도록 프로그램을 수정했다. 아주 작은 변화이지만 사용자 인터페이스 및 경험이 크게 향상될 거라 기대한다. (이 글을 쓰기 위해 스크린샷을 찍다가 굉장한 사실을 발견했다. 해드셋의 철자를 틀린 것이다! 이로써 다음 업데이트 버전을 느긋하게 만들 수 없게 되었다;)

같은 문제로 고민하는 사람들을 위해 해당 알고리즘을 공개한다. 출처는 스텍오버플로우이다. 
-(BOOL)isDeviceMuted {
#if TARGET_IPHONE_SIMULATOR
	// return NO in simulator. Code causes crashes for some reason.
	return NO;
#endif
    
 	CFStringRef state;
 	UInt32 propertySize = sizeof(CFStringRef);
 	AudioSessionInitialize(NULL, NULL, NULL, NULL);
 	AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
 	return (CFStringGetLength(state) > 0 ? NO : YES);
}


공유 서비스에 대한 전체 로그아웃 기능 제공

소셜 네트워크로 공유하는 기능을 추가하기 위해 나는 ShareKit 이라는 오픈 소스 라이브러리를 가져다 썼는데 이 라이브러리에 문제가 있었다. ShareKit 은 한 번 로그인하면 로그인 정보를 iOS 시스템에 기록해 두었다가 다음에 로그인이 필요할 때 아이디/패스워드를 다시 묻지 않고 기록해 두었던 정보를 활용해서 자동으로 로그인한다. 

그런데 사용자가 소셜 네트워크 서비스의 암호를 변경하면 문제가 발생한다. 자동 로그인에 실패하면 다시 사용자에게 로그인을 요청해야 하는데 기대와는 달리 그냥 뻗어버리는게 아닌가? 한참을 찾아봤지만 이에 대한 적절한 해결책이 보이지 않았다. 로그아웃 기능이 API 로 제공되었지만, 이 과정의 자동화는 이루어지지 않고 있었다. (아무리 생각해봐도 이상하다)

그래서 오랜 고민 끝에 '전체 서비스 로그아웃' 버튼을 추가했다. 이 버튼을 클릭하면 iOS 시스템에 기록한 로그인 정보를 모두 삭제하여 다음 공유 때 로그인 창이 활성화된다.

사실 이 버튼은 임시 방편에 불과한 것 같아서 마음이 쓰리다. 다음 버전에는 정말 매끄럽게 동작하게끔 수정할 계획인데 경우에 따라선 SNS 공유 기능을 전부 새로 작성해야 할지도 모르겠다.


개발자에게 보다 쉽게 연락하세요

TED+SUB 을 사용하다가 문제가 생겼을 때 적극적인 사용자들은 내게 직접 메일을 보낸다. 트위터로 멘션을 보내는 사람들보다 메일을 보내는 사람들이 더 많았다. 문제는 앱 내에서 개발자에게 연락할 어떠한 방법도 제공하지 않고 있다는 것. 적극적인 사용자들은 앱스토어로 들어가 TED+SUB 을 찾아서 거기 적힌 개발자 연락처로 연락을 취한 것이다.

나는 좀 더 많은 사람들로부터 피드백을 받고 싶고, 조금 덜 적극적인 사람들도 쉽게 피드백을 보낼 수 있도록 개발자에게 메일을 보내거나 앱스토어에 리뷰를 남길 수 있게 하는 장치를 마련했다. 이 장치를 어디에 둘 것인가가 문제였는데 기존 [Filters] 공간이 가장 적합하다는 생각이 들었다. 아이패드에서는 [Filters] 와 [Settings] 가 한 화면에 나타나지만 아이폰/아이팟 터치에서는 따로 나타나며 [Filters] 가 먼저 보이기 때문이다.

그래서 [Filters] 에 연락처를 남기고나니 더 이상 [Filters] 라는 이름이 적합하지 않았다. 그래서 이름을 [Options] 로 바꾸었다. 인터페이스 이름을 바꾸는 건 결코 좋은 일이 아니지만, 이름이 그것의 기능 및 동작을 설명하는데 적합하지 않다면 바로 바꾸는 게 맞다고 본다. 그런 이유로 과감하게 이름을 바꾸었다. (이름만 바뀌었을 뿐 위치는 그대로이기 때문에 큰 혼란이 없을거라는 계산도 한 몫 했다)


ProMan 이 뭔가요?

[Filters] 내에 보이는 ProMan 은 별도의 광고가 아니라 내가 만든 첫 번째 (그리고 현재는 유일한) 유료 앱이다. 만든지 오래 되었고 업데이트가 꽤 더디지만 그래도 가장 아끼고 사랑스런 앱이라 전면에 소개 이미지를 넣고 있었다. 


[Filters] 의 이름을 [Options] 로 바꾸고나서 내가 만든 앱 소개는 '개발자로부터의 메시지' 항목에 넣는게 좋겠다는 생각이 들었다. 아마도 대부분의 사용자들이 개발자 메시지를 읽지 않을 것이란 생각이 들어서 한참을 고민했다. 하지만 가장 적절한 위치는 확실히 '개발자로부터의 메시지' 였다. 

앞으로 '개발자로부터의 메시지' 를 좀 더 가꿀 생각이다. 앱이 본연의 기능에만 충실하면 되지 왜 굳이 당신 이야기를 내가 들어야 합니까? 라고 묻는다면 사실 할 말이 없다. 그냥 내 욕심이다. 내가 오랜 정성과 노력으로 다듬어온 녀석을 통해 그것의 사용자와 이야기를 나눌 수 있다면 얼마나 좋을까- 싶은 마음이 가득하다. 이건 대기업이나 중소기업의 앱에서는 하기 힘든 일이다. 개인 개발자이기에 충분히 할 수 있고, 분명 좋은 결과가 있을 것이라 생각한다.


여담

이제 TED+SUB 은 기능만으로는 꽤 완성에 가까워지고 있다. 처음엔 단순히 '아이패드에서도 TED 강연을 자막과 함께 볼 수 있었으면 좋겠다' 였기 때문에 아주 원초적이고 단순했지만 이제는 검색이 가능하고 훌륭한 강연을 트위터나 페이스북 등으로 공유할 수 있게 되었다. 게다가 강연을 미리 다운로드 했다가 출퇴근 길에 감상할 수도 있게 되었다. 여러 번의 업데이트를 거치면서 이제야 뭔가 제대로 된 앱 같다는 생각이 든다. 

하지만 이렇게 기능이 늘어나고 있는데도 처음의 UI 에서 크게 바뀌지 않는 바람에 사용자 인터페이스는 누더기가 되어가고 있다. 기능 참 많아요- 라고 자랑이라도 하듯 늘어난 버튼들은 예쁘기라도 하면 좋으련만. 지저분하게 널린 버튼들을 보고 있자니 요즘 참 마음이 아프다. 누더기... 요즘 내가 TED+SUB을 보고 느끼는 감정, '애가 왜 이렇게 지저분해!정리 좀 하고 살지'.

다음 버전에서는 사용자 인터페이스를 전체적으로 재평가하고 다듬을 생각이다. 최종 제품을 중심으로 말이다. 최대한 단순하고 깔끔하면서도 효율적인 동선을 그리는 사용자 인터페이스를 디자인하고 싶다. 아마도 나 혼자서는 좀 힘들 것 같아서 전문 디자이너인 동생의 도움을 받아야 할 것 같다. 워낙 바빠서 도와줄 시간이 있을지 모르겠지만 그래도 매달려 볼 생각이다. (옛날엔 오빠가 뭐 시키면 거의 충성! 분위기 였는데... 라며 과거의 기억을 왜곡하는 나;)

 
 
신고
Tistory Comments :: 트랙백 0 , 댓글 0

CATEGORIES