나의 일과 삶에 없어서는 안될 모바일 애플리케이션 8개

얼마 전에 썼던 글, ‘나의 일과 삶에 없어서는 안될 데스크탑 애플리케이션 9개‘가 많은 사람들로부터 호응을 받았다. 워드프레스에서 제공해주는 통계를 보니, 지난 열흘간 10,000명 이상이 이 글을 읽었다. 그만큼 소프트웨어가 우리 생활에서 차지하는 비중이 크다는 증거인 듯하다. 이번에는 나에게 필수적인 아이폰, 아이패드 앱을 정리해보았다.

1. 월 스트리트 저널(Wall Street Journal) | iPad

월스트리트저널(WSJ) 아이패드 앱

내가 가장 선호하는 신문은 WSJ이다. 주중에는 테크크런치, 트위터, 블로그 등에 묻혀 사실 읽을 틈이 없지만, 주말 아침에 아이패드를 손에 집으면 가장 먼저 WSJ 주말 버전을 읽는다. 한 때 종이 느낌이 좋아 종이 신문도 구독해봤지만 집에 종이가 자꾸 쌓여서 불편한데다 잉크가 손에 묻는 듯한 느낌이 싫어 아이패드로 완전히 갈아 탔다. 비디오와 사진이 적절하게 섞여 있다는 것도 아이패드 버전의 큰 장점이다. 첫째 해에는 1년에 약 260달러이고 둘째 해부터는 연 500달러로 올라간다[].

2. 유버전 성경 (YouVersion Holy Bible) | iPad

유버전 성경 (YouVersion Holy Bible)

지난 5월 10일, 무려 누적 5천만 건이 다운로드 되었다고 발표해서 TechCrunch에 소개되었다. 이 앱을 만든 주인공은 바로 Bobby Gruenewald 목사이다. 트위터에서 무려 2만 명의 팔로워를 가진 그는, LifeChurch.tv라는 인터넷 교회의 이노베이션 리더(Innovation Leader)를 맡고 있으며, FastCompany가 선정한 2011년의 가장 창의적인 사람 100명 중 한 명으로 소개되기도 했다. LifeChurch.tv에 합류하기 전에는 테크놀로지 회사를 두 번 매각했으며 스타트업 컨설팅을 하기도 했다[].

유버전 성경을 만든 Bobby Gruenewald 목사 (출처: TechCrunch TV)

앱스토에서 ‘Bible’로 검색하면 많은 성경 앱들이 뜬다. 유료 버전도 있고 무료 버전도 있는데, 처음엔 어느 앱이 좋은 지 몰라 세 개쯤 깔아놓고 비교해보면서 쓰곤 했다. Olive Tree의 Bible Reader도 매우 잘 만들어서 한동안 썼었다. 하지만,  시간이 지난 지금에는, 끊임없이 업데이트를 해서 다른 앱들보다 월등히 좋아진 YouVersion만 살아남았다. 이 정도수준의 소프트웨어를 만들려면 돈이 꽤 많이 들텐데, 이 앱은 완전히 무료이고 광고도 없다. 즉, non-profit 앱이다. 테크크런치와의 인터뷰에 따르면, LifeChurch.tv의 헌금으로 비용을 충당한다고 한다. 무려 100 가지가 넘는 언어로 제공하는데, 한국어 버전만 세 가지라는 것이 놀랍다. 그 중 많은 버전은 다운로드해서 오프라인에서 이용할 수 있다.

특히, 최근 추가된 Parallel 기능이 마음에 든다. 위 그림에서 보듯, 두 가지 다른 버전의 성경을 나란히 놓고 볼 수 있게 하는 기능인데, 영어와 한글 버전을 이렇게 나란히 놓고 보면 이해에 도움이 많이 된다.

3. 스트라바 (Strava) | iPhone

스트라바 (Strava)

요즘 Quantified Self (계량화된 나) 라는 말이 유행이다. 우리가 항상 들고 다니는 있는 파워풀한 스마트폰 덕분에 무엇을 얼마나 먹는지, 언제 자고 언제 일어나는지, 운동을 얼마나 하는지 등을 기록해두고 이를 다른 사람들과 비교하기가 쉬워졌다. Strava는 사이클링에 빠진 사람들이 직접 만든 앱이다. 앱을 시작시키고 난 후 자전거를 타면 경로를 지도에 표시하고 평균 속도와 최고 속도를 기록하는 것은 기본이고, 이에 더해 자전거를 타고 여기 저기 다니기만 하면 구간별로 그 자리를 지나간 다른 사람들과 비교하여 순위를 보여준다.

스트라바(Strava) 웹사이트에 가면 내가 달린 구간의 고도를 알 수 있다.

이렇게 좋은 앱이 광고도 없이 공짜라니 거의 믿기 힘들다. 프리미엄 버전이 있기는 하지만 대부분 사람들에게는 굳이 필요하지 않다. 한편, 안드로이드에서는 Noom의 Cardio Trainer를 추천한다.

4. 오더블 (Audible) | iPhone

오더블 (Audible) 앱

오디오북을 들을 수 있는 앱이다. 이 회사는 2008년 1월에 아마존에 $300M(약 3300억원)에 인수되었다. 오디오북이라 하면 구세대 상품 같지만 사실 이동할 때 아주 유용하다. 스티브 잡스 전기, 짐 콜린스의 Great By Choice, 그리고 헝거 게임 등을 오디오북으로 들었는데 아주 좋았다. 짐 콜린스의 책은 저자가 직접 읽어준다. 스티브 잡스 전기나 헝거 게임은 킨들로도 사서, 이동할 때는 오디오북으로, 앉아 있을 때는 책으로 읽었다. 책마다 따로 구입할 수 있고, 또는  회원 가입해서 월 16달러 정도를 내면 한 달에 한 권씩 다운로드할 수 있다.

5. 아마존 (Amazon) | iPhone

아마존 앱

이 앱 없이 살 수 있을까? 아마존 아이폰 앱으로 1년에 100개가 넘는 물건을 주문한다. 데스크탑에서도 정말 쓰기 편하지만, 난 어디서나 클릭 몇 번이면 물건을 구매할 수 있게 만든 이 아이폰 앱이 정말 좋다.

‘3M 스카치 테이프가 필요하다’ -> ‘아마존 아이폰 앱을 실행한다’ -> ‘물건을 확인하고 ‘Two-Day-FREE’를 눌러 구매한다.’ ‘원 클릭 쇼핑’ 덕분에 이 과정에 걸리는 시간은 불과 60초이다. 내 신용카드 정보와 집 주소가 이미 아마존 서버에 저장되어 있고 내가 원클릭 쇼핑을 미리 승인해두었기 때문에 신용카드 정보를 입력하거나 공인인증서 암호를 입력하는 등의 과정이 없다. 이 경험에 대해서는 전에 썼던 아마존 유저 인터페이스 분석에서 더 자세히 설명해 놓았다.

6. 트립잇 (TripIt) | iPhone

트립잇(TripIt)

지금 뉴욕에서 출발해서 프라하로 가는 비행기 안에서 이 글을 쓰고 있다. 그리고 TripIt은 이런 여행에서 유용하게 쓰는 필수 아이템이다. 아이폰을 쓰기 전엔 여행할 때 스케줄을 인쇄해서 들고 다녔다. TripIt이 있기 전에는 비행기 시간과 편명을 구글 캘린더에 미리 입력한 후 출발했다. 지금은 비행기 구매 확약 및 호텔 예약 이메일을 나에게 할당된 TripIt 이메일 계정으로 포워드하면 끝이다. TripIt에 깔끔하게 정리되어서 웹 또는 아이폰에서 볼 수 있다.

유료 버전을 구매하면 앱으로 체크인을 할 수 있고, 항공 지연 상태를 확인할 수 있다. SeatExpert에서 제공되는 정보를 통해 비행기를 타기 전에 비행기 안 좌석이 어떻게 배치되어 있는지도 확인할 수 있다. 자주 여행한다면 당연히 돈을 주고 샀을 앱이다.

7. 인스타그랩 (Instagram) | iPhone

프라하 성에서 내려다 본 도시의 모습. 인스타그램 필터 적용 전(좌)과 적용 후(우)

사실 한동안 사용을 안하다가 페이스북이 인스타그램을 인수했다는 소식을 듣고 최근에 다시  쓰기 시작했다. 인스타그램 필터가 별 것 아니라고 생각했는데, 막상 쓰기 시작해보니 꽤 강력하다는 것을 알게 됐다. 아이폰에서 찍은 사진의 경우 해상도가 낮거나 노출이 잘 안맞아 너무 어둡거나 밝게 나오는 경우가 많은데, 인스타그램 필터를 적용하면 사진의 느낌이 좋아진다. 그래서, 페이스북에서 사진을 공유하고 싶을 때 인스타그램 필터를 적용한 후 올리는 때가 많다.

8. 판도라 라디오 (Pandora Radio) | iPhone

판도라 (Pandora)

데스크탑에서도 유용하지만, 사실 모바일에서 더 유용한 판도라를 빼놓을 수 없다. 이 앱에 대해서는 특별한 설명이 필요 없을 것 같다. 판도라가 생소하신 분은 에스티마님이 쓰신 ‘인터넷 라디오 판도라의 가능성‘과 ‘10년만에 첫 분기 흑자 낸 판도라 창업자 이야기‘를 참고하시기를.

이렇게 정리해보고 나니 내가 자주 쓰는 데스크탑 앱과 별로 겹치지 않는다. 또한, 아이폰과 아이패드에서 즐겨 사용하는 앱도 많이 다르다. 한때 ‘원소스 멀티 유즈’라는 말이 유행이었지만 지금은 크게 식상해졌다. 원소스 멀티 유즈도 좋지만, 각 디바이스의 특성을 파악하여 거기에 맞는 최적화된 경험을 제공하는 것이 훨씬 더 바람직하다.

인스타그램(Instagram), 2년만에 1조원의 회사 가치를 만들어내다

이번 한 주 내내 각종 언론에서 인스타그램 이야기가 끊이지 않는다. 그만큼 많은 사람들에게 극적인 이야기인가보다. 분명 인기가 있는 앱이었고 많은 사람들이 (현재 4천만명) 이용하고 있었지만, 돈을 전혀 벌지 못하고 있는 회사였는데 2012년 4월 9일, $1 billion (1.1조원)에 페이스북에 팔린 것이다. 마크 저커버그가 전화하고 48시간만에 합의에 달했다고 하니 그 또한 극적이다. 구글이나 트위터, 또는 마이크로소프트가 알게 되는 것을 우려했을 것이다. 마크의 인수 시도는 처음이 아니었다. 2011년 초에 한 번 인수를 시도한 적이 있었다 [주: NYT] 하지만 창업자 케빈 스트롬(Kevin Strom)은 회사를 팔 생각이 없고 회사 확장에 주력하고 싶다고 이야기했고, 1년이 지난 2012년, 마크는 그 때보다 몇 배의 값을 지불하고서라도 인스타그램을 인수하기로 결정한 것이다. 그 바로 전날 Baseline Ventures, Benchmark Capital 등이 $50M을 투자하고 회사 가치를 $500M (5천 5백억원)으로 책정하게 되자 인스타그램이 모바일에서 페이스북을 위협할 만큼 성장할 수도 있겠다는 생각에 마음이 급해졌던 것 같다.

인스타그램 창업자, Kevin Systrom. 출처: http://bits.blogs.nytimes.com/

인스타그램 창업자 케빈 시스트롬(Kevin Systrom)은 보스턴 교외에서 자랐지만 2003년에 스탠포드에 진학하면서 실리콘밸리로 이사했다. 대학교 2학년 때 대용량 사진을 사람들과 쉽게 공유할 수 있는 서비스인 Photobox를 만들었고, 이것이 마크 저커버그의 눈에 띄어 페이스북 입사 제의를 받았지만 거절하고 공부를 마치기로 했다.

학교에 있는 동안 트위터의 전신인 Odeo에서 인턴을 했고, 2006년에 학교를 졸업한 후 구글에서 3년을 근무했으며, 구글 출신들이 만들었고 나중에 페이스북에 인수된 Nextstop에서 일했다. 그러나 그는 자신의 회사를 만들려는 꿈이 있었고, 사진 공유 서비스인 Burbn을 만들었다. (인스타그램이란 이름이 널리 알려져 있지만 이것은 제품명이고 회사 이름은 지금도 Burbn이다.)  2010년 1월에 한 스타트업이 주최한 파티에서 Baseline Ventures의 스티브 앤더슨을 만나 Burbn을 보여주었는데, 그가 투자에 관심을 보이자 회사를 그만두고 본격적으로 창업을 한다. 스티브는 곧 25만 달러를 입금했고, 이어서 그 유명한 마크 안드리센(Mark Andreesseen)도 25만달러 투자했다. 브라질 출신의, 스탠포드에서 ‘신호 체계(symbolic systems)’를 전공한 마이크 크리거(Mike Krieger)가 공동 창업자로 합류했다.

둘은 사진 공유 서비스 Burbn을 개선하는 일을 하다가 기능이 너무 복잡하다고 생각되어 꼭 필요한 것을 제외하고 아주 단순화시켜 인스타그램 (Instant + Telegram)이라는 제품을 2010년 10월 6일 아이폰 앱스토어에 올렸다. 3주만에 30만 번 다운로드되었고, 곧 저스틴 비버 등이 사용하기 시작하면서 수천만 명의 사용자가 생겼다.

그로부터 1년 반이 지난 2012년 4월 초, 마크 저커버그로부터 전화를 받았고, 그 뒤는 역사가 되었다. 트위터 창업자이자 Square CEO인 잭 도시도 이 회사를 사고 싶어했는데 마크의 전화 한 통에 빼앗겨 기분이 안좋다고 한다. 그래도 그가 아주 초기에 투자했기 때문에 수십 배 금전적 이익을 남긴 것으로 위안을 삼을 수 있을 것이다.

아래는 저스틴 비버가 인스타그램을 이용해서 올린 첫 사진이다. 이 때를 기점으로 유저 수가 폭발적으로 성장한 것 같다. 인스타그램 팔로워가 무려 130만명이나 된다. 2천만명이나 되는 트위터 팔로워 숫자에 비하면 적은 수이긴 하지만.

저스틴 비버가 인스타그랩을 이용해서 올린 첫 사진. “LA 트래픽 최악이야!” 출처: http://instagr.am/p/IMhuj

하루 아침에 성공한 신데렐라 스토리로 보이지만 꼭 그렇지는 않다. 앵그리버드나 Draw Something처럼 성공 전에 수십 번의 실패를 했던 것 까지는 아니지만, 인스타그램이 갑자기 탄생한 것은 아니었다. 게다가 인스타그램이 나오기 전과 나온 후에, 구글이나 페이스북에서 제공하는 사진 업로드/공유 서비스는 물론이고 이와 비슷한 류의 사진 필터링/공유 서비스가 엄청나게 많이 있었다. PicPiz, Burstn, Path, Flickr, Shutterfly, Lockerz, PhotoAccess, Pixamid 등 뿐 아니라 Hipstamatic도  인스타그램과 아주 유사한, 인기가 많았던 앱이었다. 왜 유독 인스타그램이 다른 모든 서비스를 제치고 영광의 자리에 오른 것일까?

인스타그램 실행 화면

첫째, 심플한 유저 인터페이스이다. 모든 것을 다 빼고 오직 사진을 찍고, 필터를 입히고, 페이스북과 트위터 등을 통해 공유하는 것을 쉽게 하는데만 집중했다.

둘째, 창업자 케빈의 지도교수인 Clifford Nass가 이야기한대로, “디자인과 심리학의 승리“였다. 공동창업자인 마이크 크리거가 심리학과 언어학, 철학의 종합 학문인 신호 체계를 전공한 것과 무관하지 않다. 아이콘 디자인에서 UI 디자인, 그리고 각 필터에 붙인 감각적인 이름들까지 세세하게 신경을 쓴 흔적이 보인다.

셋째, 사진이 멋있게 나오게 하는 필터 효과, 그리고 그것을 받춰 준 타이밍이다. 아이폰 3 카메라도 좋았지만, 아이폰 4가 출시되면서 아이폰에서 찍은 사진 품질이 월등히 좋아했고, 이를 인스타그램의 필터를 적용해서 올리면 전문 사진가가 비싼 카메라로 찍은 것과 나란히 놓아도 지지 않을만큼 그럴 듯한 느낌을 준다.

얼마 전, 집 근처 카페에 갔다가 인스타그램으로 찍어 페이스북에서 공유했던 사진

핵심적인 성공 요소는 아닐 지 몰라도, 사진을 한 쪽으로 길게 나오게 하는 대신 정사각형으로 나오게 한 것도 정말 뛰어난 아이디어였다. 아이폰을 들고 사진을 찍으면 보통 옆으로 돌려서 찍게 된다. 사진이 세로로 길게 나오면 나중에 공유해서 컴퓨터에서 봤을 때 느낌이 이상하기 때문이다. 그렇지만 매번 아이폰을 가로로 돌려 찍는 게 좀 귀찮은 것도 사실이다. 인스타그램을 이용하면 이런 불편이 없다. 가로로 돌리든 똑바로 세워 찍든 사진은 정사각형으로 나온다. 그래서 폰을 돌리기 귀찮은 사람들에게 어필했는지도 모르겠다.

안드로이드 버전이 출시되고 페이스북 인수 소식이 퍼져나가면서 인스타그램의 유저 수는 10일 만에 3천만명에서 4천만명이 되었다. 하루에 무려 백만 명씩 가입한 것이다. 그리고 직원 11명짜리 회사에 회사 가치 1.1조원이 책정되었으니, 1년 반만에 한 명당 약 1000억원의 가치를 만들어낸 셈이다. 인스타그램의 이야기는 곧 집약된 실리콘밸리의 스타트업 성공 스토리이다. 이런 신데렐라 스토리가 더욱 더 많은 돈과 인재들을 실리콘밸리로 끌어들인다. 미국 경기가 아무리 휘청대고 유럽 경제가 암흑 속을 걸어도, 이 곳은 호황이다.

참고

Behind Instagram’s Success, Networking the Old Way, New York Times

코딩의 즐거움

작년 겨울부터 새로운 취미를 시작했다. 작년 겨울 휴가를 근처 스키 리조트인 Lake Tahoe에서 보냈는데, 그 때 내가 킨들에 담아 간 책은 소설 책이 아니라 ‘iOS 프로그래밍:The Big Nerd Ranch Guide‘ 였다. 원래 대학 졸업하고 처음 시작한 일이 게임을 만드는 일이었으니까 코딩은 전에도 많이 했었지만, MBA에 진학한 이후로는 거의 할 일이 없었는데 다시 해보기 시작한 것이다.

전에 페이스북에서 Friend Collage라는 것을 보았다.

페이스북 친구 콜라쥬(Facebook Friends Collage)로 만들 수 있는 그림들

페이스북 친구들의 프로필 사진을 이용해서 자신의 프로필 자신을 모자이크로 재구성하는 것이다. 꼭 친구들의 프로필 사진들만이 아니라 내가 원하는 이미지들을 이용해서 자유자재로 만들어보고 싶어 그런 게 있는지 여기 저기에서 검색해 보았지만, 딱 내가 원하는 것은 없었다.

가만히 생각해 보니 그리 어렵지 않겠다는 생각이 들어 코딩을 시작했다. 내가 생각한 알고리즘은 이런 것이었다.

  1. 그림을 격자로 나눈다.
  2. 각 격자마다 빨간색(R), 초록색(G), 파란색(B)의 평균 값을 구한다. (컴퓨터는 Red, Green, Blue의 세 가지 색을 이용해서 화면에 색을 표현하고 있다)
  3. 타일로 쓰일 그림을 불러온 후, 마찬가지로 각각에 대해 빨간색, 초록색, 파란색의 평균 값을 구한다.
  4. (2)와 (3)의 결과를 비교한다. 즉 값의 차이, 또는 색의 거리를 계산한다.
  5. ‘값 차이’가 가장 적은 이미지를 찾아 이를 배치한다. 같은 그림이 계속 등장하면 재미가 없으니 한 번 쓰인 이미지는 다시 쓰이지 않도록 한다.

이걸 코드로 옮기면 어떻게 될까?

1. 먼저, 그림을 정해진 크기의 격자로 나누어서 저장해둔다.

위 코드에서 ‘bg‘는 배경 그림 이미지를 나타내고, getSubimage 는 그림의 특정 부분을 잘라내는 명령어이다. 즉, bg.getSubimage 라고 하면 ‘bg라는 이미지에서 특정 부분을 잘라내어라’라는 뜻이다. 그 ‘특정 부분’이 괄호 안에서 정의된다. 첫 번째는 가로 좌표, 두 번째는 세로 좌표, 그 다음은 격자 가로 크기, 그 다음은 격자 세로 크기이다. TILE_WIDTHTILE_HEIGHT 미리 정의되어 있다. 그림으로 나타내면 다음과 같다. 가운데 있는 등호는 ‘오른쪽 연산의 결과를 왼쪽에 저장하라’는 뜻이다. 예를 들어, A = 3 * 5 는, 3과 5를 곱한 결과, 즉 15를 A에 저장하라는 뜻이다. 위의 예에서는 잘라낸 그림을 tileToAnalyze라는 곳에 저장해두라는 뜻이다. 이렇게 일단 저장해 두면 저장된 그림을 가지고 뭐든 할 수 있게 된다. 이 경우에는, 그 그림마다 R, G, B값을 얻어내어 평균 값을 구할 것이다. 그림으로 표현하면 아래와 같다.

이미지를 작은 사각형으로 잘라낸다

2. 잘라진 그림의 평균 R, G, B 값을 구한다.

잘라진 각 그림의 평균 R, G, B 값을 계산하는 코드

복잡해 보이는데, 설명을 해보겠다. image.getRGB(k, l)은, k와 l에 해당하는 지점에서 있는 점의 R, G, B 값을 구하는 명령어이다. 그 결과 R, G, B값이 pixel이라는 숫자에 저장된다. 그런데 pixel에는 이 세 개의 값이 합쳐서 들어가 있으므로 R, G, B값을 따로 찾아내려면 분리를 해야 한다. 그래서 ((pixel >> 16) & 0xff)과 같은 코드가 필요하다 (이 코드는 설명이 길어지므로 생략한다.). 분리된 R, G, B 값은 각각 rgb[0], rgb[1], rgb[2]에 들어가는데, 그냥 들어가는 게 아니라 누적 합산해서 들어간다 (rgb[0] = rgb[0] + xxx). 값의 평균을 구하려면 값을 다 더한 상태에서 픽셀의 갯수로 나누면 된다. 픽셀의 총 수는 (이미지 가로 크기 X 이미지 세로 크기) 이므로 (width*height)라고 표현된다. rgb[0] = rgb[0] / (width*height)는, rgb[0]에 들어가 있는 값(각 픽셀마다의 R 값을 모두 누적 합산한 결과)을 픽셀의 총 수로 나눈 다음에 다시 rgb[0]에 저장하라는 뜻이다.  k와 l값은 좌표를 나타내는데, for 명령문이 있기 때문에 (0, 0), (1, 0), (2, 0), …, (0, 1), (1, 1), (2, 1), …, (k, l), …, (이미지 가로 크기, 이미지 세로 크기) 까지 값이 변한다. for (int k=0; k<width; k++) 는 ‘k 값이 0부터 시작해서 width 값보다 작은 동안 k값을 1씩 증가시키면서 아래에 있는 명령을 반복 실행하라’는 뜻이다. 아래 그림을 보자.

왼쪽 이미지에서 잘라 낸 각각의 타일에 대해 모든 픽셀을 훑으면서 R, G, B의 평균 값을 계산하는 과정

3. 타일로 쓰일 그림에 대해 마찬가지로 R, G, B 평균 값을 구한다.

이는 바로 위와 완전히 동일한 과정을 통해 계산할 수 있다.

4. 배경 이미지를 자른 타일의 R, G, B 값과 타일로 쓰일 이미지의 R, G, B 값을 서로 비교한다.

R, G, B 값을 서로 비교해서 값의 차이를 저장해 둠

Math.abs(a, b)는 a와 b의 absolute(절대적) 차이를 계산하는 명령어이다. 즉 Math.abs(5 – 3)의 결과는 2이고, 마찬가지로 Math.abs(3 – 5)의 결과도 2이다. 위 코드의 결과로 R, G, B 값의 차이는 deltaSum이라는 공간에 저장된다.

5. 그 값의 차이가 최소인 타일(즉, 배경 이미지를 자른 타일과 가장 R, G, B값이 유사한 타일)을 찾아내어 타일을 배치한다.

6. 이 작업을 모든 타일에 대해 반복한다. 아래는 그 결과이다.

페이스북 친구들의 프로필 사진 700여개를 이용해서 만든 제레미 린 콜라쥬
원본 이미지

전체 코드는 여기에서 설명한 것보다 더 길지만, 앞에서 설명한 것이 가장 핵심적인 알고리즘이다. 결국 ‘코드’이란 머리속으로 생각한 논리를 영어 단어와 기호로 변환하여 표현한 것에 불과하다. 그런 면에서는 외국어를 배우는 것과 비슷하다고 볼 수도 있다. 특수한 사람들만 배울 수 있거나 이해할 수 있는 것이 결코 아니다. 누구나 ‘논리’를 생각해낼 수 있고, 그 논리를 코드로 그대로 옮기면 프로그램이 된다.

마이클 블룸버그 뉴욕 시장은, 올해 초에 트위터를 통해 새 해 결심이 코딩을 배우는 것이라며 코드 아카데미에 등록했다고 했다. 인기 아이폰 앱을 만든 회사, 인스타그램(Instagram) 창업자의 여자 친구는 발렌타인 데이를 맞아 Lovestagram이라는 앱을 만들어서 남자친구를 깜짝 놀라게 해주었다고 한다(결국 나중엔 남자친구의 도움을 받았지만). 인터뷰에서, 그녀는 “누구도 코딩하는 것을 두려워할 필요가 없다.”라고 이야기했다. 2012년, 코딩을 한 번 배워보면 어떨까?

마이클 블룸버그 뉴욕 시장의 새 해 결심 트윗: "나의 2012년 새 해 결심은 코드아카데미에서 코딩을 배우는 것입니다. 같이 합시다." (출처: Mashable.com)

API란?

아는 사람들로부터 “API란 무엇인가?“라는 질문을 참 자주 받았다. API는 Application Programming Interface(애플리케이션 프로그래밍 인터페이스)의 약자이다. 쉽게 설명하기 위해 자동차의 예를 들어 보겠다.

자동차는, 운전하는 사람 입장에서는 참 간단하게 보인다. 액셀러레이터를 밟으면 나가고, 브레이크를 밟으면 선다. 핸들을 돌리면 방향이 바뀐다. 기어를 사용해서 변속을 할 수 있다. 사실, 내부에서 일어나는 일은 훨씬 복잡하다. 휘발유가 공급되고, 공기와 섞이고, 이를 연료로 엔진 속에서 연소가 일어나고, 그 결과 엔진이 돌아간다. 브레이크를 밟으면 바퀴에 달린 브레이크 패드에 압력이 가해진다. 하지만 운전하는 사람은 내부에서 일어나는 일은 알 필요가 없다. 여기서 ‘액셀러레이터, 브레이크, 핸들, 기어’에 해당하는 것이 “자동차의 API”이다. 코드로 예를 들면 아래와 같다.

  • putOnAccelerator (int pushLevel): 엑셀러레이터를 발로 밟는 정도(pushLevel)를 보내면, 그만큼 차가 추진력을 받을 것이다.
  • putOnBreak (int pushLevel): 브레이크를 밟는 정도(pushLevel)를 보내면, 그만큼 차의 속력이 감소할 것이다.
  • rotateSteeringWheel (float angle): 핸들의 회전 각(angle)을 보내면 차가 그만큼 왼쪽이나 오른쪽으로 돈다.
  • changeGear (int newGear): 새로운 기어 값(newGear)을 보내면 그에 따라 차가 변속한다.
  • getCurrentSpeed(): 현재 차의 속도를 알려준다.
'자동차의 API'에 해당하는 핸들, 액셀, 브레이크, 기어

다시 말해, ‘자동차의 API’란 사용자가 차를 움직이게 하기 위해서, 또는 차의 상태를 알아내기 위해서는 어떻게 해야 하는지를 일정한 규칙으로 정해둔 것이다. 사용자는 차의 내부 원리에 대해 모두 알 필요 없이 자동차의 API만 익히면 차를 운전할 수 있다. 더 나아가, 원하면 이러한 API들을 이용해서 원격으로 차를 움직이게 하는 프로그램을 만들 수가 있다. 어떤 사용자는 더 이보다 더 많이 차의 세부적인 내용을 조정하고 싶을 수가 있다. 예를 들어 차에 따라서는 ‘스포츠’ 옵션이 있어서, 이걸 켜면 기어 변속이 지연되고, 차가 전반적으로 힘이 세졌다는 느낌을 받는다. 자동차 회사에서 이러한 API를 더 많이 공개할수록 사용자의 자유도는 올라간다.

페이스북 API, 트위터 API도 비슷한 개념이다. 페이스북 API를 익히면 페이스북에서 정보를 얻어오고, 친구들의 사진을 다운로드하고, 페이스북에 업데이트하는 프로그램을 만들 수 있다. 예를 들어 페이스북의 그래프 API 중에 이런 것이 있다.

https://graph.facebook.com/sungmoon.cho

‘sungmoon.cho’라는 페이스북 유저의 가장 기본적인 정보를 요청하는 API이다. 아래와 같은 결과를 얻는다 (브라우저에 이 주소를 직접 복사해서 붙여넣기하면 테스트할 수 있다).

{
   "id": "524334413",
   "name": "Sungmoon Cho",
   "first_name": "Sungmoon",
   "last_name": "Cho",
   "link": "https://www.facebook.com/sungmoon.cho",
   "username": "sungmoon.cho",
   "gender": "male",
   "locale": "en_US"
}

즉, sungmoon.cho라는 아이디를 가진 유저는 페이스북 번호가 524334413이고, 이름은 Sungmoon, 성은 Cho이며, 남자이고, 설정 언어는 영어(en_US)이다. 주소에서 ‘sungmoon.cho’를 다른 아이디로 바꿔 보면 다른 결과를 얻는다. (이와 같이, 페이스북에서는 아이디만 알면 별도의 보안 절차 없이 성별은 무조건 알아낼 수 있도록 되어 있다.)

비슷하게, https://graph.facebook.com/me/friends 는 ‘내 친구들의 리스트’를 알아오는 API이다. 아래와 같이 친구 리스트를 얻는다 (물론, 다른 사람의 친구 리스트를 얻어오기 위해서는 그 사람의 사전 허락이 있어야만 하고, API 사용자는 허락 받았음을 증명할 수 있어야 한다. 이 때 사용되는 프로토콜이 OAuth이다.’).

{
   "data": [
      {
         "name": "Andrew Danger Chung",
         "id": "2493"
      },
      {
         "name": "Johanna Javadizadeh",
         "id": "6110"
      },
      {
         "name": "John Luna",
         "id": "7592"
      },
      {
         "name": "John Lai",
         "id": "20158"
      },

또한, https://graph.facebook.com/sungmoon.cho/picture 는 sungmoon.cho라는 유저의 프로필 사진을 얻어오는 API이다. https://graph.facebook.com/arjun/feed 라는 API를 이용하면 ‘arjun’이라는 사용자의 벽(wall)에 메시지를 남길 수 있다. 페이스북에 정의된 이러한 API는 무궁무진하고, 개발자들은 API를 이용하면 수많은 재미있는 응용 프로그램들을 만들어낼 수 있다. 이런 응용프로그램이 많아질수록 페이스북의 가치는 올라간다. 그래서 많은 회사들이 API를 정의하고, 잘 정리해서 사용법과 함께 이를 공개하는 것이다. 공개하는 API가 많아질수록 개발자들에게는 더 유용하지만, 프라이버시 침해 및 보안의 위험 또한 증가하기 때문에 무조건 많은 것을 공개하는 것이 정답은 아니다.