GDE란?
구글에서는 구글 기술에 관심이 많은 개발자를 “Google Developers Expert (GDE)”로 선정하여, 개발자 커뮤니티 구성원들이 구글 엔지니어들과 소통하여 새로운 기술을 익히고 다양한 개발 경험을 공유하는 장을 마련하고 있습니다. GDE 선정 프로그램은 올해부터 도입된 것으로, 구글 개발자 커뮤니티에서 좋은 성과와 영향력을 보이는 개발자를 대상으로 매년 GDE를 선정합니다.

전 세계 GDE가 한자리에 모인 GDE Summit!
저는 이번에 Google Developers Expert로 선정되어, GDE Summit에 다녀오게 되었습니다. 처음 GDE들을 만나게 되었을 때는 조금 놀랐습니다. 유럽, 아시아, 남미 등 여러 지역에서 온 다양한 개발자들이 한 자리에 모여 있었죠. 많은 개발자가 한 자리에 모이게 되자 조금은 긴장되고 흥분되더군요. 이렇게 다양한 인종의 개발자가 모이는 것도 처음이었고 각자 다른 기술을 가지고 있는 개발자인 것도 처음이었죠. 우리는 함께 셔틀 버스를 타고 들뜬 마음으로 구글로 이동했습니다.



많은 지역에서 다양한 인종의 개발자들이 모였습니다.
저는 아시아인들과 있었습니다.  제 뒷 열은 프랑스, 이탈리아 개발자들입니다.
그 다음으로 미국, 이스라엘, 인도 개발자들이 있네요.



한 시간 쯤 달려 구글 파트너 플렉스에 도착했습니다. 건물만 봐도 ‘아 딱 여기가 구글이구나’라는 정체성(?)이 느껴지는 건물이었는데요, 구글 파트너 플렉스를 보고 들뜬 사람은 저 혼자가 아니었던 것 같습니다. 많은 사람들이 사진을 촬영하고 SNS나 증강 현실 프로그램을 사용하더군요. 특히 잉그레스(Ingress)를 사용하시는 분들이 많았습니다. 참고로, 잉그레스는 구글이 만든 위치 기반 증강 현실 프로그램으로 건물이나 지형상에 있는 조형물로 점령하여 점수를 쌓는 일종의 게임입니다. 사람들이 부지런히 돌아다니며 사진을 찍거나 건물과 조형물들에 체크인 하더군요. 기술 선도 기업인 구글에서 첨단 기술의 앱을 사용하는 사람들을 보니 신기하고 재밌었습니다.

구글 파트너스 플렉스에 들어가 자리를 잡고 가방을 풀고 있으니 구글러 마이크 윈턴 (Mike Winton)이 들어왔습니다. 그가 자기 소개를 하면서 행사가 시작되었죠. 마이크 윈턴이 구글에 처음 온 것은 6년 전이라고 합니다. 그 때는 안드로이드도 없었고 크롬과 앱 엔진도 없었습니다. 구글은 사실 검색 엔진 회사라고 말하는게 가장 적합한 상황이었습니다. 그 후 6년 동안 어머어마한 변화를 겪은 것 같습니다. 구글이 만든 플랫폼인 크롬과 안드로이드, 그리고 그 위에 형성된 생태계. 수많은 구글 기술과 사용자, 개발자들이 함께 만들어내는 다양한 사용자 경험 속에서 지내게 되었습니다. 구글이 만든 플랫폼과 여러 기술들을 사용자와 개발자가 다양한 방식으로 사용함에 따라서 구글과 커뮤니티 간의 소통의 중요성이 대두된 것 같습니다. 한국에서도 구글 개발자 그룹 (GDG - Google Developers Group)의 형태로 구글 기술에 대한 커뮤니티들이 형성되고 있습니다.



운전사가 필요없는 자동차. 

구글 드라이버리스 카에 대한 설명을 듣고 있습니다.

다음으로 구글러 아미르 시베트(Amir Shevat)의 주도로 자기소개 시간을 가졌습니다. 아미르를 시작으로 자신을 소개하고 직업 및 관심 분야 등을 설명하는 시간이었습니다. 정말 재미있는 분들이 많았습니다. 소개를 하면서 서로의 관심사와 지역을 물어보고 더 친해질 수 있는 계시가 되었습니다. 저는 제가 쓰는 영문 이름 리어나도 (Leonard) 때문에 많은 일이 있었습니다. 어떤 사람들은 제 이름이 디카프리오라고 농담을 하고 이탈리아인들은 저를 이탈리아 패밀리에 끼워주기도 하였습니다. 자기소개를 하고 나니 서로 서먹서먹함이 조금씩 줄고 조금 더 자신의 이야기를 쉽게 공유할 수 있었습니다.


일본에선 온 친구들 (왼쪽부터) 켄, 토루, 마샤입니다. 

일본은 다양한 모임을 전국적으로 진행하고 있었습니다.

벤치 마킹! 일본 개발자 커뮤니티
아미르는 커뮤니티의 가치를 이야기하며 커뮤니티는 일방적으로 생기거나 뭔가를 주는 것이 아니라 서로 돕고 도우며 이루어지는 관계라고 이야기를 하였습니다. 그리고 일례로 일본의 커뮤니티를 소개하였습니다.
일본에서 커뮤니티와 행사가 어떻게 발전되었는지 일본 구글러 푸미 야마자키(Fumi Yamazaki)가 이야기를 이어갔습니다. 먼저 그녀는 GDE의 역사에 대해 이야기하여였습니다. GDE의 전신은 구글 API 전문가 과정으로 2008년 6월 10일에 시작되었습니다. 구글의 기술을 보다 개발자와 사용자 가까이에서 전하기 위해 시작한 이 프로그램은 성공적이었습니다. 이후에 이 프로그램을 확대하기 위해 이스라일에서 파일럿 과정을 거치고 그 이후에 전세계적으로 프로그램이 확장되었습니다.

일본의 개발자 커뮤니티를 소개했는데 인상적인 점이 두 가지 있었습니다. 첫째는 여러 기술을 함께 다룬다는 것이었습니다. 일본에는 2만 명이 넘는 개발자들이 커뮤니티에 참여하고 있는데, 특정 기술을 중심으로한 시간을 가진 다음에 다 같이 모여서 여러 기술을 경험할 수 있는 자리를 가집니다. 그러한 형태로 모임을 유지하여 관심 기술에 대한 깊이 있는 이해와 전체 기술에 대한 조감을 살펴 볼 수 있는 기회를 가진다고 합니다.



Google Developers Expert의 발표도 있었습니다. 

케빈 무어는 익살스럽게 웹 기술의 차이를 소개하였습니다.

또한 전국의 커뮤니티가 같이 활동하는 점도 재미있었습니다. 보통 일반적인 모임은 사람이 많은 곳에서 주로 열립니다. 한국이라면 서울을 중심으로 열리고 다른 지역은 보통은 아무런 행사가 없거나 참관자로 함께 하죠. 일본의 모임은 구글의 행아웃 기술을 이용한 화상 연결을 기본으로 하고 있었습니다. 각 세션을 다른 지역에 있는 발표자가 행아웃으로 발표하고 그 내용을 서로 공유하고 함께 참여했습니다.

푸미의 케이스 소개를 마치고 나니 모두들 서로 지역에 있는 커뮤니티를 어떻게 운영해야 할지 많은 이야기를 나누더군요. 저도 일본의 커뮤니티 경험에서 많은 것을 배울 수 있었던 것 같습니다. 한국에서의 행사는 보통 세션별로 다른 방을 배정하여 진행하는 경우가 많아 구글 기술에 관심이 많은 사람들이 모여도 서로 어떤 기술이 있는지 다른 사람들이 관심을 가지는 기술을 이해하기 어려운 점이 있었습니다. 다트(Dart), 고(GO), 크롬, 안드로이드 개발자들이 모여도 서로 다른 장소에 있기 때문에 서로의 기술을 이해할 기회가 없었습니다. 같이 만날 일이 있어도 ‘저 기술은 모바일 기술이다, 시스템 프로그래밍 언어다, 웹 기술이다’ 라고 이야기하며 가끔은 동떨어진 기술인 양 이야기할 때도 있었습니다. 반면 일본의 경우에는 다양한 기술들을 함께 공유할 수 있는 기회를 가지고 있었습니다. 일본의 케이스는 우리의 활동에 대해서도 다시 생각해볼 수 있는 계기가 되었습니다. 



서로의 피드백을 받으며 프레젠테이션도 연습하였습니다.


본격적인 GDE 프로그램, 구글의 기술을 살펴보자.
그 다음으로 본격적으로 GDE가 참석할 수 있는 시간이었습니다. 그 첫 번째는 프레젠테이션 스킬에 관한 시간이었습니다. 저는 프레젠테이션에 있어 중요한 것은 자료의 전달이기 때문에 어떤 형태로 어떤 내용을 담아 전달하는 것이 중요할까 생각했었습니다. 하지만 이 세션에서 이야기하는 것은 전혀 다른 내용이었습니다. 다른 사람에게 감정과 에너지를 어떻게 전달하느냐를 이야기했죠. 몇몇의 자원자를 각각 다른 기분으로 걷게 하고 기분을 느끼게 하는 것이나 각자 다른 기분일 때 말을 하는 연습과, 서로의 비음성 에너지에 대해 피드백을 하는 연습을 하였습니다. 저는 머리를 망치로 맞은 기분이었습니다. 어떤 감정과 어떤 에너지를 전달하느냐 그런 것에 대해 고민해 본적은 거의 없었습니다. 색다른 경험이라서 재밌게 참여할 수 있었습니다.

다음 날 행사는 두 가지 형태로 이루어졌습니다. 첫째는 전체 기술에 대한 조망이었습니다. 구글이 가진 다양한 기술에 대한 대체적인 설명과 근황을 소개했습니다. 두 번째로는 각 기술별로 구글 직원들과 모여 실제 해당 기술에 대한 깊이 있는 이야기를 나눌 수 있는 시간이었습니다.



프로페셔널 안드로이드 애플리케이션 개발로 유명한 리토 마이어입니다. 

안드로이드 4.2의 변화를 자세하게 설명하고 있습니다.

첫 번째 소개된 기술은 역시나 안드로이드였습니다. 안드로이드는 요즘 정말 많은 사람들이 관심을 가지고 있습니다. 최신 버전 4.2의 변화들을 설명해주었습니다. 이전까지 굵직한 업그레이드가 주였다면 이번에는 운영체제 구석구석까지 사용자의 가려움을 긁어주더군요. 여러 국가용 폰트, 여러 국가용 사전, 다중 사용자, 더 나아진 위젯, 프래그먼트, 프레젠테이션 지원 등이 추가되었습니다.  안드로이드는 이제 디테일한 부분에 신경을 써 더 매끄러운 운영체제가 되어가는 것 같습니다.

다음으로 크롬 팀의 발표가 이어졌습니다. 크롬팀에서는 관점을 크롬 웹 브라우저 보다는 웹 생태계에 비중을 맞추고 있었습니다. 리얼타임으로 소리와 영상을 주고 받을 수 있는 WebAudio, WebRTC와 같은 기술도 중요했으며, 개발자를 편하게 할 기술과 도구에 대해서도 중요하게 생각하고 있었습니다. 자바스크립트 개발을 쉽게 해주는 AngularJS, 백엔드 통합을 쉽게 해주는 Yeoman, 크롬 앱스토어, 확장 기능, 강력한 웹 언어 다트(Dart)를 소개하였습니다. 앞으로의 웹 개발은 더 쉽고 강력하겠더군요.

다음으로 크게 할당된 세션은 구글 클라우드 세션이었습니다. 널리 알려졌던 클라우드 기술인 구글 앱 엔진부터 이야기를 시작했습니다. 앱 엔진을 사용하면 관리와 배포 문제에서 자유로워져서 웹 애플리케이션의 개발에만 집중할 수 있었습니다. 많은 웹 서비스에서 관리와 배포에 많은 비용과 인력이 들어가고 있는데, 구글 앱 엔진은 개발 단계를 조금 더 끌어올려줄 수 있겠다는 생각이 들었습니다. 또 구글 컴퓨트 엔진을 사용해서 더 쉽게 가상 머신을 이용한 분산 처리 환경을 쉽게 마련할 수 있게 되었습니다. 빅 쿼리(Bigquery) 기술도 흥미로왔습니다. 600기가 이상의 데이터에 대한 데이터를 SQL 언어로 30초만에 정규식 연산을 처리하는 것이 인상적이었습니다. 




안드로이드에서 가장 큰 변화가 있었던 허니콤입니다.


몇 가지 기술들에 대한 종합적인 설명이 이어진 다음에 각 기술에 대한 모임을 가졌습니다. 저는 안드로이드 기술에 관심이 많아 안드로이드 팀과 대화를 했는데 흥미로운 시간이었습니다. 안드로이드는 다양한 하드웨어와 환경을 지원하기 위해 고도로 추상화된 환경입니다. 다양한 환경에 운영체제 서비스를 제공하는 것은 많은 사용자에게 훌륭한 경험을 주지만 반면에 개발자에겐 언제나 쉬운 일은 아니었죠. 다행히도 구글의 기술자들은 안드로이드의 다양한 도전에 대해 인지하고 있었습니다. 앞으로 안드로이드 개발자에 대한 지원은 점차 더 나아질 것 같습니다. 그들은 일관된 환경, 다양한 언어 사용자를 위한 문서화, 더 좋은 앱을 만들기 위한 생태계와 교육 문제에 대해 관심이 많았습니다.

전 세계 개발자들과 아이디어 공유
그 이후로는 많은 개발자들과 자유롭게 이야기하는 시간들을 가졌는데요, 정말 유익한 시간이었습니다. 제가 관심있는 기술에 대해 이야기를 나누면서 기술을 고도화할 수 있었습니다. 저는 개인적으로 씬 그래프 엔진에 대해 관심이 많습니다. 씬 그래프는 3D의 모델이 화면에 보이고 변화할 수 있도록 계층 구조를 만든 것입니다. 아르헨티나의 개발자 마티아스 모리나스 (Matias Molinas)와 안드로이드에서의 씬 그래프 엔진에 대해 깊은 이야기를 나누고 웹에서 3D 그래픽을 다루는 기술인 WebGL 영역에서도 여러 이야기를 나누었습니다.

또 제가 잘 모르던 기술에 대해서 도움을 받을 수 도 있었습니다. 저는 구글 맵스의 API를 직접 사용해 본적이 없었는데 프랑스의 개발자 시릴 모티어(Cyril Mottier)는 짧은 시간동안 안드로이드에서 맵을 사용할 때 어떤 점을 주의해야 하는지 어떤 것을 중심으로 해야하는지 설명해주었습니다. 이렇게 서로 정보를 교류하면서 기술을 고도화시켜갈 수 있는 것은 정말 놀라운 경험이었습니다. 



전 세계의 Google Developers Expert가 한자리에 모여 사진을 찍었습니다.


GDE Summit, 그 이후
저는 이번 Google Developers Expert Summit을 통해 수많은 기술들을 쉽게 접근할 수 있었습니다. 제가 잘 모르는 기술에 대해 많은 개발자들에게 도움을 받을 수 있었습니다. 이를 통해 영감을 얻고 더 높은 기술에 대한 이해를 얻을 수 있었고 많은 친구도 사귈 수 있었습니다.

한국에서 많은 개발자들이 서로가 가진 유사한 기술에 대해서도 이야기를 나누며 답을 찾고 모르는 기술에 대해서도 소개할 수 있는 장을 만든다면 훨씬 더 나은 기술 문화를 만들 수 있을 것 같습니다. 이번 행사를 바탕으로 기술 커뮤니티의 더 나은 방안을 고민해보고 시도해보려 합니다. 다양한 기술들을 교류할 기회를 만들면 더 재미있는 것을 많이 할 수 있을 것 같습니다.

많은 이야기를 하면서 기술을 발전시키고 보다 더 나은 커뮤니티를 만들어 나가면 개발자의 입장에서도 시간을 절약하고 보다 좋은 앱을 만들 수 있을 것 같습니다. 앞으로 한국 커뮤니티에서도 더 많은 이야기를 나누고 보다 더 좋은 개발을 하고, 나아가 더 나은 세상을 함께 만들 수 있기를 바랍니다. 감사합니다.



* 한국 GDE 김용욱님은?
팅크웨어에서 일하고 있는 안드로이드 개발자로,
OpenGL ES를 이용한 모바일 그래픽에 관심이 많고 렌더스크립트 기술을 연구했습니다.
현재  GDG Android Korea를 운영하며 많은 개발자와 안드로이드 기술을 교류하고 있습니다.


1. 소개
‘구름 IDE’는 클라우드 통합 개발 환경을 제공하는 node.js 기반의 오픈 소스 프로젝트 입니다. 플랫폼과 브라우저에 구속받지 않고 언제(Anytime), 어디서든(Anywhere) 웹브라우저에서 일관된 개발 환경을 제공하는 것을 목표로 진행되고 있습니다. 구름 IDE를 통해 C/C++, Java, Go, Dart, Node.js, PHP, JSP등 다양한 언어를 이용하여 웹상에서 빌드, 디버깅, 실행 등의 개발을 할 수 있으며, 플러그인 기능을 통해 얼마든지 확장 가능합니다. 또한 UI 작성 및 UML 작성 도구를 지원하고 실시간 협업 환경을 제공함으로써 개발 효율성을 극대화할 수 있다는 장점이 있습니다.

소개 동영상 : http://www.youtube.com/watch?feature=player_embedded&v=xTJOa8sGfq0

▶ 홈페이지 : http://goorm.io
▶ 페이스북 :
▶ 트위터 : https://twitter.com/goormIDE

2. 사용한 구글 관련 기술

  • Chrome
  • HTML5
  • Go
  • Dart


3. goorm의 특징
1) 웹 브라우저만 있다면 어디서든지 개발
 언제, 어디서든 웹을 통하여 곧바로 개발이 가능합니다!

2) 복잡한 개발환경 구성? 협업? 한 번의 설정으로 끝
 단 한번의 설정으로 어디에서나 일관된 협업 개발 환경을 제공합니다.

3) 다양한 언어 지원, 확장성 있는 플러그인
 C/C++, Java, Go, Dart, Node.js, PHP, JSP등 다양한 프로그래밍 언어를 지원하는 플러그인 뿐만 아니라 추가적인 기능을 제공하는 다양한 플러그인을 쉽게 설치/관리할 수 있습니다.

4) 실시간 협업을 통한 효율적인 개발
 실시간 협업 기능을 통해 다른 팀원들과 함께 개발 할 수 있습니다. 또한 채팅, 슬라이드 공유 기능을 통하여 효율적인 의사소통을 할 수 있습니다. UML을 통해 SW를 함께 설계하는 것도 가능합니다.

5) 웹기반 터미널 기능
 터미널 기능을 통하여, 구름에서 제공하는 기능 뿐만 아니라 터미널 명령어를 통하여 빌드 스크립트를 실행하거나 서버환경을 즉석에서 변경하는 등 더욱 자유로운 개발환경 구성이 가능합니다. 물론 금지명령어 설정이나 권한 제한을 통해 보안 설정도 가능합니다.

http://www.slideshare.net/jeg0330/goorm-15035830


4. 설치방법 및 튜토리얼
http://goorm.io/community/tip?article_id=2


5. 앞으로의 계획
goorm은 통합 개발 환경을 지향하고 있습니다. 따라서 Python, Android 개발 등을 지원하기 위한 플러그인과 프로젝트 파일의 쉬운 접근, 관리를 위한 google drive / dropbox / ftp 지원 기능 등 클라우드 환경을 적극 이용한 goorm IDE만의 특별한 기능들을 준비하고 있습니다. 이런 기능 들을 묶어서 1월 말에 버전 1.1(코드명 뭉게구름)으로 정식 릴리즈할 계획입니다.


6. 라이센스
goorm은 GPL v3를 라이센스로 사용하고 있는 오픈 소스 프로젝트입니다. 어느 누구나 소스코드를 열람하고 사용할 수 있으나, GPL v3의 제약사항을 지켜주셔야 합니다. 대표적인 제약사항은 GPL v3의 소스코드를 특정한 제품에 포함시키거나 혹은 그와 함께 배포하는 경우에 해당 소스에 설치 정보(Installation Information)를 함께 제공해야 한다는 것입니다. 즉, 소스코드를 수정하시고 재배포 하신다면, 수정하신 소스코드도 공개하셔야 한다는 것입니다.
GPL v3에 대해, 좀 더 자세한 사항을 알고 싶으시다면,
http://www.gnu.org/licenses/gpl-3.0.html 를 참조하시기 바랍니다.


7. 이 글을 마치며
구글 헥페어를 통하여 많은 분들이 goorm을 기다리고 있다는 것을 알게 되었습니다. 저희의 공식적인 첫 자리임에도 불구하고, 오시는 분마다 관심을 가져주셔서 매우 놀랐고, 뿌듯했습니다. 이번 자리를 통해 보다 프로젝트에 애정과 열정이 실리지 않았나 생각됩니다.
goorm은 구글 헥페어에서 느낀 관심과 열정을 발판 삼아 계속 발전해 나갈 것입니다. 시간, 장소에 구애받지 않고 우리 모두가 개발을 할 수 있는 그런 날이 올 때까지 goorm! 화이팅!


8. 팀원 소개
류성태 (sungtae.ryu@goorm.io) ▶ Founder / Main Developer
성균관대학교 대학원생입니다. 리눅스 파일 시스템을 연구하고 있으며, 이외에도 node.js, 새로운 웹 기술, 클라우드 컴퓨팅 등에도 관심이 많습니다. goorm 프로젝트가 널리 이롭게 쓰였으면 좋겠습니다.

김누리 (noori.kim@goorm.io) ▶ Main Developer / Contributor
성균관대학교 컴퓨터공학과 학생입니다. 클라우드 기술과 Node.js, 모바일 프로그래밍 등에 관심이 있습니다. goorm의 기능 개발 및 버그 픽스를 맡고 있습니다.

안병웅 (bu.ahn@goorm.io) ▶ Main Developer / Contributor
성균관대학교 컴퓨터공학과 학생입니다. 클라우드 기술, 웹개발 및 최신기술에 관심이 많습니다.

조은귀 (eungwi.jo@goorm.io) ▶ Main Developer / Contributor
성균관대학교 컴퓨터공학과 학생입니다. 클라우드 기술, 웹개발 등에 관심이 있습니다.

(아래의 팀원들은 핵페어 신청 이후에 추가된 멤버들입니다.)
남유석 (youseok.nam@goorm.io) ▶ Main Developer / Contributor
성균관대학교 컴퓨터공학과 학생입니다. Node.js, Android, System Security에 관심이 있으며, goorm에서 전체적인 버그 체크와 버그 픽스를 맡고 있습니다.

최윤섭 (yoonseop.choe@goorm.io) ▶ Main Developer / Contributor
곧 졸업하는 김누리군의 학교 동기입니다. 국내 IT관련 N사에 취업할 예정입니다. / 안드로이드, 웹개발, 서버언어, SNS에 관심이 많습니다.  / 홈페이지 유지보수, DB연동 등을 담당하고 있습니다.


IRCTalk 지금까지 IRC가 단순한 서버-클라이언트 구조를 취하며 가져왔던 문제점인 멀티 플랫폼/모바일 환경에서의 약점을 극복하였습니다. 
기존 IRC는 서버와 클라이언트가 직접 연결을 맺고 있어 연결이 끊어지는 경우 유저가 들어가 있던 채널에서 모두 퇴장하게 되고 이후의 대화 내용들을 놓칩니다. 특히 모바일 기기에서 3G/LTE 와 같은 모바일 네트워크를 이용할 경우 모바일 네트워크의 특성상 접속이 자주 끊어져 사용성이 크게 저하됩니다.


사람들은 자신이 창을 보고 있는 시간 외에 사람들이 나누었던 대화를 보기 위해서 자신이 가진 서버에서 IRC를 접속해두거나, 회사나 집을 오가며 여러 대의 컴퓨터를 사용하기 때문에 같은 채널에 불필요하게 여러 개의 닉네임으로 접속하는 경우가 있습니다. 뿐만 아니라 요즘에는 모바일 기기도 늘어나 한 사람이 한 채널에 여러 개의 닉네임으로 접속하는 경우가 늘어났습니다.


저희는 위와 같은 문제를 해결하기 위해 중간에서 IRC 연결을 안정적으로 유지해주는 시스템을 기반으로한 서비스를 목표로  프로젝트를 시작하게 되었습니다.






Why IRCTalk?

IRC 연결이 항상 유지됩니다.

컴퓨터를 켜지 않아도, 잠을 잘 때에도 IRC에 항상 접속해 있을 수 있습니다. 유저가 직접 접속하는 것이 아니라 IRCTalk서버가 IRC에 접속을 맺고 있습니다. 유저는 IRCTalk 클라이언트에서의 접속 유지에 신경을 쓰지 않아도 됩니다. 대화 내용은 저장되어 나중에 놓친 대화를 살펴볼 수 있습니다. 대화 내용은 일정 기간 보관 후 폐기됩니다.


멘션이 왔을 때 모바일 클라이언트에 푸시로 전달해 드립니다.


기존의 IRC 바운서 서비스들은 IRC연결이 서버상에서 접속되어 있더라도 클라이언트가 접속되어 있을 때만 멘션 알림을 받을 수 있었습니다. 멘션 알림이란 특정 상대방에게 꼭 봐야 할 내용이 있을 경우 상대방의 닉네임을 명시하면 클라이언트에서 알림을 표시해주는 기능입니다. 하지만 IRCTalk에서는  클라이언트가 접속되어있지 않더라도 푸시가 지원되는 플랫폼(Android 등)에서 푸시 알림을 전송하여 중요한 메세지를 놓치지 않게 해줍니다.


멀티 플랫폼을 지원합니다.


안드로이드, 웹(HTML5) 클라이언트가 현재 활발히 개발 중에 있으며 차후 iOS도 지원 예정입니다.


멀티 디바이스 이용을 지원합니다.


구글 계정을 이용하여 사용자 인증을 하고 있기 때문에 같은 구글 계정을 연동해 놓은 환경에서는 동일하게 동작합니다. 또한 여러 기기에서 동시에 접속해도 모든 디바이스에서 사용할 수 있도록 설계가 되어 있어서 멀티 디바이스를 사용하는 유저들도 아무런 제약없이 사용할 수 있습니다.



IRCTalk의 간단한 구성



IRCTalk 서버는 Go로 구현되어 있습니다. Go는 구글에서 만든 언어로 C++과 많은 점이 닮아 있지만 현대적인 요소들이 가미된 언어입니다. 이번 핵페어를 기회로 Go를 공부하면서 서버를 구현해 보기로 했습니다. 기존에는 App Engine에 적용하는 용도로 Go를 많이 사용하고 있고, Stand-Alone 서버로는 적용 사례가 많이 없기에 도전하는 마음으로 시도해 보았습니다.


IRCTalk 서버는 2개로 구성되어 있습니다. 클라이언트와의 통신을 담당하는 Websocket 서버(Frontend)와 IRC서버들과의 접속을 유지하고 관련된 메시지들을 처리하는 IRC Relay 서버(Backend)로 이루어져 있습니다. DB는 Redis를 사용하고 있습니다. 클라이언트와 Frontend서버와의 통신은 다양한 플랫폼을 지원하고 빠른 반응성을 위해 Websocket을 사용하였습니다. Frontend서버에선 사용자 인증 및 DB로부터 대화목록 정보를 읽어와 클라이언트로 전송하는 기능을 합니다. 
클라이언트에서 IRC관련 요청을 할 경우 Frontend서버에서 Backend서버로 메세지를 ZeroMQ를 통해서 전달합니다. Backend서버에서는 Frontend서버로부터 온 메세지를 처리하고 접속된 IRC서버들로부터 온 메세지를 DB에 저장하고 클라이언트로 실시간으로 전송해야할 메세지들은 ZeroMQ를 통해 Frontend서버로 전달해서 접속된 클라이언트로 보내어집니다. 이때 IRC서버로부터 멘션이 왔을 경우 접속된 클라이언트들에게는 Websocket채널로 알림 메세지가 전송이 되며 접속되어있지 않은 등록된 디바이스들에는 PushAgent를 통해서 푸시알림 메세지를 전송합니다.


앞으로...

아직은 개발 단계이기 때문에 미구현 기능들이 많고 잔 버그가 있습니다. 앞으로 몇 주 내에 closed beta 공개를 목표로 기능 구현 및 버그 수정 작업을 하고 있습니다. closed beta 서비스를 통해 확장성 및 안정성을 검증 및 보완해서 정식으로 서비스를 하는 것이 목표입니다. IRCTalk을 통해 모바일 시대에 잊혀져 가는 IRC를 되살리고 Go 언어의 가능성을 보여줄 수 있었으면 합니다. 또한 Hackfair라는 행사를 통해 시작된 프로젝트가 행사 이후에도 계속해서 개발되고 실제로 서비스 되는 의미 있는 사례가 되었으면 합니다. 끝으로 아래 링크에서 베타 참여 신청을 받고 있으니 많은 지원 부탁 드립니다.



Closed beta 참여 신청 - http://ircta.lk


IRCTalk 팀원

정주영(@iamquadr)> 서버 개발 및 설계를 담당하였습니다. 게임 개발을 해오다 현재 카카오에서 서버 및 클라이언트 개발을 하고 있습니다. 아직도 게임 분야에 관심이 많으며 주변 개발자들과 취미 코딩 모임을 열고 참석하기도 합니다.

김동우(@dongwookim)> 웹 버전 클라이언트를 담당하였습니다. javascript 및 css에 매우 능숙하며 iPhone개발도 많이 하고 있습니다. 카카오에서 일하고 있으며 많은 프로젝트에 기여하고 있습니다.

박영훈(@eie)> 안드로이드 클라이언트를 담당하였습니다. 카카오에서 일하고 있으며 안드로이드 클라이언트 개발을 하고 있습니다.




다음으로 Activity의 onActivityResult() 메소드로 전달된 구매 결과를 처리합니다.

public void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (requestCode == RC_BUY) {
       int responseCode = data.getIntExtra(RESPONSE_CODE);
       String purchaseData = data.getStringExtra(RESPONSE_INAPP_PURCHASE_DATA);
       String signature = data.getStringExtra(RESPONSE_INAPP_SIGNATURE);

       // handle purchase here (for a permanent item like a premium upgrade,
       // this means dispensing the benefits of the upgrade; for a consumable
       // item like "X gold coins", typically the application would initiate
       // consumption of the purchase here)
   }
}


이전 버전과 달리, 이제 모든 구매는 Google Play에서 관리됩니다. 즉, 주어진 아이템의 소유권은 언제든 쿼리될 수 있습니다. 비관리 아이템 (unmanaged item) 메카니즘과 동일하게 구현하기 위해서, 애플리케이션은 구매하는 즉시 해당 아이템 소비가 가능하며 성공적으로 소비되면 아이템의 혜택을 제공할 수 있습니다.

로컬 캐싱

새로운 API는 Google Play 스토어 애플리케이션의 신규 기능을 활용하여 앱 결제 정보를 디바이스에서 로컬로 캐시하여 애플리케이션에서 쉽게 사용하게 해줍니다. 이러한 기능으로 많은 API 호출이 Google Play 네트워크 연결하는 대신 캐시 검색을 통해 이루어져서 API 응답 시간을 상당히 단축시킵니다. 예를 들어, 애플리케이션은 아래와 같은 호출을 통해서 소유한 아이템을 쿼리할 수 있습니다.  

Bundle bundle = mService.getPurchases(3, mContext.getPackageName(), ITEM_TYPE_INAPP);
if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_OK) {
   ArrayList mySkus, myPurchases, mySignatures;
   mySkus = bundle.getStringArrayList(RESPONSE_INAPP_ITEM_LIST);
   myPurchases = bundle.getStringArrayList(RESPONSE_INAPP_PURCHASE_DATA_LIST);
   mySignatures = bundle.getStringArrayList(RESPONSE_INAPP_PURCHASE_SIGNATURE_LIST);

   // handle items here
}
소유한 아이템을  쿼리하는 것은 이전 API 버전에서는 매우 부담되는 서버 호출이었기 때문에 개발자들이 자주 실행할 수가 없었습니다. 하지만 새로운 버전에서는 로컬 캐싱을 구현하였기 때문에 애플리케에션은 이제 실행할 때마다, 이후에도 필요한 만큼 해당 쿼리를 만들 수 있습니다.

상품 정보

새로운 API에서는 개발자들이 오랫동안 기다려온 기능이 도입 되었습니다.  바로 인앱 상품 정보를 Google Play에서 직접 쿼리할 수 있는 기능입니다. 이제 개발자는 프로그램을 통해서 아이템 타이틀, 설명, 가격 등을 얻을 수 있습니다. 통화 변환이나 표기 변환 등은 이제 더 이상 필요하지 않습니다. 가격 정보는 사용자의 통화로 표기되며 사용 언어에 따라서 표기됩니다. 

Bundle bundle = mService.getSkuDetails(3, "com.example.myapp",
       ITEM_TYPE_INAPP, skus); // skus is a Bundle with the list of SKUs to query
if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_OK) {
   List detailsList = bundle.getStringArrayList(RESPONSE_SKU_DETAILS_LIST);
   for (String details : detailsList) {
       // details is a JSON string with
       // SKU details (title, description, price, ...)
   }
}

예를 들면, 사용자가 보는 가격 정보를 변경하기 위해서 애프리케이션의 코드를 업데이트할 필요 없이 개발자 콘솔에서 가격을 업데이트하고 API를 호출하여 애플리케이션에서 업데이트 된 가격(특별 홍보나 할인 정보 등)을 보여줄 수 있는 것입니다.

샘플 애플리케이션

신규 API에 추가하여, 인앱 결제 구현법을 보여주는 새로운 샘플 애플리케이션을 발표합니다. 여기에는 JSON 문자열과 번들의 마샬링 및 언마샬링 데이터 구조, 서명 검증, 애플리케이션의 UI 쓰레드에서 개발자가 API를 직접 호출하도록 해주기 위하여 자동으로 백그라운드 작업을 관리하는 유틸리티 등과 같이 자주 사용하는 보일러 판 코드를 구현한 헬퍼 클래스가 포함되어 있습니다. 구현 프로세스를 훨씬 간소화할 수 있기 때문에 인앱 결제를 접해보지 않은 개발자는 샘플에서 코드를 사용하기를 강력하게 권장합니다. 샘플 애플리케이션은 Android SDK Manager를 통해서 다운로드 받을 수 있습니다.

앱 관련 키

인앱 결제 버전 3과 함께 도입된 기타 변경 사항에 따라, 라이센싱과 인앱 결제 키를 관리하는 방법이 개선되었습니다. 개발자가 아닌 각 앱마다 키가 설정되어 있으며 Google Play Developer Console 프리뷰에서 각 애플리케이션을 위한 “서비스 및 API” 페이지에서 확인 가능합니다. 기존 애플리케이션은 현재 보유한 키로 계속해서 사용이 가능합니다.

시작하기!

새로운 API를 사용하여 애플리케이션에 인앱 결제를 구현하시려면  업데이트된 In-App 결제 관련 문서를 확인하시고 인앱 상품 판매 교육 강의를 들어보세요. 인앱 결제 버전 3을 사용하려면, 새로운 Google Play 개발자 콘솔 프리뷰를 사용하셔야 합니다.