세상이 변하는 것은 순식간인 듯하다. 미국을 비롯한 전 세계에 아이폰 열풍이 불 때, 전문가들은 아이폰이 국내에 들어오더라도 국내에서는 그리 큰 영향력을 끼치지 못할 것이라고 예측했다. 그 이유는, 국내 제조사의 피쳐폰(feature phone)들이 이미 완벽하게 멀티미디어 기능을 수행하고 있을 뿐만 아니라, 다양한 디자인 역시 둔해 보이는 아이폰의 디자인을 능가한다고 평가되었기 때문이다. 또한 국내의 무선 인터넷망은 광역적으로 보급되지 않았으며 전화망인 3G망으로 인터넷을 이용할 때에는 상당한 비용이 들기 때문에, 아이폰이 그 장점을 충분히 발휘하지 못할 것이라는 의견이 지배적이었다.
하지만 아이폰이 작년 말에 보급되면서 예상을 보기 좋게 뒤엎고 세상을 완전히 바꾸어 놓았다. 그 기능을 재대로 사용할 수 있든 하지 못하든, 디자인이 맘에 들든 들지 않든, 아이폰은 시대의 아이콘이 되어 단일모델로서 전례 없이 초고속으로 보급되었다.
사실 아이폰 이전에 스마트폰이 없었던 것은 아니었다. Microsoft 사의 모바일용 OS인 Windows CE 계열의 OS가 설치된 스마트폰이 ‘PDA폰’이라는 이름으로 지난 10년간 꾸준히 발매되어왔다. PDA폰은 대부분의 PC에서 사용하고 있는 Windows와 호환이 된다는 강력한 장점이 있었음에도, 초기에 설치된 프로그램 이외에 애플리케이션을 구하기가 매우 어려워 그 활용도는 기대에 크게 미치지 못했다.
아이폰이 열풍을 일으킨 것은 Apple 사가 이러한 점을 간파했기 때문이다. 아이폰은 애플리케이션을 쉽게 검색하고 구매, 설치할 수 있도록 앱 스토어(App Strore)를 만들었으며, 또한 애플리케이션을 개발할 수 있는 소프트웨어인 Xcode를 무료로 배포했다. Windows CE 계열을 위한 애플리케이션을 개발하려면 Visual Studio를 비싼 가격에 구입해야하고, 무료 공개가 아닌 이상 개인이 판매할 방법이 없다는 것과는 매우 대조적이다.
그림 1. MS Windows CE 계열의 Windows PocketPC를 채용한 다양한 PDA폰
Apple 사가 앱 스토어를 운영하면서 개발자 위주의 정책을 내놓은 것도 아이폰 애플리케이션의 수가 급격히 늘어나게 하는 요인이었다. 특히 앱 스토어에 유료 애플리케이션을 올리면 그 수익의 무려 70%를 개발자에게 지급한다는 것은 사회적인 명예를 거의 가지지 못했던 전 세계의 소프트웨어 개발자들에게 지극히 매력적이었다. 그래서 수많은 개발자들이 아이폰 애플리케이션 개발에 매달렸으며, 앱 스토어를 통해 수익을 얻는 것이 목적인 소규모 기업도 생겨났다. 초기에는 상당한 수입을 올릴 수 있었다고 한다. 하지만 요즘에는 뛰어난 애플리케이션도 무료로 올라오기 때문에 독특한 콘텐츠를 제공하지 않는 이상 앱 스토어를 통해 수익을 얻는 것은 매우 어렵다. 그래서 개발자들은 앱 스토어 등록을 경력으로 하고 기업의 애플리케이션 개발 대가로 수익을 얻는 방향으로 수익 모델을 변경하고 있다.
기업도 이러한 열풍을 일으킨 장본인이다. 수많은 기업들이 아이폰을 도입하고 내부 직원용 혹은 외부 홍보용 아이폰 애플리케이션을 보급하면서 미래지향적이며 젊고 스마트한 이미지를 부각시키는 데 활용하고 있다. EBS를 비롯한 지상파4사도 이러한 시대 조류에 부응하여 임직원에게 스마트폰을 지급하고 수많은 애플리케이션을 내놓았다.
하지만 애플리케이션 개발은 생각보다 까다로운 점이 많다. 애플리케이션 자체도 고려할 사항이 많지만, 이를 통해 제공할 서비스를 운영하는 시스템의 구축과 관리는 쉽게 간과되고 만다. 본 글에서는 아이폰 애플리케이션 개발에 필요한 기초적인 정보에 대해 언급한다.
아이폰 애플리케이션 개발 준비
아이폰 애플리케이션을 개발을 위해 사용되는 컴파일러는 애플 사가 개발한 Xcode이다. Xcode는 기본적으로 C언어를 지원하지만, 현재 애플 사의 CEO인 스티브 잡스가 과거 애플에서 해고되었을 때에 창업했던 NextStep 사가 개발한 Object-C언어를 전략적으로 채택하고 있으며, UI 구성을 그래픽으로 작업할 수 있도록 하는 Cocoa Touch를 지원한다. 따라서 아이폰 애플리케이션을 개발하기 위해서는 Object-C언어와 Cocoa Touch 사용 방법을 숙지해야한다.
그림 2. Xcode 3.2.3
그리고 Xcode는 Mac OS X 전용이므로 반드시 애플 사의 맥킨토시 컴퓨터가 있어야 한다. 또한 최신 버전의 Xcode를 사용하기 위해서는 ‘스노우 레파드’(Snow Leopard)라는 별칭을 갖고 있는 Mac OS 10.6 이상이 있어야 한다. 만약 Mac OS 10.5 이하가 있다면 이 버전에 맞는 구버전 Xcode를 설치해야 한다. 단 구버전 Xcode는 최신 아이폰 OS인 iOS4의 SDK를 지원하지 않으므로 iOS4의 기능을 활용하여 애플리케이션을 만드는 것은 불가능하다. 뿐만 아니라, 구버전에서는 문제가 없으나 iOS4에서 사용이 금지된 API를 사용했을 경우 앱 스토어 리뷰에서 거절될 수도 있기 때문에, 반드시 최신의 개발 환경을 구축해놓아야 한다.
아이폰 프로그래밍
아이폰 프로그래밍을 하려고 할 때 처음 부딪히는 문제는 바로 프로그래밍 언어이다. 한국에서는 대부분 윈도우즈 환경에서 프로그래밍을 해왔기 때문에 C와 C++, 그리고 VC++에 익숙해져있다. 리눅스 프로그래밍을 했다면 역시 C와 C++에 능통할 것이다. 하지만 앞에서 언급했듯이 아이폰은 Object-C라고 하는 독특한 언어를 사용한다. Xcode에서 사용하는 클래스나 프로토타입에 NS라는 접두사가 많이 붙는 것을 볼 수 있는데, 이것은 스티브 잡스가 창업했던 회사인 NextStep을 의미한다.
Object-C는 마치 C언어로부터 파생된 것처럼 보이지만, 안타깝게도 문법 구조가 완전히 다르다. 한 가지 예를 들면, JavaVM이나 .Net처럼 인스턴스의 메모리 할당과 해제를 OS가 해주기 때문에 모든 클래스의 인수는 포인터로 해야 한다는 점에서 개념적인 차이가 있다.
포인터로 선언된 변수는 메모리 할당을 해주어야 하는 경우도 있고, 그럴 필요가 없는 경우가 있다. NSString을 예로 들어보자. NSString은 VC++과 비교하면 CString에 대응되는 클래스이다. VC++라면 아래와 같이 선언하여 바로 인스턴스를 생성한 후 사용할 수 있다.
CString strName;
strName = _T("Jooho Song");
혹은 아래와 같이 포인터로 선언한 후 메모리를 할당하여 사용할 수도 있다. 이 경우 메모리를 해제하는 후처리를 반드시 해주어야 한다.
CString *pstrName;
pstrName = new CString;
*pstrName = _T("Jooho Song");
…
del pstrName;
하지만 Object-C에서는 무조건 포인터로 선언해야 한다.
NSString *nameString;
nameString = @"Jooho Song";
기존의 C언어라면 포인터만 지정하고 이 포인터가 가리키는 메모리를 할당하지 않아 곧바로 메모리 접근 오류가 나겠지만, Object-C에서는 아무런 문제가 없다. 하지만 경우에 따라 메모리를 할당해야 하는 경우가 있다. 이 경우에도 메모리 해제를 잊지 말아야 한다.
nameString = [[NSString alloc] initWithFormatString:@"%@", @"Jooho Song"];
…
[nameString release];
위 문장은 VC++에서 strName.Format("%s", "Jooho Song");과 같은 내용이다. 여기서는 alloc이라는 명령어를 사용하여 메모리를 할당하는 것을 볼 수 있다. Object-C의 함수는 +와 – 두 가지 종류가 있는데, 이 둘 중 +로 지정되어있는 함수를 사용하는 경우 이와 같은 메모리 할당이 필요하다. 도움말을 통해 이를 확인해보자.
+initWithFormatString:(NSString*)string, …
혹자는 Xcode가 C와 C++을 지원하기 때문에 그대로 사용할 수 있지 않느냐고 말한다. 그것은 물론 사실이다. Xcode는 기본적으로 gcc로 컴파일하기 때문에 C와 C++ 코드를 그대로 사용할 수 있다. 하지만 C/C++ 코드는 특정한 기능을 실행하는 범위로 제한하는 것이 좋다. 그 이유는 UI를 활용하기 위해서는 Cocoa Touch와 연결되어야 하며, 결국 Object-C 문법을 사용해야 하기 때문이다. 따라서 Object-C는 필수라고 생각해도 무방하며, C/C++ 보다 간단히 작성되기 때문에 굳이 C/C++로 작성할 필요는 없다. 이미 갖고 있는 코드를 활용하는 정도로 생각하는 것이 좋다.
새로운 언어를 익혀야하는 수고를 덜기 위해 HTML을 사용하는 경우가 점점 많아지고 있다. Cocoa Touch의 WebView에서 HTML 코드를 로드하면 곧바로 실행되기 때문에 아이폰에서의 활용도는 매우 높다. 또한 안드로이드에서도 지원되기 때문에 소위 ‘크로스 컴파일’이 가능하다는 매력적인 장점이 있다. 심지어 애플 사도 최근에 애플리케이션을 HTML로 개발해 볼 것을 제안하기는 메일을 보내기도 했다.
이와 관련하여 웹 애플리케이션을 타겟으로 하는 HTML5가 급속히 부상하고 있다. 이미 OpenAppMKT라는 HTML5로 만든 애플리케이션을 판매하는 사이트가 등장하기도 했다. 하지만 아직 안드로이드는 HTML5를 상당부분 지원하지 못하기 때문에 당장 안드로이드에 적용하기에는 문제가 있다. 안드로이드 2.2가 설치되어있는 갤럭시탭의 경우, 멀티미디어를 재생하는 태그를 실행시키면 네모 영역만 나타날 뿐 아무런 동작을 하지 못한다. 어쩌면 아이폰의 퀵타임과 같이 그 태그에 반응해야 하는 멀티미디어 애플리케이션이 갤럭시탭에는 없기 때문일 수도 있다.
모바일 애플리케이션 기획
사실 위의 기술적인 접근 이전에 적절한 기획이 선행되어야 한다. 모바일은 PC용 프로그램과는 달리, 인터페이스가 매우 제한적인 모바일에서는 사용자가 장시간 ‘업무’를 하지 않기 때문에 특징적인 기능만을 손쉽게 이용할 수 있도록 제공하는 것이 중요하다. 수많은 뎁스와 현란한 디자인은 오히려 사용자의 집중력을 흐트러뜨릴 뿐이다. 그래서 요즘의 많은 애플리케이션들은 기능 영역과 엔터테인먼트 영역을 나누며, 또한 애플리케이션 자체를 그렇게 분류하기도 한다. 이러한 특징은 단지 ‘작은 화면’이기 때문인 것만은 아니다. 10인치의 아이패드도 마찬가지인데, 이것은 몇 개의 터치 동작으로 모든 입력이 가능해야 하기 때문이기도 하다. 이에 적합한 디자인이 수반되어야 한다. 기능 집약적인 경우 디자인은 단순해야 하며, 기능이 적은 경우는 디자인이 고급이어야 한다.
하지만 가장 중요한 것은 디자인과 기술의 조화이다. 디자이너는 기술적으로 적용 가능한 디자인을 해야 하며, 개발자는 디자인을 수용할 수 있는 기술을 가지고 있는 것이 이상적이지만, 일반적으로 많은 어려움을 겪는다. 따라서 기획 단계에서 UI에 대한 협의가 이루어지는 것이 좋다.